注册网站的步骤,青岛网站关键词,深圳3d制作,秦皇岛网站团队文章目录 一#xff1a;纹理描述#xff08;1#xff09;联合概率矩阵法A#xff1a;定义B#xff1a;基于联合概率矩阵的特征C#xff1a;程序 #xff08;2#xff09;灰度差分统计法A#xff1a;定义B#xff1a;描述图像特征的参数 #xff08;3#xff09;行程… 文章目录 一纹理描述1联合概率矩阵法A定义B基于联合概率矩阵的特征C程序 2灰度差分统计法A定义B描述图像特征的参数 3行程长度统计法A定义B使用灰度级行程长度的特征C程序 4LBP特征A定义B程序 二其他描述1梯度方向直方图A定义B程序 2Haar-like特征A定义B程序 一纹理描述
纹理描述是用于描述三维模型表面外观的技术。它通过应用纹理映射Texture Mapping将二维图像或图案映射到三维模型的表面上从而为模型赋予更加真实、丰富的外观。纹理描述可以包含多种信息例如颜色、光照、反射、透明度等。通过在模型的顶点或多边形上定义纹理坐标将纹理映射到相应的位置可以在渲染过程中使模型显示出纹理的效果。常见的纹理描述格式包括
位图纹理Bitmap Texture使用常见的图像文件格式如JPEG、PNG等作为纹理可以直接获取真实世界中的照片或图像矢量纹理Vector Texture使用矢量图形描述的纹理可以无损缩放和编辑适用于需要保持良好清晰度的情况法线贴图Normal Map通过修改模型表面法线的方式模拟物体表面微小凹凸结构的效果以增强模型的细节感凹凸贴图Bump Map通过改变模型表面法线方向的方式模拟物体表面凹凸结构的效果环境贴图Environment Map用于模拟物体周围环境的反射和折射效果增加模型的真实感
1联合概率矩阵法
A定义
联合概率矩阵法是一种用于数据分析和模式识别的统计方法。它主要用于分析多个变量之间的联合概率分布并通过构建联合概率矩阵来描述这些变量之间的关系。该方法基于联合概率分布的思想将多维数据转化为一个二维矩阵矩阵中的每个元素表示对应变量的联合概率值。通过观察和分析这个矩阵可以揭示不同变量之间的相关性、依赖性和模式等信息。具体步骤如下
收集样本数据首先需要收集包含多个变量的样本数据集例如观测数据或实验数据构建联合概率矩阵根据样本数据计算得到各个变量之间的联合概率矩阵。矩阵的行和列分别代表不同的变量矩阵中的每个元素表示对应变量取值组合的联合概率分析矩阵通过观察和分析联合概率矩阵可以发现其中的模式、相关性和依赖性等信息。可以采用统计指标、可视化工具或其他分析方法来进一步解读矩阵
具体来说取图像中点 ( x , y ) (x,y) (x,y)及偏离它的另一点 ( x ∇ x , y ∇ y ) (x\nabla x,y\nabla y) (x∇x,y∇y)设该点对的灰度值为 ( f 1 , f 2 ) (f_{1},f_{2}) (f1,f2)令点 ( x , y ) (x,y) (x,y)在整个画面上移动得到各种 ( f 1 , f 2 ) (f_{1},f_{2}) (f1,f2)值。设灰度值级数为 L L L则 f 1 f_{1} f1与 f 2 f_{2} f2的组合共有 L 2 L^{2} L2种。对于整个画面统计出每一种值 ( f 1 , f 2 ) (f_{1},f_{2}) (f1,f2)出现的次数然后排列成一个方阵再用 ( f 1 , f 2 ) (f_{1},f_{2}) (f1,f2)出现的总次数将它们归一化为出现的概率 p ( f 1 , f 2 ) p(f_{1},f_{2}) p(f1,f2)称方阵为联合概率矩阵 B基于联合概率矩阵的特征
角二阶矩 A S M ∑ f 1 ∑ f 2 [ p ( f 1 , f 2 ) ] 2 A S M\sum_{f_{1}} \sum_{f_{2}}\left[p\left(f_{1}, f_{2}\right)\right]^{2} ASMf1∑f2∑[p(f1,f2)]2
相关系数 C O R ∑ f 1 ∑ f 2 ( f 1 − μ f 1 ) ( f 2 − μ f 2 ) p ( f 1 , f 2 ) σ f 1 σ f 2 μ f 1 ∑ f 1 f 1 ∑ f 2 p ( f 1 , f 2 ) μ f 2 ∑ f 2 f 2 ∑ f 1 p ( f 1 , f 2 ) σ f 1 2 ∑ f 1 ( f 1 − μ f 1 ) 2 ∑ f 2 p ( f 1 , f 2 ) σ f 2 2 ∑ f 2 ( f 2 − μ f 2 ) 2 ∑ f 1 p ( f 1 , f 2 ) \begin{array}{c}C O R\frac{\sum_{f_{1}} \sum_{f_{2}}\left(f_{1}-\mu_{f_{1}}\right)\left(f_{2}-\mu_{f_{2}}\right) p\left(f_{1}, f_{2}\right)}{\sigma_{f_{1}} \sigma_{f_{2}}} \\\mu_{f_{1}}\sum_{f_{1}} f_{1} \sum_{f_{2}} p\left(f_{1}, f_{2}\right) \quad \mu_{f_{2}}\sum_{f_{2}} f_{2} \sum_{f_{1}} p\left(f_{1}, f_{2}\right) \\\sigma_{f_{1}}^{2}\sum_{f_{1}}\left(f_{1}-\mu_{f_{1}}\right)^{2} \sum_{f_{2}} p\left(f_{1}, f_{2}\right) \sigma_{f_{2}}^{2}\sum_{f_{2}}\left(f_{2}-\mu_{f_{2}}\right)^{2} \sum_{f_{1}} p\left(f_{1}, f_{2}\right)\end{array} CORσf1σf2∑f1∑f2(f1−μf1)(f2−μf2)p(f1,f2)μf1∑f1f1∑f2p(f1,f2)μf2∑f2f2∑f1p(f1,f2)σf12∑f1(f1−μf1)2∑f2p(f1,f2)σf22∑f2(f2−μf2)2∑f1p(f1,f2)
对比度 C O N ∑ k k 2 [ ∑ f 1 f 2 k ∈ ∣ f 1 − f 2 ∣ p ( f 1 , f 2 ) ] C O N\sum_{k} k^{2}\left[\sum_{\substack{f_{1} \\ f_{2} \\ k \in\left|f_{1}-f_{2}\right|}} p\left(f_{1}, f_{2}\right)\right] CONk∑k2 f1f2k∈∣f1−f2∣∑p(f1,f2)
倒数差分矩 I D M ∑ f 1 ∑ f 2 p ( f 1 , f 2 ) 1 ∣ f 1 − f 2 ∣ I D M\sum_{f_{1}} \sum_{f_{2}} \frac{p\left(f_{1}, f_{2}\right)}{1\left|f_{1}-f_{2}\right|} IDMf1∑f2∑1∣f1−f2∣p(f1,f2)
熵 E N T − ∑ f 1 ∑ f 2 p ( f 1 , f 2 ) log 2 p ( f 1 , f 2 ) E N T-\sum_{f_{1}} \sum_{f_{2}} p\left(f_{1}, f_{2}\right) \log _{2} p\left(f_{1}, f_{2}\right) ENT−f1∑f2∑p(f1,f2)log2p(f1,f2)
C程序
如下打开一幅灰度图像生成联合概率矩阵并计算参数。可以发现平滑后图像对比度降低自相关性增强角二阶矩和倒数差分矩增大 matlab
clear,clc,close all;
Ioriginimread(morphplane.jpg);
Iorigin255-Iorigin;
Irotateimrotate(Iorigin,15,bilinear);
Iresizeimresize(Iorigin,0.4,bilinear);
Imirrorfliplr(Iorigin);bwoim2bw(Iorigin);
bwrim2bw(Irotate);
bwsim2bw(Iresize);
bwmim2bw(Imirror);huoinvmoments(bwo);
hurinvmoments(bwr);
husinvmoments(bws);
huminvmoments(bwm); function Huinvmoments(bw)
[N,M]size(bw);
M000;
M100;
M010;
for x1:Mfor y1:NM00M00bw(y,x);M10M10x*bw(y,x);M01M01y*bw(y,x);end
end
centerxM10/M00;
centeryM01/M00;
u020;u200;u110;u210;u120;u300;u030;
for x1:Mfor y1:Nu20u20bw(y,x)*(x-centerx)^2;u02u02bw(y,x)*(y-centery)^2;u11u11bw(y,x)*(x-centerx)*(y-centery);u30u30bw(y,x)*(x-centerx)^3;u03u03bw(y,x)*(y-centery)^3;u21u21bw(y,x)*(x-centerx)^2*(y-centery);u12u12bw(y,x)*(y-centery)^2*(x-centerx);end
end
n20u20/(M00^2);n02u02/(M00^2);n11u11/(M00^2);
n21u21/(M00^2.5);n12u12/(M00^2.5);
n03u03/(M00^2.5);n30u30/(M00^2.5);
Hu(1)n20n02;
Hu(2)(n20-n02)^24*n11^2;
Hu(3)(n30-3*n12)^2(3*n21-n03)^2;
Hu(4)(n30n12)^2(n21n03)^2;
Hu(5)(n30-3*n12)*(n30n12)*((n30n12)^2-3*(n21n03)^2)...(3*n21-n03)*(n21n03)*(3*(n30n12)^2-(n21n03)^2);
Hu(6)(n20-n02)*((n03n12)^2-(n21n03)^2)4*n11*(n30n12)*(n21n03);
Hu(7)(3*n21-n03)*(n30n12)*((n30n12)^2-3*(n21n03)^2)...-(n30-3*n12)*(n21n03)*(3*(n30n12)^2-(n21n03)^2);
end
python
import numpy as np
import matplotlib.pyplot as plt
from PIL import Imagedef invmoments(bw):N, M bw.shapeM00 np.sum(bw)M10 np.sum(np.multiply(np.arange(M), bw))M01 np.sum(np.multiply(np.arange(N).reshape(N, 1), bw))centerx M10 / M00centery M01 / M00u02 0u20 0u11 0u21 0u12 0u30 0u03 0for x in range(M):for y in range(N):u20 bw[y, x] * (x - centerx) ** 2u02 bw[y, x] * (y - centery) ** 2u11 bw[y, x] * (x - centerx) * (y - centery)u30 bw[y, x] * (x - centerx) ** 3u03 bw[y, x] * (y - centery) ** 3u21 bw[y, x] * (x - centerx) ** 2 * (y - centery)u12 bw[y, x] * (y - centery) ** 2 * (x - centerx)n20 u20 / (M00 ** 2)n02 u02 / (M00 ** 2)n11 u11 / (M00 ** 2)n21 u21 / (M00 ** 2.5)n12 u12 / (M00 ** 2.5)n03 u03 / (M00 ** 2.5)n30 u30 / (M00 ** 2.5)Hu np.zeros(7)Hu[0] n20 n02Hu[1] (n20 - n02) ** 2 4 * n11 ** 2Hu[2] (n30 - 3 * n12) ** 2 (3 * n21 - n03) ** 2Hu[3] (n30 n12) ** 2 (n21 n03) ** 2Hu[4] (n30 - 3 * n12) * (n30 n12) * ((n30 n12) ** 2 - 3 * (n21 n03) ** 2) \(3 * n21 - n03) * (n21 n03) * (3 * (n30 n12) ** 2 - (n21 n03) ** 2)Hu[5] (n20 - n02) * ((n03 n12) ** 2 - (n21 n03) ** 2) \4 * n11 * (n30 n12) * (n21 n03)Hu[6] (3 * n21 - n03) * (n30 n12) * ((n30 n12) ** 2 - 3 * (n21 n03) ** 2) - \(n30 - 3 * n12) * (n21 n03) * (3 * (n30 n12) ** 2 - (n21 n03) ** 2)return HuIorigin np.array(Image.open(morphplane.jpg).convert(L))
Iorigin 255 - Iorigin
Irotate Image.fromarray(Iorigin).rotate(15, resampleImage.BILINEAR)
Iresize Image.fromarray(Iorigin).resize((int(Iorigin.shape[1] * 0.4), int(Iorigin.shape[0] * 0.4)),resampleImage.BILINEAR)
Imirror np.fliplr(Iorigin)bwo np.array(Image.fromarray(Iorigin).convert(1))
bwr np.array(Irotate.convert(1))
bws np.array(Iresize.convert(1))
bwm np.array(Image.fromarray(Imirror).convert(1))huo invmoments(bwo)
hur invmoments(bwr)
hus invmoments(bws)
hum invmoments(bwm)plt.figure(figsize(12, 4))plt.subplot(141)
plt.imshow(Iorigin, cmapgray)
plt.title(Original)2灰度差分统计法
A定义
灰度差分统计法是一种用于图像纹理分析的方法它通过计算图像中像素点之间的灰度差异来描述图像的纹理特征。该方法在图像处理、图像分类和目标识别等领域得到广泛应用。具体步骤如下
确定窗口大小首先需要确定一个窗口大小窗口的大小会影响到计算结果的精度和计算量计算灰度差分矩阵对于图像中的每个像素点根据其周围窗口内像素的灰度值计算其与邻近像素之间的差异。常用的差分方式有水平方向差分、垂直方向差分、对角线方向差分等统计灰度差分矩阵统计灰度差分矩阵中每个灰度差分值出现的频次或概率得到灰度差分统计直方图提取纹理特征根据灰度差分统计直方图可以提取出一系列纹理特征如均值、方差、能量、对比度、相关性等分类和识别使用提取的纹理特征进行分类和识别任务常见的方法包括支持向量机SVM、人工神经网络ANN等
B描述图像特征的参数
对比度 C O N ∑ i i 2 p g ( i ) C O N\sum_{i} i^{2} p_{g}(i) CONi∑i2pg(i)
角度方向二阶矩 A S M ∑ [ p g ( i ) ] 2 A S M\sum\left[p_{g}(i)\right]^{2} ASM∑[pg(i)]2
熵 E N T − ∑ i p g ( i ) lg p g ( i ) E N T-\sum_{i} p_{g}(i) \lg p_{g}(i) ENT−i∑pg(i)lgpg(i)
平均值 M E A N 1 m ∑ i i p g ( i ) M E A N\frac{1}{m} \sum_{i} i p_{g}(i) MEANm1i∑ipg(i)
3行程长度统计法
A定义
行程长度统计法是一种常用的无损数据压缩算法也可以用于图像处理中的纹理特征分析。在行程长度统计法中将连续出现的相同像素值序列进行编码以减少数据存储空间或传输带宽。具体步骤如下
数据扫描对图像进行逐行或逐列扫描记录每次遇到像素值改变的位置行程长度编码根据像素值改变的位置对连续的像素值序列进行编码记录每个连续序列的起始位置和长度编码结果存储将编码结果按照一定的格式存储通常是使用一个二维数组或列表来保存每个连续序列的起始位置和长度解码过程根据编码结果进行解码通过重建连续的像素值序列来还原原始图像
例如下图4个灰度级对于2个方向(0°,45°)定义相应的行程长度矩阵 M R L M_{RL} MRL B使用灰度级行程长度的特征
短行程补偿 S R E ∑ f ∑ n ( M R L ( f , n ) n 2 ) ∑ f ∑ n M R L ( f , n ) S R E\frac{\sum_{f} \sum_{n}\left(\frac{M_{R L}(f, n)}{n^{2}}\right)}{\sum_{f} \sum_{n} M_{R L}(f, n)} SRE∑f∑nMRL(f,n)∑f∑n(n2MRL(f,n))
长行程补偿 L R E ∑ f ∑ n ( M R L ( f , n ) n 2 ) ∑ f ∑ n M R L ( f , n ) L R E\frac{\sum_{f} \sum_{n}\left(M_{R L}(f, n) n^{2}\right)}{\sum_{f} \sum_{n} M_{R L}(f, n)} LRE∑f∑nMRL(f,n)∑f∑n(MRL(f,n)n2)
灰度级非均匀性 G L D ∑ f [ ∑ n ( M R L ( f , n ) ) ] 2 ∑ f ∑ n M R L ( f , n ) G L D\frac{\sum_{f}\left[\sum_{n}\left(M_{R L}(f, n)\right)\right]^{2}}{\sum_{f} \sum_{n} M_{R L}(f, n)} GLD∑f∑nMRL(f,n)∑f[∑n(MRL(f,n))]2
行程长度非均匀性 R L D ∑ n [ ∑ f ( M R L ( f , n ) ) ] 2 ∑ f ∑ n M R L ( f , n ) R L D\frac{\sum_{n}\left[\sum_{f}\left(M_{R L}(f, n)\right)\right]^{2}}{\sum_{f} \sum_{n} M_{R L}(f, n)} RLD∑f∑nMRL(f,n)∑n[∑f(MRL(f,n))]2
行程百分比 R P ∑ f ∑ n M R L ( f , n ) N R P\frac{\sum_{f} \sum_{n} M_{R L}(f, n)}{N} RPN∑f∑nMRL(f,n)
C程序
如下编程计算树皮图像45°方向行程长度矩阵及参数 matlab
% f[0 1 2 3 0 1 2;1 2 3 0 1 2 3;2 3 0 1 2 3 0;3 0 1 2 3 0 1;0 1 2 3 0 1 2;1 2 3 0 1 2 3;2 3 0 1 2 3 0];
% f[0 1 2 3 0 1 2;1 2 3 0 1 2 3;2 3 0 1 2 3 0;3 0 1 2 3 0 1];
% f[0 1 2 3; 1 2 3 0 ;2 3 0 1 ;3 0 1 2;0 1 2 3;1 2 3 0;2 3 0 1];
frgb2gray(imread(texture1.bmp));
% frgb2gray(imread(smoothtexture.jpg));
ff1;
topmax(f(:));
[h,w]size(f);
Nmin(h,w);
MRLzeros(top,N);
length1;
for x1:wnewxx;newy1;for y1:min(h,x)oldxnewx;oldynewy;newxnewx-1;newyy1;if newx0 newyh f(newy,newx)f(oldy,oldx)lengthlength1;elseMRL(f(oldy,oldx),length)MRL(f(oldy,oldx),length)1;length1;endend
end
for y2:hnewxw;newyy;for xw:-1:1oldxnewx;oldynewy;newxx-1;newyoldy1;if newx0 newyh f(newy,newx)f(oldy,oldx)lengthlength1;elseMRL(f(oldy,oldx),length)MRL(f(oldy,oldx),length)1;length1;break;endend
end
SRE0;LRE0;GLD0;RLD0;RP0;total0;GLDp0;
for n1:NRLDp0; for f1:topif MRL(f,n)~0totaltotalMRL(f,n);SRESREMRL(f,n)/(n^2);LRELREMRL(f,n)*(n^2);RLDpRLDpMRL(f,n);RPRPMRL(f,n);endendRLDRLDRLDp^2;
end
for f1:topGLDp0;for n1:Nif MRL(f,n)~0GLDpGLDpMRL(f,n);endendGLDGLDGLDp^2;
end
SRESRE/total;
LRELRE/total;
RLDRLD/total;
RPRP/(h*w);
GLDGLD/total;
python
import numpy as np
from PIL import Image
import matplotlib.pyplot as plt# 读取图像
image Image.open(morphplane.jpg)
Iorigin np.array(image)# 转换为灰度图像
f np.array(image.convert(L))f f 1
top np.max(f)
h, w f.shape
N min(h, w)
MRL np.zeros((top, N))
length 1for x in range(w):newx xnewy 0for y in range(min(h, x1)):oldx newxoldy newynewx - 1newy 1if newx 0 and newy h and f[newy, newx] f[oldy, oldx]:length 1else:MRL[f[oldy, oldx], length] 1length 1for y in range(1, h):newx wnewy yfor x in range(w-1, -1, -1):oldx newxoldy newynewx - 1newy 1if newx 0 and newy h and f[newy, newx] f[oldy, oldx]:length 1else:MRL[f[oldy, oldx], length] 1length 1breakSRE 0
LRE 0
GLD 0
RLD 0
RP 0
total 0
GLDp 0for n in range(N):RLDp 0for i in range(1, top1):if MRL[i, n] ! 0:total MRL[i, n]SRE MRL[i, n] / (n**2)LRE MRL[i, n] * (n**2)RLDp MRL[i, n]RP MRL[i, n]RLD RLDp**2for i in range(1, top1):GLDp 0for n in range(N):if MRL[i, n] ! 0:GLDp MRL[i, n]GLD GLDp**2SRE / total
LRE / total
RLD / total
RP / (h * w)
GLD / total# 图像展示部分
plt.subplot(121)
plt.imshow(Iorigin)
plt.title(Original Image)
plt.axis(off)plt.subplot(122)
plt.imshow(f, cmapgray)
plt.title(Grayscale Image)
plt.axis(off)plt.show()
4LBP特征
A定义
LBP特征是一种用于图像纹理描述和特征提取的方法。它在图像的每个像素点上定义了一个局部邻域并将该邻域中的像素与中心像素进行比较根据比较结果生成一个二进制编码。LBP特征可以捕捉到图像中不同纹理模式的出现频率和分布情况。计算步骤如下
选择一个像素点作为中心像素确定一个以中心像素为中心的邻域区域通常是以中心像素为中心的正方形或圆形区域比较邻域内的每个像素与中心像素的灰度值大小。如果像素值大于等于中心像素的灰度值则该位置标记为1否则标记为0。将二进制编码转换为十进制数得到该中心像素的LBP值遍历图像的每个像素重复步骤1-4计算得到整张图像的LBP特征
通过LBP特征的提取我们可以获得以下信息
纹理模式LBP特征可以描述图像中的不同纹理模式例如平滑、粗糙、细腻等。纹理结构LBP特征可以反映图像中纹理的分布和排列方式例如网格状、斑点状等。纹理统计量通过统计LBP值在整个图像或局部区域中的出现频率和分布情况可以得到一些纹理统计量如直方图、均值、方差等
LBP特征具有以下优点
简单有效LBP特征的计算简单快速并且对于图像的光照变化和噪声具有较强的鲁棒性。不依赖颜色信息LBP特征仅使用灰度值进行计算不受颜色变化的影响适用于彩色和灰度图像。适用广泛LBP特征可应用于各种应用领域如图像分类、纹理识别、人脸识别、行人检测等
B程序
如下计算下面图像的LBP特征图 matlab
clear,clc,close all;
imageimread(lena.bmp);
[N,M]size(image);
lbpzeros(N,M);
for j2:N-1for i2:M-1neighbor[j-1 i-1;j-1 i;j-1 i1;j i1;j1 i1;j1 i;j1 i-1;j i-1];count0;for k1:8if image(neighbor(k,1),neighbor(k,2))image(j,i)countcount2^(8-k);endendlbp(j,i)count;end
end
lbpuint8(lbp);
figure,imshow(lbp),title(LBP特征图);
% imwrite(lbp,lenalbp.jpg);
subimlbp(1:8,1:8);
imhist(subim),title(第一个子区域直方图);
python
import cv2
import numpy as np
import matplotlib.pyplot as plt# 读取图像
image cv2.imread(lena.bmp, 0)N, M image.shape
lbp np.zeros((N, M), dtypenp.uint8)for j in range(1, N-1):for i in range(1, M-1):neighbor [[j-1, i-1], [j-1, i], [j-1, i1],[j, i1], [j1, i1], [j1, i],[j1, i-1], [j, i-1]]count 0for k in range(8):if image[neighbor[k][0], neighbor[k][1]] image[j, i]:count 2 ** (7 - k)lbp[j, i] countplt.imshow(lbp, cmapgray)
plt.title(LBP特征图)
plt.axis(off)
plt.show()subim lbp[:8, :8]
plt.hist(subim.flatten(), bins256, range[0, 256])
plt.title(第一个子区域直方图)
plt.show()二其他描述
1梯度方向直方图
A定义
梯度防线直方图是一种用于图像特征描述的方法主要用于图像分类、物体识别和目标检测等计算机视觉任务中。它通过计算图像中每个像素点的梯度方向并统计梯度方向的分布情况构建一个直方图来表示图像的特征。计算步骤如下
将图像转换为灰度图像如果不是灰度图像对图像进行平滑处理如使用高斯滤波器以降低噪声的影响计算每个像素点的水平x方向和垂直y方向梯度。可以使用Sobel、Prewitt等算子进行梯度计算对每个像素点根据其水平和垂直梯度计算梯度幅值和梯度方向将图像划分为若干个区域或块对每个区域内的像素点进行梯度方向的统计根据统计结果构建梯度方向直方图。一般将梯度方向空间划分为固定的几个角度范围例如0°~180°之间划分为8个区间将每个区域内的梯度方向数目作为直方图的值得到最终的梯度方向直方图
梯度方向直方图能够提取图像中的边缘和纹理信息并对这些信息进行编码和表示。通过统计不同梯度方向的分布情况可以描述图像的结构和纹理特征。在图像分类和物体识别任务中通常会将梯度方向直方图作为图像特征然后使用机器学习算法进行训练和分类。它有以下优点
不受光照变化的影响梯度方向直方图只依赖于像素的梯度信息而不受光照变化的影响对局部变化敏感梯度方向直方图统计了局部区域内的梯度方向分布情况因此对于局部纹理特征的检测非常敏感特征维度可控通过调整划分梯度方向空间的区间数目可以控制梯度方向直方图的特征维度以适应不同任务的需求
B程序
如下统计图像的HOG特征 matlab
clear,clc,close all;
Imagedouble(imread(lena.bmp));
[N,M]size(Image);
Imagesqrt(Image);
Hy[-1 0 1];
HxHy;
Gyimfilter(Image,Hy,replicate);
Gximfilter(Image,Hx,replicate);
Gradsqrt(Gx.^2Gy.^2);
Phasezeros(N,M);
Eps0.0001;
for i1:Mfor j1:N if abs(Gx(j,i))Eps abs(Gy(j,i))Eps Phase(j,i)270;elseif abs(Gx(j,i))Eps abs(Gy(j,i))Eps Phase(j,i)90;elsePhase(j,i)atan(Gy(j,i)/Gx(j,i))*180/pi; if Phase(j,i)0 Phase(j,i)Phase(j,i)180; end endend
end
step8;
K9;
angle180/K;
Cellcell(1,1);
Celli1;
Cellj1;
for i1:step:M Cellj1;for j1:step:N GtmpGrad(j:jstep-1,i:istep-1);GtmpGtmp/sum(sum(Gtmp)); Histzeros(1,K); for x1:stepfor y1:stepangPhase(jy-1,ix-1); if ang180Hist(floor(ang/angle)1)Hist(floor(ang/angle)1)Gtmp(y,x); endendendCell{Cellj,Celli}Hist; CelljCellj1; endCelliCelli1;
end[CellN,CellM]size(Cell);
featurecell(1,(CellM-1)*(CellN-1));
for i1:CellM-1for j1:CellN-1 f[];f[f Cell{j,i}(:) Cell{j,i1}(:) Cell{j1,i}(:) Cell{j1,i1}(:)];ff./sum(f);feature{(i-1)*(CellN-1)j}f;end
end
python
clear,clc,close all;
Imagedouble(imread(lena.bmp));
[N,M]size(Image);
Imagesqrt(Image);
Hy[-1 0 1];
HxHy;
Gyimfilter(Image,Hy,replicate);
Gximfilter(Image,Hx,replicate);
Gradsqrt(Gx.^2Gy.^2);
Phasezeros(N,M);
Eps0.0001;
for i1:Mfor j1:N if abs(Gx(j,i))Eps abs(Gy(j,i))Eps Phase(j,i)270;elseif abs(Gx(j,i))Eps abs(Gy(j,i))Eps Phase(j,i)90;elsePhase(j,i)atan(Gy(j,i)/Gx(j,i))*180/pi; if Phase(j,i)0 Phase(j,i)Phase(j,i)180; end endend
end
step8;
K9;
angle180/K;
Cellcell(1,1);
Celli1;
Cellj1;
for i1:step:M Cellj1;for j1:step:N GtmpGrad(j:jstep-1,i:istep-1);GtmpGtmp/sum(sum(Gtmp)); Histzeros(1,K); for x1:stepfor y1:stepangPhase(jy-1,ix-1); if ang180Hist(floor(ang/angle)1)Hist(floor(ang/angle)1)Gtmp(y,x); endendendCell{Cellj,Celli}Hist; CelljCellj1; endCelliCelli1;
end[CellN,CellM]size(Cell);
featurecell(1,(CellM-1)*(CellN-1));
for i1:CellM-1for j1:CellN-1 f[];f[f Cell{j,i}(:) Cell{j,i1}(:) Cell{j1,i}(:) Cell{j1,i1}(:)];ff./sum(f);feature{(i-1)*(CellN-1)j}f;end
end
2Haar-like特征
A定义
Haar-like特征是一种用于图像分类和目标检测的特征描述方法最早在Viola-Jones人脸检测算法中被提出并得到广泛应用。它是基于图像的灰度值差异来表示局部图像区域的特征。计算步骤如下
定义一个矩形的模板该矩形可以是水平、垂直或对角线方向上的连续区域。将模板放置在图像的不同位置和尺度上并计算模板内白色高亮和黑色阴影区域的灰度值之差。根据灰度值差异计算特征值。常见的Haar-like特征包括两个相邻矩形的差异、三个相邻矩形的和等等
Haar-like特征的主要思想是通过计算不同矩形区域的灰度值差异来捕捉图像中的局部纹理和边缘信息。具体而言亮区域和暗区域的灰度值差异可用于表示图像中的边缘而相邻区域的灰度值差异可用于表示图像中的纹理。其优点如下
简单Haar-like特征计算简单且高效适合用于实时应用。平移不变性Haar-like特征对图像的平移具有不变性即特征在图像中的任意位置都能够检测到相同的模式。多尺度适应性Haar-like特征可以通过改变模板的尺寸来适应不同大小的目标
其缺点如下
局限性Haar-like特征主要适用于描述边缘和纹理等低级视觉特征对于复杂的形状和纹理结构难以有效表示。不变性差Haar-like特征对于光照、旋转和尺度变化等因素的不变性较差
B程序
如下 matlab
clear,clc,close all;
Imagedouble(imread(carphone.jpg));
[N,M]size(Image);
win24;python
import cv2
import matplotlib.pyplot as plt# Read image
image cv2.imread(carphone.jpg, cv2.IMREAD_GRAYSCALE)
image image.astype(float)# Get image size
N, M image.shape# Define window size
win 24# Display image
plt.imshow(image, cmapgray)
plt.axis(off)
plt.show()