一、实验目的和要求
1、理解颜色直方图、颜色矩的基本原理;
2、理解统计纹理分析算法的基本原理;
3、理解局部二值模式的基本原理。
二、实验内容简介
1、图像颜色特征
2、图像形状特征
3、图像纹理特征
三、实验步骤
1、把图像的RGB颜色空间值转换为HSV颜色空间,并显示H、S、V三个分量
RGB = imread('wall.jpg'); %读入图像wall.jpg
Hsv = rgb2hsv(RGB);%把RGB颜色空间值转换成为HSV颜色空间
H = HSV(:,:,1);%H分量 色调
S = Hsv(:,:,2);%S分量 饱和
V = Hsv(:,:,3);%V分量 明度
figure;
subplot(2,2,1); imshow(RGB) ;
subplot(2,2,2); imshow(H); title('H通道')
subplot(2,2,3);imshow(S); title('S通道')
subplot(2,2,4); imshow(V); title('V通道')
RGB = imread('fruitol.jpg'); %读入图像fruit01.jpg
HSV = rgb2hsv(RGB); %把RGB颜色空间值转换成为HSV颜色空间
H = HSV(:,:,1);%H分量 色调
S = Hsv(:,:,2);%S分量 饱和
V = Hsv(:,:,3);%V分量 明度
figure;
subplot(2,2,1); imshow(RGB) ;
subplot(2,2,2); imshow(H); title('H通道')
subplot(2,2,3);imshow(S); title('S通道')
subplot(2,2,4); imshow(V); title('V通道')
可以看出,V分量的图像实际上就是图像的灰度图
2、把彩色图像的HSV分量中的各个分量进行直方图增强,并把增强前后的彩色图像显示出来
RGB = imread('fruit01.jpg'); %读入图像fruit01.jpg
HSV = rgb2hsv(RGB); %把RGB颜色空间值转换成为HSV颜色空间
V = HSV(:,:,3); %V分量
Vnew = histeq(V); %对v分量进行直方图均衡
HSV(:. :, 3) = Vnew; %新的V分量
RGB2 = hsv2rgb(HSV); %为了显示需要,把Hsv颜色空间值转换成为RGB颜色空间
figure;
subplot(1,2,1); imshow(RGB): %显示原图
subplot(1,2,2); imshow(RGB2); %显示V分量增强后的图像
H = HSV(:,:,1);
Hnew = histeg(H); %对h分量进行直方图均
HSV(:,:,1) = Hnew; %新的h分量
RGB3 = hsv2rgb(HsV); %为了显示需要,把HSV颜色空间值转换成为RGB颜色空间
fiqure;
subplot(1,2,1); imshow(RGB); %显示原图
subplot(1,2,2); imshow(RGB3); %显示h分量增强后的图像
S = HSV(:,:,2); %s分量
Snew = histeg(S); %对s分量进行直方图均
HSV(:,:,2) = Snew; %%新的s分量
RGB4 = hsv2rgb (HSV); %为了显示需要,把HSV颜色空间值转换成为RGB颜色空间
fiqure;
subplot(1,2,1); imshow(RGB); %显示原图
subplot(1,2,2); imshow(RGB4): %显示s分量增强后的图像
明暗更加明显,对比度更清晰
3、画出彩色图像的HSV分量中V分量的直方图
RGB = imread('fruit01.jpg'); %读入图像fruit01.jpg
HSV = rgb2hsv(RGB);%把RGB颜色空间值转换成为HSV颜色空间
V = HSV(:,:,3); %V分量
figure;
subplot(1,3,1); imshow(RGB); title('原彩色图') %显示原图
subplot(1,3,2); imshow(v); title('HSV分量中的亮度分量') %显示亮度分量
subplot(1,3,3); imhist(v); title('亮度分量的直方图') %显示亮度分量的直方图
4、得到彩色图像直方图增强后的图像
I=imread('Lena.bmp'); %原图
J=histeq(I);
figure;
subplot(121),imshow(I); title('原图') %显示原图
subplot(122),imshow(J); title('直方图增强后图像') %显示增强后图像
[m,n]=size(I)
% mm=round(m/2);
% nn=round(n/2);
I=double(I);
J=double(J);
Iavg=mean2(I); %一阶矩
Javg=mean2(J); %直方图增强后图像一阶矩
Istd=std(std(I)); %二阶矩
Jstd=std(std(J)); %直方图增强后图像二阶矩
colorsum1=0;
for i=1:m
for j=1:n
colorsum1=colorsum1+(I(i,j)-Iavg)^3;
end
end
Iske=(colorsum1/(m*n))^(1/3); % 三阶矩
colorsum2=0;
for i=1:m
for j=1:n
colorsum2=colorsum2+(J(i,j)-Iavg)^3;
end
end
Jske=(colorsum2/(m*n))^(1/3); %直方图增强后图像三阶矩
[Iavg,Istd,Iske;Javg,Jstd,Jske]
5、计算纹理图像的灰度差分统计特征
J=imread('wall.jpg'); %输入纹理图像wall.jpg
%J=imread('stone.jpg'); %读入纹理图像stone.jpg两幅图进行对比
A=double(J);
[m,n]=size(A); %求A矩阵的大小,赋值给m n
B=A;
C=zeros(m,n); %新建全零矩阵C,以下求解归一化的灰度直方图
for i=1:m-1
for j=1:n-1
B(i,j)=A(i+1,j+1);
C(i,j)=abs(round(A(i,j)-B(i,j)));
end
end
h=imhist(mat2gray(C))/(m*n);
mean=0;con=0;ent=0; % 均值mean、对比度con和熵ent初始值赋零
for i=1:256 %循环求解均值mean、对比度con和熵ent
mean=mean+(i*h(i))/256;
con=con+i*i*h(i);
if(h(i)>0)
ent=ent-h(i)*log2(h(i));
end
end
mean,con,ent
figure,imshow(J)
6、 利用函数regionprops()求区域面积
I= imread('E:\图片\rice.tif'); %读入图像
J= im2bw(I); %转换为二值图像
figure,
subplot(121),imshow(I),title('原图')
subplot(122),imshow(J),title('二值化后的图')
C=bwlabel(J,4); %对二值图像进行4连通的标记
[Lab,num]=bwlabel(C,8);
D=regionprops(Lab,'all');
c1=[D.Area]; %白色区域像素数目
sum(c1)
四、实验心得
1、通过学习认为这一章是在前几章对图像进行预处理和图像分割后进一步进行特征提取,然后对目标进行识别。如果没有前几章学习内容的铺垫,本章的实验将无法完成。
2、首先,通过本次实验认识了HSI模型(有时也称HSV模型)
Hue:色调;Saturation:饱和度;Intensity:灰度(亮度)
3、了解了颜色矩:以数字方法为基础,通过计算矩来描述颜色的分布。
图像的颜色矩中,一阶矩:定义了每个颜色分量的平均强度;二阶矩:反映待测区域的颜色方差,即不均匀性;三阶矩:定义了颜色分量的偏斜度,即颜色的不对称性相对于颜色直方图特征提取,颜色矩特征提取的优点是无须对颜色特征进提前量化。可以利用函数mean2()和std()对灰度图像进行一阶矩、二阶矩、三阶矩的计算。
4、学习了灰度差分统计法。
纹理区域的灰度直方图作为纹理特征,利用图像直方图提取诸如均值、方差、能量及熵等特征来描述纹理。熵值ent更高,图像更加混乱;均值mean更大,图像看起来颜色偏深一点。
5、了解了图像车辆目标的综合特征提取与识别的处理步骤,首先进行图像预处理,然后进行图像分割(边缘检测),再进行特征提取与选择,最后进行目标分类识别。
6、学习了以下新的函数:
(1)rgb2hsv()——将颜色空间由RGB转换成HSV;
(2)histeq()函数——图像均衡化
(3)h = imhist(mat2gray(C))/(m*n)——归一化灰度直方图
(4)J=mean2(J)——求一阶矩
J=std(std(J))——求二阶矩
J=(colorsum/(mm*mn))^(1/3)——求三阶矩
(5)bwlabel函数测试图像中的连续区域(目标),伪彩色化他们,并结合他们的数字标记依次显示他们
(6)regionprops函数对图像中的每个目标提取下面的二值特征