您好,欢迎访问三七文档
当前位置:首页 > IT计算机/网络 > 图形图像 > matlAB图像处理程序与实操
1图像处理基础1.1图像读取%图像的读取、显示clearall;clc;f=imread('pout.tif');%读[M,N]=size(f);%大小291×240whosf;%附加信息imwrite(f,'pout','tif');%写figure(1);%显示多张图片imshow(f);%原图像,figure(2);%显示多张图片imshow(f,[])%[]修正1.2格式转换f=imread('f.png','png');imwrite(f,'f.bmp','bmp');1.3图像数据类型转换%MatlAB读入的数据类型是uint8,而在矩阵中使用的数据类型是double,如果不转换,在对uint8进行加减时会产生溢出f=imread('rice.png');I=im2double(f);J=im2uint8(I);K=im2uint16(J);subplot(2,2,1);imshow(f);subplot(2,2,2);imshow(I);subplot(2,2,3);imshow(J);subplot(2,2,4);imshow(K);%在MatlAB中,我们常使用imshow()函数来显示图像,而此时的图像可能经过了某种运算。在MatlAB中,为了保证精度,经过了运算的图像矩阵I其类型会从uint8型变成double型。如果直接运行imshow(I),会发现显示的是一个白色图像。这是因为imshow()显示图像时默认double型在0~1范围内,即大于1时都显示为白色,而imshow显示uint8型图像是在0~255范围内。法一:利用imshow(1/256)将图像矩阵转化到0~1之间;法二:利用imshow(I,[])自动调整数据的显示范围以便于显示1.4图像之间的转换%索引图像与灰度图像之间的转换代码clearall;clc;I=imread('pout.tif');subplot(1,3,1);imshow(I);[I1,map1]=gray2ind(I,28);[I2,map2]=gray2ind(I,16);subplot(1,3,2);imshow(I1,map1);subplot(1,3,3);imshow(I2,map2);%RGB图像与灰度图像之间的转换代码clearall;clc;RGB=imread('autumn.tif');subplot(1,2,1);imshow(RGB);I=rgb2gray(RGB);subplot(1,2,2);imshow(I);%RGB图像与索引图像之间的转换代码clearall;clc;RGB=imread('autumn.tif');subplot(1,3,1);imshow(RGB);[I,map]=rgb2ind(RGB,228);subplot(1,3,2);imshow(I,map);subplot(1,3,3);imshow(I);colormap(map);%灰度图像与二进制图像之间的转换代码clearall;clc;I=imread('eight.tif');subplot(1,2,1);imshow(I);BW=im2bw(I,0.5);subplot(1,2,2);imshow(BW);1.5图像的点运算%线性点运算clearall;clc;A=imread('lena.jpg');B1=A+50;%图像灰度值增加50subplot(3,2,1);imshow(A);subplot(3,2,2);imshow(B1);B2=1.5*A;%图像对比度增大subplot(3,2,3);imshow(B2);B3=0.8*A;%图像对比度减小subplot(3,2,4);imshow(B3);B4=-double(A)+255;%求补subplot(3,2,5);imshow(uint8(B4));%非线性点运算clearall;clc;A=imread('lena.jpg');subplot(2,2,1);imshow(A);x=1:255;y=x+x.*(255-x)/255;subplot(2,2,2);plot(x,y);B1=double(A)+0.005*double(A).*(255-double(A));%非线性处理subplot(2,2,3);imshow(uint8(B1));2图像预处理及MatlAB实现2.1直方图灰度变换%利用平方根变换函数对图像进行灰度变换clearall;clc;[X,map]=imread('forest.tif');I=ind2gray(X,map);%把索引图像转换成灰度图像subplot(1,3,1);imshow(I);title('原图像');subplot(1,3,2);plot(0:0.1:1,sqrt(0:0.1:1));axissquare;title('平方根变换函数');maxnum=double(max(max(I)));%取二维数组中的最大值J=sqrt(double(I)/maxnum);%把数据转换成double,再平方根变换J=uint8(J*maxnum);%把数据转换成uint8subplot(1,3,3);imshow(J);title('平方根变换后的图像');%灰度调整函数imadjust()%J=imadjust(I,[00.2],[0.51],g);g1增强亮度,g1增强暗度clearall;clc;I=imread('cameraman.tif');J=imadjust(I,[00.2],[0.51]);%变换空间[00.2]到[0.51]subplot(1,2,1);imshow(I);title('原图像')subplot(1,2,2);imshow(J);title('imadjust调整后的图像')2.2直方图均衡化%用histeq()函数调节一幅灰度图像clearall;clc;I=imread('pout.tif');J=histeq(I);subplot(2,2,1);imshow(I);title('原图像')subplot(2,2,2);imshow(J);title('均匀变换后的图像');subplot(2,2,3);imhist(I,64);title('原图像直方图');subplot(2,2,4);imhist(J,64);title('均匀变换后直方图');2.3直方图规定化histeq(I,hgram)%直方图规定化%直方图规定化较直方图均匀化==可控clearall;clc;I=imread('tire.tif');hgram=50:2:250;%行向量subplot(2,2,1);imshow(I);title('原图像');J=histeq(I,hgram);subplot(2,2,2);imshow(J);title('规定化后的图像');subplot(2,2,3);imhist(I,64);title('原图像直方图');subplot(2,2,4);imhist(J,64);title('规定化后的图像直方图');2.4图像的运算%图像的叠加函数imaddI=imread('rice.png');J=imread('cameraman.tif');K=imadd(I,J,'uint16');subplot(2,2,1);imshow(I);subplot(2,2,2);imshow(J);subplot(2,2,3);imshow(K);subplot(2,2,4);imshow(K,[]);%imadd给图像的每个像素加一个常数,使图像变亮clearall;clc;RGB=imread('peppers.png');RGB2=imadd(RGB,50);subplot(1,2,1);imshow(RGB);title('原图像');subplot(1,2,2);imshow(RGB2);title('亮度增加');%图像减法也称为差分方法,用于检测变化或者运动物体%利用imsubtract()函数减去图像的不均匀背景clearall;clc;rice=imread('rice.png');background=imopen(rice,strel('disk',15));%用开运算生成背景模板rice2=imsubtract(rice,background);subplot(1,2,1);imshow(rice);title('原图像');subplot(1,2,2);imshow(rice2);title('去掉背景的图像');%从图像中减去一个常数clearall;clc;RGB=imread('peppers.png');RGB2=imsubtract(RGB,50);subplot(1,2,1);imshow(RGB);title('亮度减少前')subplot(1,2,2);imshow(RGB2);title('亮度减少')%图像的乘法immultiply%==实现掩模操作,即屏蔽掉图像的某一部分clearall;clc;I=imread('moon.tif');J=immultiply(I,1.2);%缩放因子1.2,增强图像亮度K=immultiply(I,0.6);%缩放因子0.6,减弱图像亮度subplot(1,3,1);imshow(I);title('原图像')subplot(1,3,2);imshow(J);title('1.2')subplot(1,3,3);imshow(K);title('0.6')%图像除法imdivide%除法可用于矫正成像设备的非线性影响、检测图像之间的差别clearall;clc;rice=imread('rice.png');I=double(rice);J=imdivide(I,2);subplot(1,2,1);imshow(uint8(I));title('原图像')subplot(1,2,2);imshow(uint8(J));title('÷2')%图像求补imcomplement(J)clearall;clc;I=imread('eight.tif');J=im2bw(I);K=imcomplement(J);subplot(1,3,1);imshow(I);title('原图像')subplot(1,3,2);imshow(J);title('bw')subplot(1,3,3);imshow(K);title('~')2.5图像几何运算%图像灰度级插值%指定缩小倍数为0.1,然后指定放大倍数为10,放大时分别采用最近邻插值法、双线性插值法,双三次插值法clearall;clc;I=imread('tire.tif');J=imresize(I,0.1);%图像缩小J2=imresize(I,5,'nearest');%图像放大,最近邻插值法J3=imresize(I,5,'bilinear');%图像放大,双线性插值法J4=imresize(I,5,'bicubic');%双三次插值法subplot(2,2,1);imshow(I);title('原始图像');subplot(2,2,2);imshow(J2);title('最近邻插值法');subplot(2,2,3);imshow(J3);title('双线性插值法');subplot(2,2,4);imshow(J4);title('双三次插值法');%图像灰度级插值==用来估计像素在图像像素间某一位置取值的过程%最近邻插值算法%图像灰度级插值==用来估计像素在图像像素间某一位置取值的过程%最近邻插值和双线性插值%图像灰度级插值==用来估计像素在图像像素间某一位置取值的过程%最近邻插值和双线性插值functionUntitledclearall;clc;A=imread('rice.png');[B1]=zoom3(A);%最近邻插值算法3
本文标题:matlAB图像处理程序与实操
链接地址:https://www.777doc.com/doc-2025569 .html