数字图像处理代码Ch5《彩色图像处理》
- 格式:doc
- 大小:4.51 MB
- 文档页数:14
rgb=cat(3,rgb_R,rgb_G,rgb_B);figure,imshow(rgb),title('RGB彩色图像');截图:(2)编写MATLAB程序,将一彩色图像从RGB空间转换为HIS空间,并观察其效果。
如例9.2所示。
程序:rgb=imread('LenaRGB.bmp');figure,imshow(rgb);rgb1=im2double(rgb);r=rgb1(:,:,1);g=rgb1(:,:,2);b=rgb1(:,:,3);I=(r+g+b)/3figure,imshow(I);tmp1=min(min(r,g),b);tmp2=r+g+b;tmp2(tmp2==0)=eps;S=1-3.*tmp1./tmp2;figure,imshow(S);tmp1=0.5*((r-g)+(r-b));tmp2=sqrt((r-g).^2+(r-b).*(g-b));theta=acos(tmp1./(tmp2+eps));H=theta;H(b>g)=2*pi-H(b>g);H=H/(2*pi);H(S==0)=0;figure,imshow(H);截图:(3)编写MATLAB程序,将一彩色图像在RGB空间进行彩色分割,并观察其效果。
如例9.11所示。
程序:rgb=imread('LenaRGB.bmp');figure,imshow(rgb);rgb1=im2double(rgb);r=rgb1(:,:,1);figure,imshow(r);g=rgb1(:,:,2);figure,imshow(g);b=rgb1(:,:,3);figure,imshow(b);r1=r;r1_u=mean(mean(r1(:)));[m,n]=size(r1);sd1=0.0;for i=1:mfor j=1:nsd1= sd1+(r1(i,j)-r1_u)*(r1(i,j)-r1_u);endendr1_d=sqrt(sd1/(m*n));r2=zeros(size(rgb1,1),size(rgb1,2));ind=find((r>r1_u-1.25*r1_d)&(r<r1_u+1.25*r1_d));r2(ind)=1;figure,imshow(r2);截图:(4)编写MATLAB程序,将一彩色图像在向量空间进行边缘检测,并观察其效果。
数字图像处理Ch05. 彩色图像处理Outline•概述•颜色理论–彩色视觉•颜色模型–工业模型–色度学模型–视觉模型•彩色图像处理–伪彩色图像处理–真彩色图像处理•为了简单起见,数字图像处理中的很多方法主要在灰度图像上做示例和推演。
•但是,在实际应用中,我们遇到更多的是彩色图像•彩色图像比灰度图像包含了更多的信息•对色彩进行感知也是人类视觉系统的一项固有的本领。
•随着电子技术、计算机技术的发展,彩色图像的记录设备和输出设备技术都非常成熟•彩色图像在印刷、多媒体、互联网等方面都已经称为主流。
•支持彩色图像处理的物质条件已经成熟,彩色图像处理技术的需求日益高涨。
•和灰度图像相比,彩色图像处理的首要问题是如何表达描述图像的颜色,即建立彩色模型。
•彩色图像处理技术:–伪彩色图像处理:•人对灰度辨别只有几十个级,却可辨别上千种色彩;•将灰度图转化为彩色图像可以提高人们对图像内容的观察效率–真彩色图像处理:•待处理的图像本身是用全彩传感器获得的•彩色图像对场景的描述能力更强,更复杂•彩色图像处理覆盖数字图像处理的各个方面:增强、滤波、分割、识别、压缩、水印。
颜色理论基础•光线没有颜色,只是某种功率频谱分布最早发现光的颜色秘密的是牛顿。
通过棱镜分光实验,牛顿发现白光是由不同颜色的光混合而成颜色理论•视觉的本领:将不同频率的电磁波感知为不同的颜色;•人的眼睛可以分辨几十种亮度,却可以分辨上千种颜色•除了光的颜色,人眼对物体的颜色的感知取决于物体反射光的特性。
如果物体对某些光谱反射比较多,则物体就呈现对应的颜色。
如果物体反射各种光的能力比较均衡,则物体呈白色颜色理论基础•彩色视觉:–物理成像过程–复杂的生理过程•人眼结构:–晶状体:强大的自动调焦能力–视网膜:人眼感知图像信号的窗口,分布着无数的感光细胞,其中可分为柱状细胞和锥状细胞•锥细胞:约6~7百万个–对颜色敏感,适应于强照度–又分为三种,分别对蓝色、红色、绿色敏感–细节分辨能力强,亮视觉•柱细胞:约7千万~1.5亿个–对颜色不敏感,适应于低照度–不能分辨色彩,只能分辨形状–响应快,角度宽–暗视觉•人眼有着非常大的亮度适应范围(10-19~110 lx):–仅仅靠瞳孔调节是远远不够的(瞳孔调节可以使光通量改变约20倍)–还需要靠两类细胞的转换来实现,大约需要30分钟完全适应。
数字图像处理实验实验八:彩色图像处理学院:信息工程学院姓名:学号:专业及班级:指导教师:一、实验目的使用MatLab 软件对图像进行彩色处理。
使学生通过实验熟悉使用MatLab软件进行图像彩色处理的有关方法,并体会到图像彩色处理技术以及对图像处理的效果。
二、实验内容要求学生能够完成彩色图像的分析,能正确讨论彩色图像的亮度、色调等性质;会对彩色图像进行直方图均衡,并能正确解释均衡处理后的结果;能够对单色图像进行伪彩色处理、利用多波长图像进行假彩色合成、进行单色图像的彩色变换。
利用MATLAB软件实现彩色图像处理的程序:rgb_image=imread('flower1.tif'); %读取图像flower1.tiffR=rgb_image(:,:,1); %获取图像的红色分量fG=rgb_image(:,:,2); %获取图像的绿色分量fB=rgb_image(:,:,3); %获取图像的蓝色分量figure(1),imshow(fR) %分别显示图像figure(2),imshow(fG)figure(3),imshow(fB)%实现rgb图像转化为NTSC彩色空间的图像yiq_image=rgb2ntsc(rgb_image);fY=yiq_image(:,:,1); %图像flower1.tif的亮度fI=yiq_image(:,:,2); %图像flower1.tif的色调fQ=yiq_image(:,:,3); %图像flower1.tif的饱和度figure(4),imshow(fY)figure(5),imshow(fI)figure(6),imshow(fQ)fR=histeq(fR,256); %对彩色图像的分量进行直方图均衡化fG=histeq(fG,256);fB=histeq(fB,256);RGB_image=cat(3,fR,fG,fB); %将直方图均衡化后的彩色图像合并figure,imshow(RGB_image) %观察处理后的彩色图色度,亮度参照前面f1=imread('v1_red.jpg');f2=imread('v1_green.jpg');f3=imread('v1_blue.jpg');f4=imread('infer_near.jpg');ture_color=cat(3,f1,f2,f3);figure,imshow(ture_color) %显示由红、绿、蓝三幅图合成的彩色图false_color=cat(3,f4,f2,f3); %用近红外图像代替R分量figure,imshow(false_color) %显示由近红外、绿、蓝三幅图合成的假彩色图f=imread('head.jpg');cut_1=imadjust(f,[0.0925 0.5],[0.0925 0.5]);%提取灰度在16-128之间的像素cut_2=imadjust(f,[0.5 1],[0.5 1]); %提取灰度在128-256之间的像素figure,imshow(cut_1),colormap(hot) %显示图像cut_1,并使用hot模型彩色化figure,imshow(cut_2),colormap(cool) %显示图像cut_2,并使用cool模型彩色化三、实验具体实现(1) 彩色图像的分析调入并显示彩色图像flower1.tif ;拆分这幅图像,并分别显示其R,G,B分量;根据各个分量图像的情况讨论该彩色图像的亮度、色调等性质。
数字图像处理----彩色图像处理杨淑莹教授天津理工大学计算机与通信工程学院彩色图像处理彩色图像的灰度化处理 彩色图像马赛克处理 彩色图像的浮雕处理彩色图像的灰度化处理1. 理论分析(1) BMP位图文件类型(2) 24位真彩色图像文件结构(3) 彩色图像的灰度化处理方法2. 理论验证(1)UltraEdit软件对真彩色文件数据剖析(2) 教学软件验证3. 实现步骤4. 编程代码(1) CDib类库的建立(2) CDib派生类的建立----彩色图像处理(3) 灰度化处理代码1.24位真彩色图像(1)每一像素由RGB三个分量组成。
(2)每个分量各占8位,取值范围为0~255,每个像素24位。
(207,137,130) (220,179,163) (215,169,161) (210,179,172) (210,179,172) (207,154,146) (217,124,121) (215,169,161) (216,179,170) (216,179,170) (207,137,120) (159, 51, 71) (213,142,135) (216,179,170) (221,184,170) (190, 89, 89) (204,109,113) (204,115,118) (216,179,170) (220,188,176) (190, 77, 84) (206, 95, 97) (217,113,113) (189, 85, 97) (222,192,179) (150, 54, 71) (177, 65, 73) (145, 39, 65) (150, 47, 67) (112, 20, 56)(136, 38, 65) (112, 20, 56) (112, 20, 56) (109, 30, 65) (112, 20, 56) ( 95, 19, 64)(136, 38, 65) ( 91, 11, 56) (113, 25, 60) (103, 19, 59) ( 81, 12, 59) (126, 62, 94)(138, 46, 71) (103, 19, 59) (158, 65, 83) (124, 40, 70) (145, 62, 79) (130, 46, 73)2.理论分析--24位真彩色图像文件结构位图像素数据位图信息头结构BITMAPINFOHEADER 位图文件头结构BITMAPFILEHEADER 位图像素数据颜色表位图信息头结构BITMAPINFOHEADER位图文件头结构BITMAPFILEHEADER8位位图文件结构24位位图文件结构1)BMP文件头结构typedef struct tagBITMAPFILEHEADER{WORD bfType; // BM,2byteDWORD bfSize;// 文件大小,4byteWORD bfReserved1;// 0WORD bfReserved2;// 0DWORD bfOffBits; // 位图数据的起始位置,}TMAPFILEHEADER;//(14byte)2)位图信息头结构typedef struct tagBITMAPINFOHEADER{DWORD biSize; // biSize=40byteLONG biWidth;LONG biHeight;WORD biPlanes; // 1WORD biBitCount;// 每个像素所需的位数,24 DWORD biCompression; // 位图压缩类型,0DWORD biSizeImage; // 位图的大小,LONG biXPelsPerMeter; // 0LONG biYPelsPerMeter; // 0DWORD biClrUsed; // 颜色数0DWORD biClrImportant; // 重要的颜色数0} BITMAPINFOHEADER;3)位图像素数据(207,137,130) (220,179,163) (215,169,161) (210,179,172) (210,179,172) (207,154,146) (217,124,121) (215,169,161) (216,179,170) (216,179,170) (207,137,120) (159, 51, 71) (213,142,135) (216,179,170) (221,184,170) (190, 89, 89) (204,109,113) (204,115,118) (216,179,170) (220,188,176) (190, 77, 84) (206, 95, 97) (217,113,113) (189, 85, 97) (222,192,179) (150, 54, 71) (177, 65, 73) (145, 39, 65) (150, 47, 67) (112, 20, 56) (136, 38, 65) (112, 20, 56) (112, 20, 56) (109, 30, 65) (112, 20, 56) ( 95, 19, 64) (136, 38, 65) ( 91, 11, 56) (113, 25, 60) (103, 19, 59) ( 81, 12, 59) (126, 62, 94) (138, 46, 71) (103, 19, 59) (158, 65, 83) (124, 40, 70) (145, 62, 79) (130, 46, 73)1.理论分析--彩色图像的灰度化处理使颜色的R、G、B分量值相等。
实验六彩色图像的处理一、实验目的1、掌握matlab中RGB图像与索引图像、灰度级图像之间转换函数;2、了解RGB图像与不同颜色空间之间的转换;3、掌握彩色图像的直方图处理方法;二、实验内容及步骤1、RGB图像与索引图像、灰度级图像的转换;close allRGB=imread'';R_i,map=rgb2indRGB,8;%RGB图像转换为8色的索引图像figureimshowR_i,mapR_g=rgb2grayRGB;%RGB图像转换为灰度级图像figureimshowR_g思考:将RGB图像’’分别转换为32色、256色、1024色索引图像,是否调色板所表示的颜色值越多图像越好RGB=imread'';R_i1,map=rgb2indRGB,8;%RGB图像转换为8色的索引图像R_i2,map=rgb2indRGB,32;%RGB图像转换为32色的索引图像R_i3,map=rgb2indRGB,256;%RGB图像转换为256色的索引图像R_i4,map=rgb2indRGB,1024;%RGB图像转换为1024色的索引图像Subplot221;imshowR_i1,map;title'8色的索引图像';Subplot222;imshowR_i2,map;title'32色的索引图像';Subplot223;imshowR_i3,map;title'256色的索引图像';Subplot224;imshowR_i4,map;title'1024色的索引图像';结论:随着索引值的增加图像的质量也有增加,更加清晰,色彩也更加鲜明;但不是不是颜色值越多越好;当索引值过高时,会出现无法识别而致模糊的情况出现; 2、RGB图像与不同颜色空间的转换;1 RGB与HSI颜色空间的转换HSI应用于彩色图像处理;实验六文件夹中rgb2hsi 函数将RGB颜色空间转换为HSI空间并显示各分量, hsi2rgb 函数是将HSI颜色空间转换为RGB颜色空间;close allfigureimshowxtitle'RGB'x_hsi=rgb2hsix;% RGB颜色空间转换成HSI颜色空间,% 并显示H、S、I各分量figureimshowx_hsititle'HSI'x_h_r=hsi2rgbx_hsi;figureimshowx_h_rtitle'HSI-->RGB'2RGB与CMY颜色空间转换CMY颜色空间运用在大多数在纸上沉积彩色颜料的设备,如彩色打印机和复印机; CMY青、深红、黄是RGB颜色空间的补色;close allx=imread'';X = im2doublex;R=X:,:,1;G=X:,:,2;B=X:,:,3;C=1-R;M=1-G;Y=1-B;R1=1-C;G1=1-M;B1=1-Y;CMY=cat3,C,M,Y;RGB1=cat3,R,G,B;subplot1,3,1,imshowX;title'RGB' ;subplot1,3,2,imshowCMY;title'CMY' ;subplot1,3,3,imshowRGB1;title'CMY--->RGB' ;思考:如何将RGB图像分解出其R、G、B颜色分量结果类似下图; close allx=imread'';X = im2doublex;R=X:,:,1;G=X:,:,2;B=X:,:,3;C1=R;M1=G-G;Y1=B-B;C2=R-R;M2=G;Y2=B-B;C3=R-R;M3=G-G;Y3=B;R=cat3,C1,M1,Y1;G=cat3,C2,M2,Y2;B=cat3,C3,M3,Y3;subplot1,3,1,imshowR;title'R' ;subplot1,3,2,imshowG;title'G' ;subplot1,3,3,imshowB;title'B' ;3、彩色图像的直方图处理1在HSI颜色空间对I强度分量进行调整及直方图均衡化;close allx=imread'';figureimshowxtitle'RGB'x_hsi=rgb2hsix;% RGB颜色空间转换成HSI颜色空间,% 并显示H、S、I各分量h=x_hsi:,:,1;s=x_hsi:,:,2;i=x_hsi:,:,3;i1=imadjusti,0 1,,;%对I分量进行灰度值调整,使图像更亮x_hsi=cat3,h,s,i1;x_h_r=hsi2rgbx_hsi; % HSI空间转换为RGB空间figureimshowx_h_rtitle'imadjusti,,,'i2=histeqi; %对I分量进行直方图均衡化,加强对比度x_hsi=cat3,h,s,i2;x_h_r=hsi2rgbx_hsi; % HSI空间转换为RGB空间figureimshowx_h_rtitle'histeqi'2 RGB颜色空间对全彩色进行直方图处理close allx=imread'';figureimshowxtitle'RGB'r=x:,:,1; g=x:,:,2; b=x:,:,3;r1=imadjustr,0 1,,;%对R分量进行灰度值调整g1=imadjustg,0 1,,; %对G分量进行灰度值调整b1=imadjustb,0 1,,; %对B分量进行灰度值调整x1=cat3,r1,g1,b1;figure; imshowx1title'imadjustr/g/b,,,'r2=histeqr; %直方图均衡化g2=histeqg;b2=histeqb;x2=cat3,r2,g2,b2;%处理后的R、G、B分量合并回RGB图像figure; imshowx2title'histeqr/g/b'思考:参考彩色图像的直方图处理方法,分别对RGB图像'' 进行尺寸为55的均值平滑滤波及拉普拉斯锐化;在HIS空间或RGB空间都可以结果类似下图;拉普拉斯算子:h= -1 -1 -1;-1 8 -1;-1 -1 -1;;155 均值平滑滤波close all;x=imread'';h=fspecial'average',5;y=imfilterx,h;subplot1,2,1;imshowx;title'RGB';subplot1,2,2;imshowy;title'55 均值平滑滤波';2拉普拉斯锐化close all;x=imread'';h= -1 -1 -1;-1 8 -1;-1 -1 -1;;y=imfilterx,h;subplot1,2,1;imshowx;title'RGB';subplot1,2,2;imshowy;title'拉普拉斯滤波';三、实验报告1、按照实验步骤做实验;2、记录实验结果,并作出总结;3、按照实验报告格式写出报告;四、实验心得及机会通过这次实验,我学会并了解了许多有关数字图像处理方面的知识;以前只是看着课本上的内容学习,对很多知识只是生分的了解,但是不懂得如何应用,通过做实验,自己动手,对图像做一系列的处理和变换,体会到了各种参数对数字图像的影响;通过此次实验也发现了自己的而许多问题,在对于MATLAB软件的应用上面我还有许多不足,尤其是对如何编写M文件方面很难掌握,仍有待加强;。
南京信息工程大学滨江学院基于MATLAB的数字图像处理的彩色图像处理专业:电子信工程学生姓名:***指导教师:***完成时间:2022年4月26日摘要自20世纪70年代以来,由于数字技术和计算机技术的迅猛发展,给数字图像处理(Digital Image Processing)提供了先进的技术手段。
图像科学从信息处理、自动控制系统理论、计算机科学、数据通信等学科中脱颖而出,成为研究图像信息的获取、传输、存储、变换、显示、理解和综合利用的新兴学科。
数字图像处理在实际中得到了广泛应用。
特别是在遥感、航空航天、通信、生物和医学、安全监控、工业生产、视频和多媒体、机器人视觉、物理和化学分析、公安和军事等领域.它在国家安全、经济发展和日常生活中已经起到越来越重要的作用。
由于彩色图像提供了比灰度图像更为丰富的信息,因此彩色图像处理正受到人们越来越多的关注。
关键字颜色空间彩色图像分割彩色空间转换彩色变换目录引言 (1)1 MATLAB图像处理工具箱及数字图像处理基本过程简介 (2)1.1 常用图像操作 (2)1.2 图像增强功能 (2)1.3边缘检测和图像分割功能 (3)1,4图像变换功能 (4)2 MATLAB中彩色图像表示 (4)2.1RGB图像 (4)2.2索引图像 (6)2.3处理RGB和索引图像 (6)3 彩色图像处理 (6)3.1读入一幅RGB图像,将其分别转换到CMY空间、HSI空间并显示 (6)3.2彩色空间滤波 (8)参考文献 (9)致谢 (9)引言MATLAB 语言是由美国MathWorks 公司推出的计算机软件,经过多年的逐步发展与不断完善,现已成为国际公认的最优秀的科学计算与数学应用软件之一,是近几年来在国内外广泛流行的一种可视化科学计算软件。
它集数值分析、矩阵运算、信号处理和图形显示于一体,构成了一个方便的、界面友好的用户环境,而且还具有可扩展性特征。
MathWorks 公司针对不同领域的应用,推出了信号处理、控制系统、神经网络、图像处理、小波分析、鲁棒控制、非线性系统控制设计、系统辨识、优化设计、统计分析、财政金融、样条、通信等30 多个具有专门功能的工具箱,这些工具箱是由该领域内的学术水平较高的专家编写的,无需用户自己编写所用的专业基础程序,可直接对工具箱进行运用。
1.图像反转MATLAB 程序实现如下:I=imread('xian.bmp');J=double(I);J=-J+(256-1);% 图像反转线性变换H=uint8(J);subplot(1,2,1),imshow(I);subplot(1,2,2),imshow(H);2.灰度线性变换MATLAB 程序实现如下:I=imread('xian.bmp');subplot(2,2,1),imshow(I);title(' 原始图像 ');axis([50,250,50,200]);axis on;% 显示坐标系I1=rgb2gray(I);subplot(2,2,2),imshow(I1);title(' 灰度图像 ');axis([50,250,50,200]);axis on;% 显示坐标系J=imadjust(I1,[0.1 0.5],[]); %局部拉伸,把[0.1 0.5]内的灰度拉伸为[0 1]subplot(2,2,3),imshow(J);title(' 线性变换图像 [0.1 0.5]');axis([50,250,50,200]);grid on;% 显示网格线axis on;% 显示坐标系K=imadjust(I1,[0.30.7],[]);% 局部拉伸,把[0.30.7] 内的灰度拉伸为 [0 1]subplot(2,2,4),imshow(K);title(' 线性变换图像 [0.3 0.7]');axis([50,250,50,200]);grid on;% 显示网格线axis on;% 显示坐标系3. 非线性变换MATLAB 程序实现如下:I=imread('xian.bmp');I1=rgb2gray(I);subplot(1,2,1),imshow(I1);title(' 灰度图像 ');axis([50,250,50,200]);grid on;% 显示网格线axis on;% 显示坐标系J=double(I1);J=40*(log(J+1));H=uint8(J);subplot(1,2,2),imshow(H);title(' 对数变换图像 ');axis([50,250,50,200]);grid on;% 显示网格线axis on;% 显示坐标系4. 直方图均衡化MATLAB 程序实现如下:I=imread('xian.bmp');I=rgb2gray(I);figure;subplot(2,2,1);imshow(I);subplot(2,2,2);imhist(I);I1=histeq(I);figure;subplot(2,2,1);imshow(I1);subplot(2,2,2);imhist(I1);5.线性平滑滤波器用 MATLAB 实现领域平均法抑制噪声程序:I=imread('xian.bmp');subplot(231)imshow(I)title(' 原始图像 ')I=rgb2gray(I);I1=imnoise(I,'salt & pepper',0.02);subplot(232)imshow(I1)title(' 添加椒盐噪声的图像')k1=filter2(fspecial('average',3),I1)/255;% 进行 3*3 模板平滑滤波k2=filter2(fspecial('average',5),I1)/255;% 进行 5*5 模板平滑滤波k3=filter2(fspecial('average',7),I1)/255;% 进行 7*7 模板平滑滤波k4=filter2(fspecial('average',9),I1)/255;% 进行 9*9 模板平滑滤波subplot(233),imshow(k1);title('3*3 模板平滑滤波 ');subplot(234),imshow(k2);title('5*5 模板平滑滤波 ');subplot(235),imshow(k3);title('7*7 模板平滑滤波 ');subplot(236),imshow(k4);title('9*9 模板平滑滤波 ');6.中值滤波器用 MATLAB 实现中值滤波程序如下:I=imread('xian.bmp');I=rgb2gray(I);J=imnoise(I,'salt&pepper',0.02);subplot(231),imshow(I);title(' 原图像 ');subplot(232),imshow(J);title(' 添加椒盐噪声图像'); k1=medfilt2(J);% 进行 3*3 模板中值滤波k2=medfilt2(J,[5,5]);% 进行 5*5 模板中值滤波k3=medfilt2(J,[7,7]);% 进行 7*7 模板中值滤波k4=medfilt2(J,[9,9]);% 进行 9*9 模板中值滤波subplot(233),imshow(k1);title('3*3 模板中值滤波 '); subplot(234),imshow(k2);title('5*5 模板中值滤波'); subplot(235),imshow(k3);title('7*7 模板中值滤波 '); subplot(236),imshow(k4);title('9*9 模板中值滤波 '); 7.用 Sobel 算子和拉普拉斯对图像锐化:I=imread('xian.bmp');subplot(2,2,1),imshow(I);title(' 原始图像 ');axis([50,250,50,200]);grid on;% 显示网格线axis on;% 显示坐标系I1=im2bw(I);subplot(2,2,2),imshow(I1);title(' 二值图像');axis([50,250,50,200]);grid on; axis on;% 显示网格线%显示坐标系H=fspecial('sobel'); J=filter2(H,I1);% 选择 sobel 算子% 卷积运算subplot(2,2,3),imshow(J);title('sobel 算子锐化图像 ');axis([50,250,50,200]);grid on;% 显示网格线axis on;% 显示坐标系h=[0 1 0,1 -4 1,0 1 0];% 拉普拉斯算子J1=conv2(I1,h,'same');% 卷积运算subplot(2,2,4),imshow(J1);title(' 拉普拉斯算子锐化图像 ');axis([50,250,50,200]);grid on;% 显示网格线axis on;% 显示坐标系8.梯度算子检测边缘用 MATLAB 实现如下:I=imread('xian.bmp');subplot(2,3,1);imshow(I);title(' 原始图像 ');axis([50,250,50,200]);grid on;% 显示网格线axis on;% 显示坐标系I1=im2bw(I);subplot(2,3,2);imshow(I1);title(' 二值图像 ');axis([50,250,50,200]);grid on;% 显示网格线axis on;% 显示坐标系I2=edge(I1,'roberts');figure;subplot(2,3,3);imshow(I2);title('roberts算子分割结果');axis([50,250,50,200]);grid on;% 显示网格线axis on;% 显示坐标系I3=edge(I1,'sobel');subplot(2,3,4);imshow(I3);title('sobel算子分割结果 ');axis([50,250,50,200]);grid on;% 显示网格线axis on;% 显示坐标系I4=edge(I1,'Prewitt');subplot(2,3,5);imshow(I4);title('Prewitt算子分割结果 ');axis([50,250,50,200]);grid on;% 显示网格线axis on;% 显示坐标系9.LOG 算子检测边缘用 MATLAB 程序实现如下:I=imread('xian.bmp');subplot(2,2,1);imshow(I);title(' 原始图像 ');I1=rgb2gray(I);subplot(2,2,2);imshow(I1);title(' 灰度图像 ');I2=edge(I1,'log');subplot(2,2,3);imshow(I2);title('log 算子分割结果 '); 10.Canny 算子检测边缘用 MATLAB 程序实现如下:I=imread('xian.bmp'); subplot(2,2,1);imshow(I);title(' 原始图像 ')I1=rgb2gray(I);subplot(2,2,2);imshow(I1);title(' 灰度图像 ');I2=edge(I1,'canny'); subplot(2,2,3);imshow(I2);title('canny 算子分割结果 ');11. 边界跟踪(bwtraceboundary函数)clcclear allI=imread('xian.bmp');figureimshow(I);title('原始图像');I1=rgb2gray(I); threshold=graythresh(I1);% 将彩色图像转化灰度图像% 计算将灰度图像转化为二值图像所需的门限BW=im2bw(I1,threshold);% 将灰度图像转化为二值图像figureimshow(BW);title('二值图像');dim=size(BW);col=round(dim(2)/2)-90;% 计算起始点列坐标row=find(BW(:,col),1);% 计算起始点行坐标connectivity=8;num_points=180;contour=bwtraceboundary(BW,[row,col],'N',connectivity,num_p oints);%提取边界figureimshow(I1);hold on;plot(contour(:,2),contour(:,1), 'g','LineWidth' ,2); title(' 边界跟踪图像 ');12.Hough 变换I= imread('xian.bmp');rotI=rgb2gray(I);subplot(2,2,1);imshow(rotI);title(' 灰度图像 ');axis([50,250,50,200]);grid on;axis on;BW=edge(rotI,'prewitt');subplot(2,2,2);imshow(BW);title('prewitt算子边缘检测后图像');axis([50,250,50,200]);grid on;axis on;[H,T,R]=hough(BW);subplot(2,2,3);imshow(H,[],'XData',T,'YData',R,'InitialMagnification','fit'); title(' 霍夫变换图 ');xlabel('\theta'),ylabel('\rho');axis on , axis normal, hold on;P=houghpeaks(H,5,'threshold',ceil(0.3*max(H(:))));x=T(P(:,2));y=R(P(:,1));plot(x,y,'s','color','white');lines=houghlines(BW,T,R,P ,'FillGap',5,'MinLength',7); subplot(2,2,4);,imshow(rotI);title(' 霍夫变换图像检测');axis([50,250,50,200]);grid on;axis on;hold on;max_len=0;for k=1:length(lines)xy=[lines(k).point1;lines(k).point2];plot(xy(:,1),xy(:,2),'LineWidth',2,'Color','green');plot(xy(1,1),xy(1,2),'x','LineWidth',2,'Color','yellow');plot(xy(2,1),xy(2,2),'x','LineWidth',2,'Color','red');len=norm(lines(k).point1-lines(k).point2);if(len>max_len)max_len=len;xy_long=xy;endendplot(xy_long(:,1),xy_long(:,2),'LineWidth',2,'Color','cyan');13.直方图阈值法用 MATLAB 实现直方图阈值法:I=imread('xian.bmp');I1=rgb2gray(I);figure;subplot(2,2,1);imshow(I1);title(' 灰度图像 ')axis([50,250,50,200]);grid on;% 显示网格线axis on;%显示坐标系[m,n]=size(I1);% 测量图像尺寸参数GP=zeros(1,256);% 预创建存放灰度出现概率的向量for k=0:255GP(k+1)=length(find(I1==k))/(m*n);% 计算每级灰度出现的概率,将其存入GP 中相应位置endsubplot(2,2,2),bar(0:255,GP ,'g')% 绘制直方图title(' 灰度直方图 ')xlabel(' 灰度值 ')ylabel(' 出现概率 ')I2=im2bw(I,150/255);subplot(2,2,3),imshow(I2);title(' 阈值 150 的分割图像 ')axis([50,250,50,200]);grid on;% 显示网格线axis on;% 显示坐标系I3=im2bw(I,200/255);%subplot(2,2,4),imshow(I3);title(' 阈值 200 的分割图像 ')axis([50,250,50,200]);grid on;% 显示网格线axis on;% 显示坐标系14. 自动阈值法: Otsu 法用MATLAB 实现 Otsu 算法:clcclear allI=imread('xian.bmp');subplot(1,2,1),imshow(I);title(' 原始图像 ')axis([50,250,50,200]);grid on;% 显示网格线axis on;% 显示坐标系level=graythresh(I);% 确定灰度阈值BW=im2bw(I,level);subplot(1,2,2),imshow(BW);title('Otsu 法阈值分割图像 ')axis([50,250,50,200]);grid on;% 显示网格线axis on;% 显示坐标系15. 膨胀操作I=imread('xian.bmp');% 载入图像I1=rgb2gray(I);subplot(1,2,1);imshow(I1);title(' 灰度图像 ')axis([50,250,50,200]);grid on;% 显示网格线axis on;% 显示坐标系se=strel('disk',1);% 生成圆形结构元素I2=imdilate(I1,se);% 用生成的结构元素对图像进行膨胀subplot(1,2,2);imshow(I2);title(' 膨胀后图像 ');axis([50,250,50,200]);grid on;% 显示网格线axis on;% 显示坐标系16. 腐蚀操作MATLAB 实现腐蚀操作I=imread('xian.bmp');% 载入图像I1=rgb2gray(I);subplot(1,2,1);imshow(I1);title(' 灰度图像 ')axis([50,250,50,200]);grid on;% 显示网格线axis on;% 显示坐标系se=strel('disk',1);% 生成圆形结构元素I2=imerode(I1,se);% 用生成的结构元素对图像进行腐蚀subplot(1,2,2);imshow(I2);title(' 腐蚀后图像 ');axis([50,250,50,200]);grid on;% 显示网格线axis on;% 显示坐标系17.开启和闭合操作用 MATLAB 实现开启和闭合操作I=imread('xian.bmp');% 载入图像subplot(2,2,1),imshow(I);title(' 原始图像 ');axis([50,250,50,200]);axis on;% 显示坐标系I1=rgb2gray(I);subplot(2,2,2),imshow(I1);title(' 灰度图像');axis([50,250,50,200]);axis on;% 显示坐标系se=strel('disk',1);% 采用半径为1的圆作为结构元素I3=imclose(I1,se);% 闭合操作subplot(2,2,3),imshow(I2);title(' 开启运算后图像 ');axis([50,250,50,200]);axis on;% 显示坐标系subplot(2,2,4),imshow(I3);title(' 闭合运算后图像 ');axis([50,250,50,200]);axis on;% 显示坐标系18.开启和闭合组合操作I=imread('xian.bmp');% 载入图像subplot(3,2,1),imshow(I);title(' 原始图像 ');axis([50,250,50,200]);axis on;% 显示坐标系I1=rgb2gray(I);subplot(3,2,2),imshow(I1);title(' 灰度图像 ');axis([50,250,50,200]);axis on;% 显示坐标系se=strel('disk',1);I3=imclose(I1,se);%闭合操作subplot(3,2,3),imshow(I2);title(' 开启运算后图像 ');axis([50,250,50,200]);axis on;% 显示坐标系subplot(3,2,4),imshow(I3);title(' 闭合运算后图像 ');axis([50,250,50,200]);axis on;% 显示坐标系se=strel('disk',1);I4=imopen(I1,se);I5=imclose(I4,se);subplot(3,2,5),imshow(I5);% 开—闭运算图像title(' 开—闭运算图像 ');axis([50,250,50,200]);axis on;% 显示坐标系I6=imclose(I1,se);I7=imopen(I6,se);subplot(3,2,6),imshow(I7);% 闭—开运算图像title(' 闭—开运算图像 ');axis([50,250,50,200]);axis on;% 显示坐标系19. 形态学边界提取利用 MATLAB 实现如下:I=imread('xian.bmp');% 载入图像subplot(1,3,1),imshow(I);title(' 原始图像 ');axis([50,250,50,200]);grid on;% 显示网格线axis on;% 显示坐标系I1=im2bw(I);subplot(1,3,2),imshow(I1);title(' 二值化图像 ');axis([50,250,50,200]);grid on;% 显示网格线axis on;% 显示坐标系I2=bwperim(I1);% 获取区域的周长subplot(1,3,3),imshow(I2);title(' 边界周长的二值图像 ');axis([50,250,50,200]);grid on;axis on;20.形态学骨架提取利用 MATLAB 实现如下:I=imread('xian.bmp'); subplot(2,2,1),imshow(I); title(' 原始图像 ');axis([50,250,50,200]); axis on;I1=im2bw(I);subplot(2,2,2),imshow(I1); title(' 二值图像 ');axis([50,250,50,200]); axis on;I2=bwmorph(I1,'skel',1); subplot(2,2,3),imshow(I2); title('1 次骨架提取 ');axis([50,250,50,200]); axis on;I3=bwmorph(I1,'skel',2); subplot(2,2,4),imshow(I3); title('2 次骨架提取 ');axis([50,250,50,200]); axis on;21.直接提取四个顶点坐标I = imread('xian.bmp');I = I(:,:,1);BW=im2bw(I);figureimshow(~BW)[x,y]=getpts。
例5.1 函数说明。
clc,clear,close all;%函数demof=imread('Fig0604(a)(iris).tif');subplot 131;imshow(f);title('(a)RGB图像');[X1,map1]=rgb2ind(f,8,'nodither');subplot 132;imshow(X1,map1);title('(b)未经抖动处理的颜色数减少到8的图像');[X2,map2]=rgb2ind(f,8,'dither');subplot 133;imshow(X2,map2);title('(c)经抖动处理的颜色数减少到8的图像');g=rgb2gray(f); g1=dither(g);figure;subplot 121;imshow(g);title('(d)使用函数rgb2gray得到的图(a)的灰度图像');subplot 122;imshow(g1);title('(e)抖动处理后的灰度图像(二值图像)');运行结果:例5.2 RGB转化为HSI。
clc,clear,close all;%从RGB转化到HSIf=imread('Fig0602(b)(RGB_color_cube).tif'); subplot 221;imshow(f);title('(a)RGB图像');f1=rgb2hsi(f);H=f1(:,:,1);S=f1(:,:,2);I=f1(:,:,3);subplot 222;imshow(H);title('(b)色调图像'); subplot 223;imshow(S);title('(c)饱和度图像'); subplot 224;imshow(I);title('(d)亮度图像');运行结果:例5.3 基于L*a*b彩色空间创建一个感觉上一致的彩色空间。
clc,clear,close all;L=linspace(40,80,1024); %创建40到80之间等分1024个值的斜坡radius=70; %明显不同的相邻颜色,通过改变彩色的色调满足,theta=linspace(0,pi,1024); %色调对应于a*b*平面中彩色坐标的极角a=radius*cos(theta); b=radius*sin(theta);L=repmat(L,100,1);a=repmat(a,100,1);b=repmat(b,100,1);%创建该L*a*b*彩色标尺的一幅100×1024×3 的图像lab_scale=cat(3,L,a,b);cform=makecform('lab2srgb');rgb_scale=applycform(lab_scale,cform);imshow(rgb_scale);title('基于L*a*b彩色空间的感觉上一致的标尺');运行结果:例5.4 ICC彩色剖面的软件证明。
clc,clear,close all;f=imread('Fig0604(a)(iris).tif');fp=padarray(f,[40 40],255,'both');%围绕图像加一较粗的白色边框和一个较细灰色边框fp=padarray(fp,[4 4],230,'both'); %便于查看模拟的新闻报纸的白度subplot 121;imshow(fp);title('(a)带有白色边框的原始图像');p_srgb=iccread('sRGB.icm'); %读入两个剖面,使它们把虹膜图像从sRGB转为新闻纸颜色p_snap=iccread('SNAP2007.icc');cform1=makecform('icc',p_srgb,p_snap); fp_newsprint=applycform(fp,cform1); cform2=makecform('icc',p_snap,p_srgb,...'SourceRenderingIntent','AbsoluteColorimetric',..'DestRenderingIntent','AbsoluteColorimetric'); fp_proof=applycform(fp_newsprint,cform2);subplot 122; imshow(fp_proof);title('(b)图像打印到新闻纸上后的模拟外观');运行结果:例5.5 单色负片和彩色分量的反映射。
clc,clear,close all;f=imread('Fig0304(a)(breast_digital_Xray).tif');g=ice('image',f,'space','rgb');f1=imread('Fig0614(a)(Chalk Original).tif.tif');g1=('image',f,'space','rgb'); %得到图像的负片运行结果:例5.6 单色和彩色对比度增强。
f2=imread('Fig0615(a)(Aerial Original).tif.tif');g2=ice('image',f2,'space','rgb');f3=imread('Fig0615(d)(Iris Original).tif.tif');g3=ice('image',f3,'space','rgb');运行结果:例5.7 伪彩色映射。
f4=imread('Fig0616(a)(Weld Original).tif.tif');g4=ice('image',f4);运行结果:例5.8 彩色平衡。
f5=imread('Fig0617(a)(JLK Magenta).tif.tif');g5=ice('image',f5,'space','CMY');运行结果:例5.9 基于直方图的映射。
f5=imread('Fig0618(a)(Caster Original).tif.tif');imshow(f5);g5=ice('image',f5,'space','hsi');运行结果:例5.10 彩色图像平滑。
clc,clear,close all;f=imread('Fig0619(a)(RGB_iris).tif');R=f(:,:,1); G=f(:,:,2); B=f(:,:,3);subplot 141;imshow(f);title('(a)原图');subplot 142;imshow(R);title('(a)R');subplot 143;imshow(G);title('(b)G');subplot 144;imshow(B);title('(c)B');h=rgb2hsi(f);H=h(:,:,1);S=h(:,:,2);I=h(:,:,3);figure;subplot 131;imshow(H);title('(a)H');subplot 132;imshow(S);title('(b)S');subplot 133;imshow(I);title('(c)I');w=fspecial('average',25); I_filtered=imfilter(I,w,'replicate');H_filtered=imfilter(H,w,'replicate'); S_filtered=imfilter(S,w,'replicate');h=cat(3,H,S,I_filtered);F=hsi2rgb(h);h1=cat(3,H_filtered,S_filtered,I_filtered);f2=hsi2rgb(h1);figure;r_filtered=imfilter(R,w,'replicate'); g_filtered=imfilter(G,w,'replicate');b_filtered=imfilter(B,w,'replicate');f1=cat(3,r_filtered,g_filtered,b_filtered);subplot 131;imshow(f1);title('(a)分别平滑RGB分量得到平滑后RGB图像');subplot 132;imshow(F);title('(b)HSI中亮度分量I滤波后');subplot 133;imshow(f2);title('(c)平滑所有三个HSI分量的结果');运行结果:例5.11 彩色图像锐化。
clc,clear,close all;f=imread('Fig0619(a)(RGB_iris).tif');w=fspecial('average',5);fb=imfilter(f,w,'replicate');subplot 121;imshow(fb);title('(a)模糊图像');lapmask=[1 1 1;1 -8 1;1 1 1];fb=tofloat(fb); fen=fb-imfilter(fb,lapmask,'replicate');subplot 122;imshow(fen);title('(b)使用拉普拉斯算子增强后的图像');运行结果:例5.11 使用函数colorgrad检测RGB图像的边缘。