傅里叶描述子、HOG特征描述子原理及matlab代码

2023-05-16

一、傅里叶描述子
傅里叶描述子的作用是用来描述图像的轮廓信息,具有平移、旋转、尺度不变性特征。
对于一幅图像,通过傅里叶描述子获得其图像轮廓信息,其本质就是空间、频域变换问题。通过将图像中的像素点进行傅里叶变换,得到得到图像的轮廓信息,
对于曲线上一点,可以用复数表示:
在这里插入图片描述
对s(t)进行傅里叶变换可得:
在这里插入图片描述
其中,a(k)为傅里叶描述子,为了使其具有平移,缩放,和旋转不变性需要对其进行归一化,归一化后的模为:在这里插入图片描述
matlab代码:

InputImage=imread('捕获.JPG');
figure;
 imshow(InputImage);
title('原始图像');
InputImage=imresize(InputImage,0.15);
InputImage=imadjust(InputImage,[0.1,0.9],[0.1,1],0.6);
g=InputImage(:,:,1);
g=wiener2(g,[99]);
T=graythresh(g);
bw=im2bw(g,T);
figure;
 imshow(bw);
title('二值图像');
flag_index=2;
[m,n]=size(bw);
bound =boundaries(bw);
bound =bound{1};
bim=bound2im(bound,m,n);
 figure;
 imshow(bim,[]);
 title('提取的边界图');
z=frdescp(bound);
%计算傅利叶描述子
zc=fftshift(z);
feature= abs(zc([1:13]))'
figure;
plot(feature); title('特征向量图');

二、HOG特征描述子
特征描述子,实质是把图像转换为向量表示。HOG(Histogram of Oriented Gridients方向梯度直方图)。
由于一幅图像太大,不能直接获取其特征,通常我们要把它划分成小区域,便于提取其特征。方向梯度直方图就是将图像先划分为不同的区块,然后对每个区块又划分为多个单元。先对每个单元计算其梯度幅值和方向,然后每个块包含的单元中的特征向量串联起来,最后将所有块的特征组成一个向量,从而获得了整幅图像的特征。
梯度幅值和方向可以利用梯度算子如sobel算子来进行计算,计算过程如下:在这里插入图片描述

在这里插入图片描述
算法实现流程图为:
在这里插入图片描述
matlab代码(转):

clear;
clc;

img=imread('xjpic.jpg');%图片位置
%% 1、灰度化
img=rgb2gray(img);
img=double(img);
figure;
imshow(img,[]);%显示图像
title('灰度图像');
step=8;      %step*step个像素作为一个cell
[m1 ,n1]=size(img);%获取图像尺寸
%改变图像尺寸为step的最近整数倍,要不然后面就会发生错误
img=imresize(img,[floor(m1/step)*step,floor(n1/step)*step],'nearest');
[m,n]=size(img);
% 1、伽马校正
figure;
img=sqrt(img); 
imshow(img,[]);%显示图像
title('颜色归一化图像');
%% 下面是求边缘,也就是滤波,求梯度
fy=[-1 0 1];        %定义竖直模板
fx=fy';             %定义水平模板,该符号为转置
Iy=imfilter(img,fy,'replicate');    %竖直边缘
Ix=imfilter(img,fx,'replicate');    %水平边缘
Ied=sqrt(Ix.^2+Iy.^2);              %边缘强度 求梯度的长度
Iphase=Iy./Ix;              %边缘斜率,有些为inf,-inf,nan,其中nan需要再处理一下

