【计算机视觉基础】MATLAB程序绘制空间内的彩色图像像素变化曲面、等值线图、生成子图像,显示该子图像的直方图与茎干图、子图像进行自适应阈值分割和对比度拉伸,彩色图像处理

一、通过调用Matlab函数指令完成以下内容:

  1. 显示一张彩色图像分别在R、G、B三个颜色通道空间内的图像像素变化曲面;
  2. 显示要求1中图像的等值线图;
  3. 截取要求1中图像某区域,生成子图像,显示该子图像的直方图与茎干图;
  4. 根据要求3中的直方图对要求3中的子图像进行自适应阈值分割,并显示;
  5. 实现要求3中子图像区域的对比度拉伸,并显示结果,要求结果图像中细节信息存在一定程度增强,注:不调用函数实现该要求。

二、MATLAB程序代码如下:

%1、图像像素变化曲面
Iy=imread('lena.jpg');
I=double(Iy);
red=I(:,:,1);
green=I(:,:,2);
blue=I(:,:,3);
cr=gradient(red);
cg=gradient(green);
cb=gradient(blue);
figure('Name','图像像素变化曲面','NumberTitle','off')
subplot(2,2,1),imshow(Iy),title('原图')
subplot(2,2,2),surfc(red,cr,'EdgeColor','flat'),title('R通道空间')
subplot(2,2,3),surfc(green,cg,'EdgeColor','flat'),title('G通道空间')
subplot(2,2,4),surfc(blue,cb,'EdgeColor','flat'),title('B通道空间')
%2、图像的等值线图
Ig=rgb2gray(Iy);
figure('Name','图像的等值线图','NumberTitle','off')
subplot(2,2,1),contour(red,'ShowText','on','LabelSpacing',120),title('R通道等值线图')
subplot(2,2,2),contour(green,'ShowText','on','LabelSpacing',100),title('G通道等值线图')
subplot(2,2,3),contour(blue,'ShowText','on','LabelSpacing',100),title('B通道等值线图')
subplot(2,2,4),contour(Ig,'ShowText','on','LabelSpacing',120),title('灰度图像等值线图')
%3、子图像的直方图与茎干图
Ic=Iy(200:400,200:400,:);
redc=Ic(:,:,1);
greenc=Ic(:,:,2);
bluec=Ic(:,:,3);
Icg=rgb2gray(Ic);
figure('Name','子图像的直方图','NumberTitle','off')
subplot(2,3,1),imshow(Ic),title('子图像')
subplot(2,3,2),imhist(Icg);title('灰度强度直方图')
subplot(2,3,3),imhist(redc),title('R通道')
subplot(2,3,4),imhist(greenc),title('G通道')
subplot(2,3,5),imhist(bluec),title('B通道')
[counth,xh]=imhist(Icg,256);
[countr,xr]=imhist(redc,256);
[countg,xg]=imhist(greenc,256);
[countb,xb]=imhist(bluec,256);
figure('Name','子图像的茎干图','NumberTitle','off')
subplot(2,2,1),stem(xh,counth),title('灰度强度')
subplot(2,2,2),stem(xr,countr,'Color','r'),title('R通道')
subplot(2,2,3),stem(xg,countg,'Color','g'),title('G通道')
subplot(2,2,4),stem(xb,countb,'Color','b'),title('B通道')
 %4、子图像自适应阈值分割
Icgd=im2double(Icg);
T=adaptthresh(Icgd,'ForegroundPolarity','dark');
Iyz=imbinarize(Icgd,T);
figure('Name','子图像自适应阈值分割','NumberTitle','off')
subplot(1,2,1),imshow(Icg),title('子图像灰度图像')
subplot(1,2,2),imshow(Iyz),title('自适应阈值分割图像')
 %5、子图像对比度拉伸
gd=Ic;
redcd=double(redc);
greencd=double(greenc);
bluecd=double(bluec);
c1=max(max(redcd));
d1=min(min(redcd));
c2=max(max(greencd));
d2=min(min(greencd));
c3=max(max(bluecd));
d3=min(min(bluecd));
a1=210;b1=40;
a2=210;b2=40;
a3=210;b3=40;
gd(:,:,1)=(redcd-c1).*((a1-b1)./(c1-d1))+a1;
gd(:,:,2)=(greencd-c2).*((a2-b2)./(c2-d2))+a2;
gd(:,:,3)=(bluecd-c3).*((a3-b3)./(c3-d3))+a3;
figure('Name','子图像对比度拉伸','NumberTitle','off')
subplot(1,2,1),imshow(Ic),title('原子图像')
subplot(1,2,2),imshow(gd),title('彩色图像对比度拉伸')

三、程序原理如下:

  1. 使用函数imread从电脑磁盘中读取事先保存的彩色图像‘lena.jpg’,然后直接将彩色图像的R、G、B三个彩色通道的数组分别赋予三个变量,从而获得图像的三通道分量,使用函数gradient分别求三个通道分量的数值梯度,最后使用函数surfc分别利用三个彩色通道的数组和各彩色通道的数值梯度画出各彩色通道空间内的像素变化曲面,通过修改surfc的属性‘EdgeColor’可调整曲面颜色。
  2. 使用函数rgb2gray将彩色图像转化为灰度图像,然后使用函数contour利用第1步中获得的R、G、B三个彩色通道分量和获得的灰度图像绘制图像的各个彩色通道分量和灰度图像的等高线,通过修改函数contour的属性‘ShowText’为‘on’,从而使绘制的等高线图带有等高线标签,修改属性‘LabelSpacing’可调整沿等高线的标签间距。
  3. 使用数组直接从原彩色图像中划定范围,从而截取图像获得一个子图像,然后利用与前面两部分相同的方法,获得子图像的R、G、B三个彩色通道分量和灰度子图像,然后使用函数imhist分别直接显示子图像各个彩色通道和灰度子图像的直方图;使用函数imhist将各个直方图显示的各像素值的相对频率值储存在直方图的计数数组中,直方图水平轴的像素值保存在一个数组里,然后使用函数stem分别利用相应的计数数组和水平轴像素值的数组绘制出三个彩色通道和灰度子图像的茎干图,通过修改stem的属性‘Color’改变茎干图的颜色。
  4. 首先使用函数im2double将灰度子图像转换为双精度值图像,然后使用函数adaptthresh计算灰度子图像的局部自适应阈值,再使用函数imbinarize利用获得的阈值将灰度图像转换为二值图像,从而实现子图像的自适应阈值分割。
  5. 使用公式将彩色图像的R、G、B三个彩色通道分别进行对比度拉伸,其中g为输入图像,c、d分别为max[max(g)]和min[min(g)],a、b为像素新的动态范围(且a>b),利用公式对子图像的三个彩色通道分别进行处理,可将彩色图像各个通道的像素值d动态范围[d,c]变换到新的动态范围[b,a],从而得到对比度拉伸后的彩色子图像。

四、程序运行结果如下:

 1、图像像素变化曲面

2、图像的等值线图

3、子图像的直方图与茎干图

 

 4、子图像自适应阈值分割

 5、子图像对比度拉伸

 

 这次的分享就到这里啦,小伙伴们喜欢博主的分享的话,别忘了给博主点个赞哦!

关注博主学习更多计算机视觉与图像处理知识!

原创内容仅做交流学习,不经允许不可转载。

 

Guess you like

Origin blog.csdn.net/qq_59049513/article/details/122513766