matlab直方图归一化(matlab hog函数怎么用)

本文目录
- matlab hog函数怎么用
- 如何求取一个的图像的归一化直方图
- matlab 直方图归一化
- 用matlab算矩阵相似度
- matlab直方图归一化的示例
- 图像灰度直方图归一化 matlab实现
- matlab将三维直方图转为密度图
matlab hog函数怎么用
1.对原图像gamma校正,img=sqrt(img);
2.求图像竖直边缘,水平边缘,边缘强度,边缘斜率。
3.将图像每16*16(取其他也可以)个像素分到一个cell中。对于256*256的lena来说,就分成了16*16个cell了。
4.对于每个cell求其梯度方向直方图。通常取9(取其他也可以)个方向(特征),也就是每360/9=40度分到一个方向,方向大小按像素边缘强度加权。最后归一化直方图。
5.每2*2(取其他也可以)个cell合成一个block,所以这里就有(16-1)*(16-1)=225个block。
6.所以每个block中都有2*2*9个特征,一共有225个block,所以总的特征有225*36个。
当然一般HOG特征都不是对整幅图像取的,而是对图像中的一个滑动窗口取的。
如何求取一个的图像的归一化直方图
I=imread(’66.jpg’);
ima=rgb2hsv(I);
H=ima(:,:,1);
H=H*360;
=size(H);
H1=reshape(H,m1*n1,1);
); %色度直方图
figure,bar(X1,N1);
S=ima(:,:,2);
S=S*255;
=size(S);
P2=m2*n2;
S1=reshape(S,P2,1);
); %饱和度直方图
figure,bar(X2,N2);
V=ima(:,:,3);
V=V*255;
=size(V);
P3=m3*n3;
V1=reshape(V,P3,1);
); %亮度直方图
figure,bar(X3,N3);
你如果说是在归一化后的也就是(0-1)范围的直方图,则不需要转换空间,在RGB空间也不需要量化参数直接把1分为了100份
ima=imread(’66.jpg’);
R=ima(:,:,1);
=size(R);
R1=reshape(R,m1*n1,1);
);
figure,bar(X1,N1);
G=ima(:,:,2);
=size(G);
P2=m2*n2;
G1=reshape(G,P2,1);
);
figure,bar(X2,N2);
B=ima(:,:,3);
=size(B);
P3=m3*n3;
B1=reshape(B,P3,1);
);
figure,bar(X3,N3);
如果你是想要对灰度图进行直方图归一,那我只能说你是个菜鸟了
ima=imread(’66.jpg’);
ima_gray=rgb2gray(ima);
=size(ima_gray);
P=m*n;
a=reshape(ima_gray,P,1);
);
figure,bar(X,N);
如果,还是没有如果把
matlab 直方图归一化
直接除以和不行么?那样肯定相加为1.
假设你得到的一维向量是a,那么你下边加一句a=a/sum(a); 然后再画图,不知道是不是这么理解。
用matlab算矩阵相似度
图像相似度计算主要用于对于两幅图像之间内容的相似程度进行打分,根据分数的高低来判断图像内容的相近程度。
可以用于计算机视觉中的检测跟踪中目标位置的获取,根据已有模板在图像中找到一个与之最接近的区域。然后一直跟着。已有的一些算法比如BlobTracking,Meanshift,Camshift,粒子滤波等等也都是需要这方面的理论去支撑。
还有一方面就是基于图像内容的图像检索,也就是通常说的以图检图。比如给你某一个人在海量的图像数据库中罗列出与之最匹配的一些图像,当然这项技术可能也会这样做,将图像抽象为几个特征值,比如Trace变换,图像哈希或者Sift特征向量等等,来根据数据库中存得这些特征匹配再返回相应的图像来提高效率。
(1)直方图匹配。
比如有图像A和图像B,分别计算两幅图像的直方图,HistA,HistB,然后计算两个直方图的归一化相关系数(巴氏距离,直方图相交距离)等等。
这种思想是基于简单的数学上的向量之间的差异来进行图像相似程度的度量,这种方法是目前用的比较多的一种方法,第一,直方图能够很好的归一化,比如通常的256个bin条的。那么两幅分辨率不同的图像可以直接通过计算直方图来计算相似度很方便。而且计算量比较小。
matlab直方图归一化的示例
直接除以和不行么?那样肯定相加为1.
假设你得到的一维向量是a,那么你下边加一句a=a/sum(a); 然后再画图,不知道是不是这么理解。
图像灰度直方图归一化 matlab实现
因为计算的是灰度直方图,所以要先将彩色图像转化成灰度图像才可以
进行处理,否则会出错
matlab将三维直方图转为密度图
将三维直方图转为密度图的一种方法是通过对直方图进行归一化得到的。
假设三维直方图为`H(x, y, z)`,其中`(x,y,z)`表示三个维度上的坐标,对其进行归一化操作后得到密度图`D(x, y, z)`,其中`D(x, y, z)`表示坐标`(x,y,z)`处的密度。
归一化操作的过程如下:
1. 计算三维直方图`H`的总和`S`,即
```
S = sum(H(:))
```
`sum`函数用于计算向量或矩阵元素的和。
2. 计算每个直方图元素在总和中的占比,即
```
P = H / S
```
除以总和`S`可以得到每个元素在总和中的占比,得到的`P`是一个概率分布,所有元素的和为1。
3. 根据概率分布`P`计算密度图`D`,即
```
D = P / V
```
`V`是每个直方图元素表示的体积,可以通过计算每个维度上的间隔得到,例如:
```
dx = x_edges(2)-x_edges(1);
dy = y_edges(2)-y_edges(1);
dz = z_edges(2)-z_edges(1);
V = dx*dy*dz;
```
`x_edges`、`y_edges`、`z_edges`是三个维度上的直方图边缘,表示每个直方图元素的范围。
将`P`除以`V`可以得到密度图`D`,表示每个直方图元素的密度。
代码示例:
```matlab
% 生成三维直方图
H = hist3(data, {x_edges, y_edges, z_edges});
% 归一化
S = sum(H(:));
P = H / S;
% 计算密度图
dx = x_edges(2)-x_edges(1);
dy = y_edges(2)-y_edges(1);
dz = z_edges(2)-z_edges(1);
V = dx*dy*dz;
D = P / V;
```
其中,`data`是三维数据,`x_edges`、`y_edges`、`z_edges`是三个维度上的直方图边缘。

更多文章:
avantage怎么设置为中文(Avantage安装丢失GIT)
2026年10月15日 03:00
activex控件未注册怎么办(登陆视频监控网页时提示activex控件未注册,怎么解决)
2026年10月14日 20:30
excel连接sql数据库教程(excel怎么连接sql数据库)
2026年10月14日 19:40