figure;                     %% 创建一个画板
imshow(Ied,[]);             %显示梯度提取后的值
title('边缘提取图像');
%%  下面是求cell
orient=9;               %方向直方图的方向个数
angular=360/orient;        %每个方向包含的角度数,划分角度区间,0到40度一个区间...
Cell=cell(1,1);            %所有的角度直方图,cell是可以动态增加的,所以先设了一个
%% 开始获取orient个方向的特征向量
ii=1;                      
jj=1;
for i=1:step:m-step         %如果处理的m/step不是整数,最好是i=1:step:m-step
    ii=1;
    for j=1:step:n      %注释同上
        tmpx=Ix(i:i+step-1,j:j+step-1);     %水平
        %%  边缘强度
        tmped=Ied(i:i+step-1,j:j+step-1);  
        %% 局部边缘强度归一化
        tmped=tmped/sum(sum(tmped));    
        %% 边缘斜率局部提取
        tmpphase=Iphase(i:i+step-1,j:j+step-1);
        %% 创建直方图
        Hist=zeros(1,orient);               %当前step*step像素块统计角度直方图,就是cell

        %% 统计一个块里面的梯度信息
         for p=1:step
            for q=1:step
                %%  判断是不是一个数字True for Not-a-Number.如果不是一个数字,就归零
                if isnan(tmpphase(p,q))==1  %因为会遇到0/0的情况                                
                    tmpphase(p,q)=0;
                end
                %% 进行区间的划分
                ang=atan(tmpphase(p,q));    %atan求的是[-90 90]度之间
                ang=mod(ang*180/pi,360);    %全部变正,-90变270
                if tmpx(p,q)<0              %根据x方向确定真正的角度
                    if ang<90               %如果是第一象限
                        ang=ang+180;        %移到第三象限
                    end
                    if ang>270              %如果是第四象限
                        ang=ang-180;        %移到第二象限
                    end
                end
                ang=ang+0.0000001;          %防止ang为0
                Hist(ceil(ang/angular)) = Hist(ceil(ang/angular))+tmped(p,q);   %ceil向上取整,使用边缘强度加权
            end
         end
        %% 方向直方图归一化
        Hist=Hist/sum(Hist);    
        Cell{ii,jj}=Hist;       %放入Cell中
        ii=ii+1;                %针对Cell的y坐标循环变量
    end
    jj=jj+1;                    %针对Cell的x坐标循环变量
end

%% 下面是求feature,2*2个cell合成一个block,没有显式的求block
[m2, n2]=size(Cell);
feature=cell(1,(m2-1)*(n2-1));
for i=1:m2-1
   for j=1:n2-1           
        f=[];
        f=[f Cell{i,j}(:)' Cell{i,j+1}(:)' Cell{i+1,j}(:)' Cell{i+1,j+1}(:)'];
        feature{(i-1)*(n2-1)+j}=f;
   end
end

l=length(feature);
f=[];
for i=1:l
    f=[f;feature{i}(:)'];  
end 
figure
mesh(f)
title('特征向量图')

参考文献:
[1]https://blog.csdn.net/lemon_jay/article/details/89349006
[2]https://blog.csdn.net/dulingtingzi/article/details/51488060?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522158993436619195162517681%2522%252C%2522scm%2522%253A%252220140713.130102334…%2522%257D&request_id=158993436619195162517681&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2blogfirst_rank_v2~rank_v25-2-51488060.nonecase&utm_term=HOGmatlab代码

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

傅里叶描述子、HOG特征描述子原理及matlab代码 的相关文章

随机推荐

  • 电机功率计算公式

    电机功率计算公式 电动机输入功率 单相电机为P 61 UI xff0c 三相电机P 61 UIcos0 8 输出功率 xff08 驱动功率 xff09 P 61 FV F为力 牛顿 V xff1a 速度 m S xff09 换算到电机则有
  • C++ 中 map 字典与 set 集合的使用

    在 C 43 43 中 xff0c map 是关联容器 的一种 xff0c 关联容器将值 与键 关联到一起 xff0c 并使用键来查找值 这与 python 中的字典 类型类似 xff0c 也是用来存储键 值对 xff08 key valu
  • win11 安装 WSL2 在非 C 盘及配置(图形界面+代理)

    WSL 安装及配置 直接安装 WSL2 在非 C 盘启用 WSL 功能前提条件设置默认安装 WSL2安装在非 C 盘 图形界面先决条件更新 WSL 以支持 GUI 配置 WSL2 使用 Windows 网络代理 直接安装 WSL2 在非 C
  • CVTE嵌入式实习生与秋招

    目录 前言一 实习笔试二 实习面试三 实习工作内容四 公司看法 前言 今年暑假去CVTE实习了一个多月最后经过转正答辩 xff0c 获得了offer xff0c 现就我的实习经历和对公司的一些认知分享一下 xff08 仅代表个人观点 xff
  • 视频编解码行业及发展方向简述

    目录 一 视频行业1 视频是一个方兴未艾的大产业2 视频行业潜在商机大 人才缺口大3 了解华为海思的HI3518E方案 二 海思方案项目用到的硬件平台介绍1 本专栏文章使用的开发板配置2 处理器为什么选HI3518E 三 本专栏文章规划和核
  • 全面认识海思SDK及嵌入式层开发(1)

    目录 一 全面认识和检测配套开发套装1 套装配件介绍2 检测开发板3 注意 二 视频设备开发的技术流1 视频从产生到被消费的整个流程2 视频行业的商业角度分段3 几个疑问点 一 全面认识和检测配套开发套装 购买方式 xff1a 淘宝搜索 g
  • 嵌入式linux开发环境搭建(VMware16.0.0+Ubuntu16.04.3_X64)

    目录 一 安装VMware1 VMware介绍2 安装VMware16 0 0 二 安装ubuntu16 04 3 LTS1 Ubuntu介绍2 下载安装包iso3 安装 四 新安装Ubuntu的基本设置1 开机和关机等2 虚拟机基本设置3
  • 全面认识海思SDK及嵌入式层开发(2)

    目录 一 HI3518E方案系统整体架构介绍1 硬件上2 软件上 二 海思SDK的整体介绍三 海思SDK包的学习和实验1 2篇相关文档2 SDK包复制到linux原生目录中并解压3 SDK包操作的脚本程序研究4 SDK中源码包部分的配置编译
  • 计算机视觉之相机模型

    目录 一 相机模型1 相机与图像2 坐标系3 世界坐标系到摄像机坐标系4 摄像机坐标系到图像物理坐标系5 图像物理坐标系到图像像素坐标系6 摄像机坐标系到图像像素坐标系7 世界坐标系到图像像素坐标系 二 镜头畸变1 相机成像原理2 镜头畸变
  • vscode安装插件失败,完美解决

    vscode安装插件一直失败 xff0c 解决方案如下 访问vscode插件官网https marketplace visualstudio com vscode xff0c 搜索你要的插件点击插件详情 Version History 下载
  • ROS的topic通信机制

    1 通信步骤如图 xff1a 2 步骤介绍 第 xff08 0 xff09 步 xff1a talker gt master 发布者talker向mater注册 xff1a 包括节点的信息 需要发布的话题名等 xff0c 然后节点管理器RO
  • 关于快速幂和矩阵快速幂

    快速幂 xff1a 可参考该链接百科快速幂也可以参考这个博客快速幂博客 给出快速幂的题目和代码 xff1a 快速幂 取余计算 include lt iostream gt include lt string h gt using names
  • C/C++ 文件操作基础

    目录 1 文件分类 2 文件的打开与关闭 3 顺序读写文件 4 随机读写文件 5 其他与文件相关的操作 最近看 GNU Radio 源码看到了文件操作的部分 xff0c 因此记录下学习 C 43 43 C 操作文件的过程 本文的文件操作是
  • npm的装包原理

    原文 xff1a npm安装包原理 前言 xff1a 提起npm xff0c 大家第一个想到的应该就是 npm install 了 xff0c 但是 npm install 之后生成的 node modules大家有观察过吗 xff1f p
  • 02基于freertos实现串口通讯

    文章目录 一 操作步骤1 任务创建API2 步骤 二 代码 一 操作步骤 1 任务创建API 动态创建任务xTaskCreate 静态创建任务xTaskCreateStatic 任务句柄 xff1a 任务句柄就是一个指针 xff0c 指向任
  • windows中freeRTOS模拟器环境搭建

    windows中的freeRTOS使用 FreeRTOS参考手册中的模拟程序都是基于windows版本的模拟器 因此为了学习FreeRTOS xff0c 需要在Windows中搭建一下模拟器的运行环境 网络上的一般都是直接跑一下FreeRT
  • Xavier NX+4路Cameralink图像处理卡

    Xavier NX 43 4路Cameralink图像处理卡 M D CAP是天津雷航光电科技有限公司推出的一款复合加速计算平台 xff0c 由 NVidia GPU 和 Xilinx FPGA 通过PCIE 互联而成的高性能计算平台 其中
  • Xavier NX+KU040图像处理卡

    Xavier NX 43 KU040图像处理卡 CS NX21T是天津雷航光电科技有限公司推出的一款复合加速计算平台 xff0c 由 NVidia GPU 和 Xilinx FPGA 通过PCIE 互联而成的高性能计算平台 其中 FPGA
  • js使用input上传文件夹、拖拽上传文件夹并将文件夹结构展示为树形结构

    一 实现效果 左侧区域支持选择一个系统中的文件夹 xff0c 或者将文件夹拖拽到这个区域进行上传 xff0c 右侧区域可以将文件夹的结构展示为树形结构 二 代码实现 由于需要使用树形插件zTree xff0c 这个插件是依赖于jquery的
  • 傅里叶描述子、HOG特征描述子原理及matlab代码

    一 傅里叶描述子 傅里叶描述子的作用是用来描述图像的轮廓信息 xff0c 具有平移 旋转 尺度不变性特征 对于一幅图像 xff0c 通过傅里叶描述子获得其图像轮廓信息 xff0c 其本质就是空间 频域变换问题 通过将图像中的像素点进行傅里叶