数字图像处理与MATLAB实现
用matlab实现数字图像处理几个简单例子
实验报告实验一图像的傅里叶变换(旋转性质)实验二图像的代数运算实验三filter2实现均值滤波实验四图像的缩放朱锦璐04085122实验一图像的傅里叶变换(旋转性质)一、实验内容对图(1.1)的图像做旋转,观察原图的傅里叶频谱和旋转后的傅里叶频谱的对应关系。
图(1.1)二、实验原理首先借助极坐标变换x=rcosθ,y=rsinθ,u=wcosϕ,v=wsinϕ,,将f(x,y)和F(u,v)转换为f(r,θ)和F(w,ϕ).f(x,y) <=> F(u,v)f(rcosθ,rsinθ)<=> F(wcosϕ,wsinϕ)经过变换得f( r,θ+θ。
)<=>F(w,ϕ+θ。
)上式表明,对f(x,y)旋转一个角度θ。
对应于将其傅里叶变换F(u,v)也旋转相同的角度θ。
F(u,v)到f(x,y)也是一样。
三、实验方法及程序选取一幅图像,进行离散傅里叶变换,在对其进行一定角度的旋转,进行离散傅里叶变换。
>> I=zeros(256,256); %构造原始图像I(88:168,120:136)=1; %图像范围256*256,前一值是纵向比,后一值是横向比figure(1);imshow(I); %求原始图像的傅里叶频谱J=fft2(I);F=abs(J);J1=fftshift(F);figure(2)imshow(J1,[5 50])J=imrotate(I,45,'bilinear','crop'); %将图像逆时针旋转45°figure(3);imshow(J) %求旋转后的图像的傅里叶频谱J1=fft2(J);F=abs(J1);J2=fftshift(F);figure(4)imshow(J2,[5 50])四、实验结果与分析实验结果如下图所示(1.2)原图像(1.3)傅里叶频谱(1.4)旋转45°后的图像(1.5)旋转后的傅里叶频谱以下为放大的图(1.6)原图像(1.7)傅里叶频谱(1.8)旋转45°后的图像(1.9)旋转后的傅里叶频谱由实验结果可知1、从旋转性质来考虑,图(1.8)是图(1.6)逆时针旋转45°后的图像,对比图(1.7)和图(1.9)可知,频域图像也逆时针旋转了45°2、从尺寸变换性质来考虑,如图(1.6)和图(1.7)、图(1.8)和图(1.9)可知,原图像和其傅里叶变换后的图像角度相差90°,由此可知,时域中的信号被压缩,到频域中的信号就被拉伸。
数字图像处理及matlab实现源代码【1】
% *-*--*-*-*-*-*-*-*-*-*-*-*图像处理*-*-*-*-*-*-*-*-*-*-*-*%{% (一)图像文件的读/写A=imread('drum.jpg'); % 读入图像imshow(A); % 显示图像imwrite(A,'drum.jpg');info=imfinfo('drum.jpg') % 查询图像文件信息% 用colorbar函数将颜色条添加到坐标轴对象中RGB=imread('drum.jpg');I=rgb2gray(RGB); % 把RGB图像转换成灰度图像h=[1 2 1;0 0 0;-1 -2 -1];I2=filter2(h,I);imshow(I2,[]);colorbar('vert') % 将颜色条添加到坐标轴对象中% wrap函数将图像作为纹理进行映射A=imread('4.jpg');imshow(A);I=rgb2gray(RGB);[x,y,z]=sphere;warp(x,y,z,I); % 用warp函数将图像作为纹理进行映射%}% subimage函数实现一个图形窗口中显示多幅图像RGB=imread('drum.jpg');I=rgb2gray(RGB);subplot(1,2,1);subimage(RGB); % subimage函数实现一个图形窗口中显示多幅图像subplot(1,2,2),subimage(I);% *-*--*-*-*-*-*-*-*-*-*-*-*图像处理*-*-*-*-*-*-*-*-*-*-*-*% (二)图像处理的基本操作% ----------------图像代数运算------------------%{% imadd函数实现两幅图像的相加或给一幅图像加上一个常数% 给图像每个像素都增加亮度I=imread('4.jpg');J=imadd(I,100); % 给图像增加亮度subplot(1,2,1),imshow(I);title('原图');subplot(1,2,2),imshow(J);title('增加亮度图');%% imsubtract函数实现将一幅图像从另一个图像中减去或减去一个常数I=imread('drum.jpg');J=imsubtract(I,100); % 给图像减去亮度subplot(1,2,1),imshow(I);%% immultiply实现两幅图像的相乘或者一幅图像的亮度缩放I=imread('drum.jpg');J=immultiply(I,2); % 进行亮度缩放subplot(1,2,1),imshow(I);subplot(1,2,2),imshow(J);%% imdivide函数实现两幅图像的除法或一幅图像的亮度缩放I=imread('4.jpg');J=imdivide(I,0.5); % 图像的亮度缩放subplot(1,2,1),imshow(I);subplot(1,2,2),imshow(J);%}% ----------------图像的空间域操作------------------%{% imresize函数实现图像的缩放J=imread('4.jpg');subplot(1,2,1),imshow(J);title('原图');X1=imresize(J,0.2); % 对图像进行缩放subplot(1,2,2),imshow(X1);title('缩放图');%% imrotate函数实现图像的旋转I=imread('drum.jpg');J=imrotate(I,50,'bilinear'); % 对图像进行旋转subplot(1,2,1),imshow(I);subplot(1,2,2),imshow(J);%% imcrop函数实现图像的剪切I=imread('drum.jpg');I2=imcrop(I,[1 100 130 112]); % 对图像进行剪切subplot(1,2,1),imshow(I);subplot(1,2,2),imshow(I2);%}% ----------------特定区域处理------------------%{% roipoly函数用于选择图像中的多边形区域I=imread('4.jpg');c=[200 250 278 248 199 172];r=[21 21 75 121 121 75];BW=roipoly(I,c,r); % roipoly函数选择图像中的多边形区域subplot(1,2,1),imshow(I);subplot(1,2,2),imshow(BW);%% roicolor函数式对RGB图像和灰度图像实现按灰度或亮度值选择区域进行处理a=imread('4.jpg');subplot(2,2,1),imshow(a);I=rgb2gray(a);BW=roicolor(I,128,225); % 按灰度值选择的区域subplot(2,2,4),imshow(BW);%% ploy2mask 函数转化指定的多边形区域为二值掩模x=[63 186 54 190 63];y=[60 60 209 204 601];bw=poly2mask(x,y,256,256); % 转化指定的多边形区域为二值掩模imshow(bw);hold onplot(x,y,'r','LineWidth',2);hold off%% roifilt2函数实现区域滤波a=imread('4.jpg');I=rgb2gray(a);c=[200 250 278 248 199 172];r=[21 21 75 121 121 75];BW=roipoly(I,c,r); % roipoly函数选择图像中的多边形区域h=fspecial('unsharp');J=roifilt2(h,I,BW); % 区域滤波subplot(1,2,1),imshow(I);subplot(1,2,2),imshow(J);%% roifill函数实现对特定区域进行填充a=imread('4.jpg');I=rgb2gray(a);c=[200 250 278 248 199 172];r=[21 21 75 121 121 75];J=roifill(I,c,r); % 对特定区域进行填充subplot(1,2,1),imshow(I);subplot(1,2,2),imshow(J);%}% ----------------图像变换------------------%{% fft2 和ifft2函数分别是计算二维的快速傅里叶变换和反变换f=zeros(100,100);subplot(1,2,1);imshow(f);f(20:70,40:60)=1;subplot(1,2,2);imshow(f);F=fft2(f); % 计算二维的快速傅里叶变换F2=log(abs(F));% 对幅值对对数figure;subplot(1,2,1),imshow(F),colorbar;subplot(1,2,2),imshow(F2),colorbar;%% fftsshift 函数实现了补零操作和改变图像显示象限f=zeros(100,100);subplot(2,2,1),imshow(f);title('f')f(10:70,40:60)=1;subplot(2,2,2),imshow(f);title('f取后')F=fft2(f,256,256);subplot(2,2,3),imshow(F);title('F')F2=fftshift(F); % 实现补零操作subplot(2,2,4),imshow(F2);title('F2')figure,imshow(log(abs(F2)));title('log(|F2|)')%% dct2 函数采用基于快速傅里叶变换的算法,用于实现较大输入矩阵的离散余弦变换% idct2 函数实现图像的二维逆离散余弦变换RGB=imread('drum.jpg');I=rgb2gray(RGB);J=dct2(I); % 对I进行离散余弦变换imshow(log(abs(J))),title('对原图离散后取对数'),colorbar;J(abs(J)<10)=0;K=idct2(J); % 图像的二维逆离散余弦变换figure,imshow(I),title('原灰度图')figure,imshow(K,[0,255]);title('逆离散变换');%% dctmtx 函数用于实现较小输入矩阵的离散余弦变figure;RGB=imread('4.jpg');I=rgb2gray(RGB);subplot(3,2,1),imshow(I),title('原灰度图');I=im2double(I);subplot(3,2,2),imshow(I),title('取双精度后');T=dctmtx(8); % 离散余弦变换subplot(3,2,3),imshow(I),title('离散余弦变换后');B=blkproc(I,[8,8],'P1*x*P2',T,T');subplot(3,2,4),imshow(B),title('blkproc作用I后的B');mask=[ 1 1 1 1 0 0 0 01 1 1 0 0 0 0 01 1 0 0 0 0 0 01 0 0 0 0 0 0 00 0 0 0 0 0 0 00 0 0 0 0 0 0 00 0 0 0 0 0 0 00 0 0 0 0 0 0 0 ];B2=blkproc(B,[8,8],'P1.*x',mask);subplot(3,2,5),imshow(B2),title('blkproc作用B后的B2');I2=blkproc(B2,[8,8],'P1*x*P2',T',T);subplot(3,2,6),imshow(I2),title('blkproc作用B2后的I2');%% edge函数用于提取图像的边缘RGB=imread('4.jpg');I=rgb2gray(RGB);BW=edge(I);imshow(I);figure,imshow(BW);%% radon 函数用来计算指定方向上图像矩阵的投影RGB=imread('4.jpg');I=rgb2gray(RGB);BW=edge(I);theta=0:179;[R,XP]=radon(BW,theta); % 图像矩阵的投影figure,imagesc(theta,XP,R);colormap(hot);xlabel('\theta(degrees)');ylabel('x\prime');title('R_{\theta}(x\prime)');colorbar;%}% ----------------图像增强、分割和编码------------------%{% imhist 函数产生图像的直方图A=imread('4.jpg');B=rgb2gray(A);subplot(2,1,1),imshow(B);subplot(2,1,2),imhist(B);%% histeq 函数用于对图像的直方图均衡化A=imread('4.jpg');B=rgb2gray(A);subplot(2,1,1),imshow(B);subplot(2,1,2),imhist(B);C=histeq(B); % 对图像B进行均衡化figure;subplot(2,1,1),imshow(C);subplot(2,1,2),imhist(C);%% filter2 函数实现均值滤波a=imread('4.jpg');I=rgb2gray(a);subplot(2,2,1),imshow(I);K1=filter2(fspecial('average',3),I)/255; % 3*3的均值滤波K2=filter2(fspecial('average',5),I)/255; % 5*5的均值滤波K3=filter2(fspecial('average',7),I)/255; % 7*7的均值滤波subplot(2,2,2),imshow(K1);subplot(2,2,3),imshow(K2);subplot(2,2,4),imshow(K3);%% wiener2 函数实现Wiener(维纳)滤波a=imread('4.jpg');I=rgb2gray(a);subplot(2,2,1),imshow(I);K1=wiener2(I,[3,3]); % 3*3 wiener滤波K2=wiener2(I,[5,5]); % 5*5 wiener滤波K3=wiener2(I,[7,7]); % 7*7 wiener滤波subplot(2,2,2),imshow(K1);subplot(2,2,3),imshow(K2);subplot(2,2,4),imshow(K3);%% medfilt2 函数实现中值滤波a=imread('4.jpg');I=rgb2gray(a);subplot(2,2,1),imshow(I);K1=medfilt2(I,[3,3]); % 3*3 中值滤波K2=medfilt2(I,[5,5]); % 5*5 中值滤波K3=medfilt2(I,[7,7]); % 7*7 中值滤波subplot(2,2,2),imshow(K1);subplot(2,2,3),imshow(K2);subplot(2,2,4),imshow(K3);%}% ----------------图像模糊及复原------------------%{% deconvwnr 函数:使用维纳滤波器I=imread('qier.jpg');imshow(I);% 对图像进行模糊处理LEN=31;THETA=11;PSF1=fspecial('motion',LEN,THETA); % 运动模糊PSF2=fspecial('gaussian',10,5); % 高斯模糊Blurred1=imfilter(I,PSF1,'circular','conv'); % 得到运动模糊图像Blurred2=imfilter(I,PSF2,'conv'); % 得到高斯噪声模糊图像figure;subplot(1,2,1);imshow(Blurred1);title('Blurred1--"motion"'); subplot(1,2,2);imshow(Blurred2);title('Blurred2--"gaussian"');% 对模糊图像加噪声V=0.002;BlurredNoisy1=imnoise(Blurred1,'gaussian',0,V); % 加高斯噪声BlurredNoisy2=imnoise(Blurred2,'gaussian',0,V); % 加高斯噪声figure;subplot(1,2,1);imshow(BlurredNoisy1);title('BlurredNoisy1'); subplot(1,2,2);imshow(BlurredNoisy2);title('BlurredNoisy2');% 进行维纳滤波wnr1=deconvwnr(Blurred1,PSF1); % 维纳滤波wnr2=deconvwnr(Blurred2,PSF2); % 维纳滤波figure;subplot(1,2,1);imshow(wnr1);title('Restored1,True PSF'); subplot(1,2,2);imshow(wnr2);title('Restored2,True PSF');%% deconvreg函数:使用约束最小二乘滤波器I=imread('qier.jpg');imshow(I);% 对图像进行模糊处理LEN=31;THETA=11;PSF1=fspecial('motion',LEN,THETA); % 运动模糊PSF2=fspecial('gaussian',10,5); % 高斯模糊Blurred1=imfilter(I,PSF1,'circular','conv'); % 得到运动模糊图像Blurred2=imfilter(I,PSF2,'conv'); % 得到高斯噪声模糊图像figure;subplot(1,2,1);imshow(Blurred1);title('Blurred1--"motion"');subplot(1,2,2);imshow(Blurred2);title('Blurred2--"gaussian"');% 对模糊图像加噪声V=0.002;BlurredNoisy1=imnoise(Blurred1,'gaussian',0,V); % 加高斯噪声BlurredNoisy2=imnoise(Blurred2,'gaussian',0,V); % 加高斯噪声figure;subplot(1,2,1);imshow(BlurredNoisy1);title('BlurredNoisy1');subplot(1,2,2);imshow(BlurredNoisy2);title('BlurredNoisy2');NP=V*prod(size(I));reg1=deconvreg(BlurredNoisy1,PSF1,NP); % 约束最小二乘滤波reg2=deconvreg(BlurredNoisy2,PSF2,NP); % 约束最小二乘滤波figure;subplot(1,2,1);imshow(reg1);title('Restored1 with NP');subplot(1,2,2);imshow(reg2);title('Restored2 with NP');%% deconvlucy函数:使用Lucy-Richardson滤波器I=imread('qier.jpg');imshow(I);% 对图像进行模糊处理LEN=31;THETA=11;PSF1=fspecial('motion',LEN,THETA); % 运动模糊PSF2=fspecial('gaussian',10,5); % 高斯模糊Blurred1=imfilter(I,PSF1,'circular','conv'); % 得到运动模糊图像Blurred2=imfilter(I,PSF2,'conv'); % 得到高斯噪声模糊图像figure;subplot(1,2,1);imshow(Blurred1);title('Blurred1--"motion"');subplot(1,2,2);imshow(Blurred2);title('Blurred2--"gaussian"');% 对模糊图像加噪声V=0.002;BlurredNoisy1=imnoise(Blurred1,'gaussian',0,V); % 加高斯噪声BlurredNoisy2=imnoise(Blurred2,'gaussian',0,V); % 加高斯噪声figure;subplot(1,2,1);imshow(BlurredNoisy1);title('BlurredNoisy1');subplot(1,2,2);imshow(BlurredNoisy2);title('BlurredNoisy2');luc1=deconvlucy(BlurredNoisy1,PSF1,5); % 使用Lucy-Richardson滤波luc2=deconvlucy(BlurredNoisy1,PSF1,15); % 使用Lucy-Richardson滤波figure;subplot(1,2,1);imshow(luc1);title('Restored Image,NUMIT=5'); subplot(1,2,2);imshow(luc2);title('Restored Image,NUMIT=15');%}% deconvblind 函数:使用盲卷积算法a=imread('4.jpg');I=rgb2gray(a);figure;imshow(I);title('Original Image');PSF=fspecial('motion',13,45); % 运动模糊figure;imshow(PSF);Blurred=imfilter(I,PSF,'circ','conv'); % 得到运动模糊图像figure;imshow(Blurred);title('Blurred Image');INITPSF=ones(size(PSF));[J,P]=deconvblind(Blurred,INITPSF,30); % 使用盲卷积figure;imshow(J);figure;imshow(P,[],'notruesize');% *-*--*-*-*-*-*-*-*-*-*-*-*图像处理*-*-*-*-*-*-*-*-*-*-*-* %{% 对图像进行减采样a=imread('lena.jpg');%subplot(1,4,1);figure;imshow(a);title('原图');b=rgb2gray(a);%subplot(1,4,2);figure;imshow(b);title('原图的灰度图');[wid,hei]=size(b);%---4倍减采样----quartimg=zeros(wid/2+1,hei/2+1);i1=1;j1=1;for i=1:2:widfor j=1:2:heiquartimg(i1,j1)=b(i,j);j1=j1+1;endi1=i1+1;j1=1;end%subplot(1,4,3);figure;imshow(uint8(quartimg));title('4倍减采样')% ---16倍减采样---quanrtimg=zeros(wid/4+1,hei/4+1);i1=1;j1=1;for i=1:4:widfor j=1:4:heiquanrtimg(i1,j1)=b(i,j);j1=j1+1;endi1=i1+1;j1=1;end%subplot(1,4,4);.figure;imshow(uint8(quanrtimg));title('16倍减采样');%}% 图像类型% 将图像转换为256级灰度图像,64级灰度图像,32级灰度图像,8级灰度图像,2级灰度图像a=imread('4.jpg');%figure;subplot(2,3,1);imshow(a);title('原图');b=rgb2gray(a); % 这是256灰度级的图像%figure;subplot(2,3,2);imshow(b);title('原图的灰度图像');[wid,hei]=size(b);img64=zeros(wid,hei);img32=zeros(wid,hei);img8=zeros(wid,hei);img2=zeros(wid,hei);for i=1:widfor j=j:heiimg64(i,j)=floor(b(i,j)/4); % 转化为64灰度级endend%figure;subplot(2,3,3);imshow(uint8(img64),[0,63]);title('64级灰度图像');for i=1:widfor j=1:heiimg32(i,j)=floor(b(i,j)/8);% 转化为32灰度级endend%figure;subplot(2,3,4);imshow(uint8(img32),[0,31]);title('32级灰度图像');for i=1:widfor j=1:heiimg8(i,j)=floor(b(i,j)/32);% 转化为8灰度级endend%figure;subplot(2,3,5);imshow(uint8(img8),[0,7]);title('8级灰度图像');for i=1:widfor j=1:heiimg2(i,j)=floor(b(i,j)/128);% 转化为2灰度级endend%figure;subplot(2,3,6);imshow(uint8(img2),[0,1]);title('2级灰度图像');% *-*--*-*-*-*-*-*-*-*-*-*-*图像处理*-*-*-*-*-*-*-*-*-*-*-* %{% ------------------ 图像的点运算------------------I=imread('lena.jpg');figure;subplot(1,3,1);imshow(I);title('原图的灰度图');J=imadjust(I,[0.3;0.6],[0.1;0.9]); % 设置灰度变换的范围subplot(1,3,2);imshow(J);title('线性扩展');I1=double(I); % 将图像转换为double类型I2=I1/255; % 归一化此图像C=2; % 非线性扩展函数的参数K=C*log(1+I2); % 对图像的对数变换subplot(1,3,3);imshow(K);title('非线性扩展');M=255-I;figure;subplot(1,3,1);imshow(M);title('灰度倒置');N1=im2bw(I,0.4); % 将此图像二值化,阈值为0.4N2=im2bw(I,0.7); % 将此图像二值化,阈值为0.7 subplot(1,3,2);imshow(N1);title('二值化阈值0.4');subplot(1,3,3);imshow(N2);title('二值化阈值0.7');%}%{% ------------------ 图像的代数运算------------------% 将两幅图像进行加法运算I=imread('lena.jpg');I=rgb2gray(I);J=imread('rice.png');% 以下把两幅图转化为大小一样for i=1:size(I)for j=size(J):size(I)J(i,j)=0;endendI=im2double(I); % 将图像转化为double型J=im2double(J);% imshow(I);figure;imshow(J);K=I+0.3*J; % 将两幅图像相加subplot(1,3,1);imshow(I);title('人物图');subplot(1,3,2);imshow(J);title('背景图');subplot(1,3,3);imshow(K);title('相加后的图');imwrite(K,'i_lena1.jpg');%%% 将两幅图像做减运算,分离背景与原图A=imread('i_lena1.jpg');B=imread('rice.png');% 以下把两幅图转化为大小一样for i=1:size(A)for j=size(B):size(A)B(i,j)=0;endendC=A-0.3*B;a=imread('lena.jpg');subplot(2,2,1);imshow(a);title('原图图');subplot(2,2,2);imshow(A);title('混合图');subplot(2,2,3);imshow(B);title('背景图');subplot(2,2,4);imshow(C);title('分离后的图');%% 设置掩模,需要保留下来的区域,掩模图像的值为1,否则为0 A=imread('drum.jpg');A=rgb2gray(A);A=im2double(A);sizeA=size(A);subplot(1,2,1);imshow(A);title('原图');B=zeros(sizeA(1),sizeA(2)); % 设置模板B(100:400,100:500)=1;K=A.*B; % 两幅图像相乘subplot(1,2,2);imshow(K);title('局部图');%}%{% ------------------ 图像的缩放------------------A=imread('drum.jpg');B1=imresize(A,1.5); % 比例放大1.5杯,默认采用的是最近邻法进行线性插值B2=imresize(A,[420 384]); % 非比例放大到420:384C1=imresize(A,0.7); % 比例缩小0.7倍C2=imresize(A,[150 180]); % 非比例缩小到150:180figure;imshow(B1);title('比例放大图');figure;imshow(B2);title('非比例放大图');figure;imshow(C1);title('比例缩小图');figure;imshow(C2);title('非比例缩小图');% 检测非比例缩放得到的图片是否能还原到原图a=size(A)d=imresize(C2,[a(1),a(2)]);figure;imshow(d);%}% ------------------ 图像的旋转------------------I=imread('drum.jpg');J=imrotate(I,45); % 图像进行逆时针旋转,默认采用最近邻插值法进行插值处理K=imrotate(I,90); % 默认旋转出界的部分不被截出subplot(1,3,1);imshow(I);subplot(1,3,2);imshow(J);subplot(1,3,3);imshow(K);% 检测旋转后的图像是否失真P=imrotate(K,270);figure;imshow(P);。
(完整版)数字图像处理MATLAB程序【完整版】
第一部分数字图像处理实验一图像的点运算实验1.1 直方图一.实验目的1.熟悉matlab图像处理工具箱及直方图函数的使用;2.理解和掌握直方图原理和方法;二.实验设备1.PC机一台;2.软件matlab。
三.程序设计在matlab环境中,程序首先读取图像,然后调用直方图函数,设置相关参数,再输出处理后的图像。
I=imread('cameraman.tif');%读取图像subplot(1,2,1),imshow(I) %输出图像title('原始图像') %在原始图像中加标题subplot(1,2,2),imhist(I) %输出原图直方图title('原始图像直方图') %在原图直方图上加标题四.实验步骤1. 启动matlab双击桌面matlab图标启动matlab环境;2. 在matlab命令窗口中输入相应程序。
书写程序时,首先读取图像,一般调用matlab自带的图像,如:cameraman图像;再调用相应的直方图函数,设置参数;最后输出处理后的图像;3.浏览源程序并理解含义;4.运行,观察显示结果;5.结束运行,退出;五.实验结果观察图像matlab环境下的直方图分布。
(a)原始图像 (b)原始图像直方图六.实验报告要求1、给出实验原理过程及实现代码;2、输入一幅灰度图像,给出其灰度直方图结果,并进行灰度直方图分布原理分析。
实验1.2 灰度均衡一.实验目的1.熟悉matlab图像处理工具箱中灰度均衡函数的使用;2.理解和掌握灰度均衡原理和实现方法;二.实验设备1.PC机一台;2.软件matlab;三.程序设计在matlab环境中,程序首先读取图像,然后调用灰度均衡函数,设置相关参数,再输出处理后的图像。
I=imread('cameraman.tif');%读取图像subplot(2,2,1),imshow(I) %输出图像title('原始图像') %在原始图像中加标题subplot(2,2,3),imhist(I) %输出原图直方图title('原始图像直方图') %在原图直方图上加标题a=histeq(I,256); %直方图均衡化,灰度级为256subplot(2,2,2),imshow(a) %输出均衡化后图像title('均衡化后图像') %在均衡化后图像中加标题subplot(2,2,4),imhist(a) %输出均衡化后直方图title('均衡化后图像直方图') %在均衡化后直方图上加标题四.实验步骤1. 启动matlab双击桌面matlab图标启动matlab环境;2. 在matlab命令窗口中输入相应程序。
基于MATLAB的数字图像处理的设计与实现
基于MATLAB的数字图像处理的设计与实现摘要数字图像处理是一门新兴技术,随着计算机硬件的发展,数字图像的实时处理已经成可能,由于数字图像处理的各种算法的出现,使得其处理速度越来越快,能更好的为人们服务。
数字图像处理是一种通过计算机采用一定的算法对图形图像进行处理的技术。
目的:改善医学图像质量,使图像得到增强。
方法:利用Matlab工具箱函数,采用灰度直方图均衡化和高通滤波的方法对一幅X线图像进行增强处理。
结果:用直方图均衡化的算法,将原始图像密集的灰度分布变得比较稀疏,处理后的图像视觉效果得以改善。
高通滤波对于局部细节增强显著,高通滤波后使不易观察到的细节变得清晰。
结论:使用Matlab工具箱大大简化了编程工作,为医学图像处理提供了一种技术平台。
经过直方图均衡化和高通滤波处理后的医学图像,视觉效果得到改善。
关键词:MATLAB;直方图均衡化;高通滤波;图像增强AbstractDigital image processing is an emerging technology, with the development of computer hardware, real—time digital image processing has become possible due to digital image processing algorithms to appear,making it faster and faster processing speed,better for people services .Digital image processing is used by some algorithms computer graphics image pro cessing technology. Objective:To improve the quality of medical image by enhancing the details。
数字图像处理及应用MATLAB第8章.ppt
(3)imshow 功能:显示图像
格式:imshow(I,n) ;imshow(I,[low high]) ;imshow(BW) %显示黑白图像
imshow(X,map) %显示索引色图像;imshow(RGB) %显示真彩色图像
imshow filename (4)figure
功能:创建图形窗口 (5)subplot
功能:将多个图画到一个平面上的工具。 格式:subplot(m,n,p)或者subplot(mnp) 说明:其中,m表示是图排成m行,n表示图排成n列,也就 是整个figure中有n个图是排成一行的,一共m行。
(a)原始图像 实验结果图
(b) 处理后图像
(4)实现真彩色图像与索引图像的互相转换。
clear,clc close all RGB1 = imread('peppers.png');%读入真彩色图像 [X1,map1] = rgb2ind(RGB1,128);%真彩色图像转化为索引图 imshow(X1,map1) %显示索引图像 load clown;%载入图像 rgb2=ind2rgb(X,map);%将索引图像转化为真彩色图像 figure,imshow(rgb2)
2、实验中所用部分函数介绍
(1)imread 功能:图像文件的读取 格式: A=imread(filename,fmt) 将文件命为filename表示的扩展名为fmt的图像文件读Байду номын сангаас到矩
阵A中。MATLAB支持的图像格式有bmp、jpg或jpeg、tif或tiff、 gif、pcx、png、xwd。 (2)imwrite
数字图像处理及MATLAB实现[杨杰][电子教案]第二章
距离 像素之间的联系常与像素在空间的接近程度有 关。像素在空间的接近程度可以用像素之间的距 离来度量。为测量距离需要定义距离度量函数。 给定 p, q, r 三个像素,其坐标分别为 ( x, y ), ( s, t ), (u , v) 如果 1) D ( p, q ) ≥ 0( D ( p, q ) = 0 当且仅当 p = q ) 2) D ( p, q ) = D ( q, p ) 3) D ( p, r ) ≤ D ( p, q ) = D (q, r ) 则 D是距离函数或度量。
p 和 q 之间的欧式距离定义为:
De ( p, q) = ( x − s)2 + ( y − t )2
p 和 q 之间的 D4距离(也叫城市街区距离)定义为:
D4 ( p , q ) = x-s + y-t
p 和 q 之间的 D8 距离(也叫棋盘距离)定义为:
D8 ( p, q )=max( x-s , ) y-t
图像获取即图像的数字化过程,包括扫描、 图像获取即图像的数字化过程,包括扫描、 采样和量化。 采样和量化。 图像获取设备由5个部分组成 采样孔, 个部分组成: 图像获取设备由 个部分组成:采样孔, 扫描机构,光传感器, 扫描机构,光传感器,量化器和输出存储 体。 关键技术有:采样——成像技术;量化 成像技术; 关键技术有:采样 成像技术 量化— —模数转换技术。 模数转换技术。 模数转换技术
Sampling
图像的采样
图2.15图像的采样示例 图像的采样示例
Quantization 图像的量化
图2.16图像的量化示例 图像的量化示例
量化等级越多,所得图像层次越丰富, 量化等级越多,所得图像层次越丰富,灰度 分辨率高,图像质量好,但数据量大; 分辨率高,,图像层次欠丰富,灰度分辨 量化等级越少,图像层次欠丰富, 率低,会出现假轮廓现象,图像质量变差, 率低,会出现假轮廓现象,图像质量变差, 但数据量小. 但数据量小
《数字图像处理及MATLAB实现》图像增强与平滑实验
《数字图像处理及MATLAB实现》图像增强与平滑实验一.实验目的及要求1、熟悉并掌握MA TLAB 图像处理工具箱的使用;2、理解并掌握常用的图像的增强技术。
二、实验设备MATLAB 6.5 以上版本、WIN XP 或WIN2000 计算机三、实验内容(一)研究以下程序,分析程序功能;输入执行各命令行,认真观察命令执行的结果。
熟悉程序中所使用函数的调用方法,改变有关参数,观察试验结果。
(可将每段程序保存为一个.m文件)1.直方图均衡化clear all; close all % Clear the MATLAB workspace of any variables% and close open figure windows.I = imread('pout.tif'); % Reads the sample images ‘pout.tif’, and stores it inimshow(I) % an array named I.display the imagetext(60,20,'李荣桉1909290239','horiz','center','color','r')figure, imhist(I) % Create a histogram of the image and display it in% a new figure window.[I2,T] = histeq(I); % Histogram equalization.figure, imshow(I2) % Display the new equalized image, I2, in a new figure window.text(60,20,'李荣桉1909290239','horiz','center','color','r')figure, imhist(I2) % Create a histogram of the equalized image I2.figure,plot((0:255)/255,T); % plot the transformation curve.imwrite (I2, 'pout2.png'); % Write the newly adjusted image I2 to a disk file named% ‘pout2.png’.imfinfo('pout2.png') % Check the contents of the newly written file2.直接灰度变换clear all; close allI = imread('cameraman.tif'); 注意:imadjust()功能:调整图像灰度值或颜色映像表,也可实现伽马校正。
数字图像处理与机器视觉-基于MATLAB实现 第10章 图像识别基础
• 以数据聚类的监督学习方法; • 以统计分类的无监督学习方法; • 通过对基本单元判断是否符合某种规则的结构模式识别方法; • 可同时用于监督或者非监督学习的神经网络分类法。 1.线性判用一条直线来划分已有的学 习集的数据,然后根据待测点在直线的那一边决定的分类。如下图可以做出一条直线来 划分两种数据的分类。但是一般情况下的特征数很多,想降低特征数维度。可以通过投 影的方式进行计算。然而使得一个多维度的特征数变换到一条直线上进行计算。可以减 少计算工作的复杂度。
10.2 模式识别方法
c.对称连接网络 对称连接网络有点像循环网络,但是单元之间的连接是对称的(它们在两个方向上 权重相同)。比起循环网络,对称连接网络更容易分析。这个网络中有更多的限制,因 为它们遵守能量函数定律。没有隐藏单元的对称连接网络被称为“Hopfield 网络”。有 隐藏单元的对称连接的网络被称为“玻尔兹曼机” 。 神经网络可以看成是从输入空间到输出空间的一个非线性映射,它通过调整权重和 阈值来“学习”或发现变量间的关系,实现对事物的分类。由于神经网络是一种对数据 分布无任何要求的非线性技术,它能有效解决非正态分布和非线性的评价问题,因而受 到广泛的应用。由于神经网络具有信息的分布存储,并行处理及自学习能力等特点,它 在泛化处理能力上显示出较高的优势。
模式识别是指对表征事物或现象的各种形式的(数值的、文字的和逻辑关系的)信息进行 处理和分析,以对事物或现象进行描述、辨认、分类和解释的过程,是信息科学和人工智 能的重要组成部分。
基于监督学习的模式识别系统由4大部分组成,即待识别对象、预处理、特征提取和分 类识别,如图10-1所示。
图10-1 模式识别流程图
《数字图像处理》实验教案
一、实验目的与要求1. 目的通过本实验,使学生了解数字图像处理的基本概念、方法和算法,掌握MATLAB 软件在图像处理方面的应用,提高学生分析问题和解决问题的能力。
2. 要求(1)熟悉MATLAB软件的基本操作。
(2)了解数字图像处理的基本概念和常用算法。
(3)能够运用MATLAB实现图像处理的基本操作和算法。
二、实验内容与步骤1. 实验内容(1)图像读取与显示。
(2)图像的基本运算(如加、减、乘、除等)。
(3)图像的滤波处理。
(4)图像的边缘检测。
(5)图像的分割与标记。
2. 实验步骤(1)打开MATLAB软件,新建一个脚本文件。
(2)导入所需图像,使用imread()函数读取图像,使用imshow()函数显示图像。
(3)进行图像的基本运算,如加、减、乘、除等,使用imadd()、imsub()、imdiv()、imconcat()等函数。
(4)对图像进行滤波处理,如使用均值滤波、中值滤波等,使用imfilter()函数。
(5)进行图像的边缘检测,如使用Sobel算子、Canny算子等,使用edge()函数。
(6)对图像进行分割与标记,如使用区域生长、阈值分割等方法,使用watershed()函数。
(7)对实验结果进行分析和讨论,总结实验心得。
三、实验注意事项1. 严格遵循实验步骤,确保实验的正确进行。
2. 合理选择参数,如滤波器的尺寸、阈值等。
3. 注意图像数据类型的转换,如浮点型、整型等。
4. 保持实验环境的整洁,避免误操作。
四、实验评价1. 评价内容(1)实验步骤的完整性。
(2)实验结果的正确性。
2. 评价标准(1)实验步骤完整,得分20分。
(2)实验结果正确,得分30分。
总分100分。
五、实验拓展1. 研究不同滤波器对图像滤波效果的影响。
2. 尝试使用其他图像分割算法,如基于梯度的分割方法、聚类分割方法等。
3. 探索图像处理在其他领域的应用,如计算机视觉、医学影像处理等。
六、实验一:图像读取与显示1. 实验目的掌握MATLAB中图像的读取和显示方法,熟悉图像处理的基本界面。
2014-7自编数字图像处理实验-参考答案
数字图像处理—及MATLAB实现实验指导参考答案目录实验1 MATLAB软件入门及数字图像处理工具箱(2学时) (2)实验3 MATLAB实现数字图像的变换技术(2学时) (20)实验4 MATLAB实现数字图像增强(2学时) (24)实验5 MA TLAB实现图像的复原(2学时) (36)实验6 MA TLAB实现图像分割(2学时) (39)实验7 MA TLAB实现彩色图像处理(2学时) (55)实验8 MA TLAB实现数字图像其它处理(2学时) (60)实验1 MATLAB软件入门及数字图像处理工具箱(2学时)【实验内容】一、二两项略一、运行MATLAB,要求完成:(1)、了解MATLAB工作环境(2)、运用MATLAB帮助系统,查询imread,imwrite,imshow这3个工具箱函数的功能,给出解释(3)、在桌面上建立一个文件夹,以本人姓名拼音缩写为文件名,将该文件夹通过set path设置,放到MATLAB的搜索路径下。
截图最后操作的界面,保存至该文件夹下。
二、了解MATLAB的一些简单的工具箱函数使用,在MATLAB下完成一些图像处理操作。
1、在命令窗口下依次输入如下带下划线的英文命令,无需写注释,对比查看结果:(1)、读入并显示一幅图像>> clear; close all; %首先清除 MATLAB 所有的工作平台变量,关闭已打开的图形窗口。
>> I=imread(′pout.tif′);%然后使用图像读取函数 imread 来读取一幅图像。
假设要读取图像 pout.tif,并将其存储在一个名为 I的数组中>> imshow(I) %使用 imshow 命令来显示数组 I观察显示结果(2)、检查内存中的图像>> Whos %使用 whos命令来查看图像数据 I是如何存储在内存中,MATLAB 做出的响应如下:Name Size Bytes ClassI291 ×240 69840 uint8 arrayGrand totalis69840 elementsusing69840 bytes(3)、实现直方图均衡化如pout.tif图像对比较低,为了观察图像当前状态下亮度分布情况,可以通过使用 imhist函数创建描述该图像灰度分布的直方图。
数字图像处理实验(MATLAB版)
数字图像处理实验(MATLAB版)数字图像处理(MATLAB版)实验指导书(试用版)湖北师范学院教育信息与技术学院2009年4月试行目录实验一、数字图像获取和格式转换 2 实验二、图像亮度变换和空间滤波 6 实验三、频域处理7 实验四、图像复原9 实验五、彩色图像处理101实验六、图像压缩11 实验七、图像分割13 教材与参考文献142《数字图像处理》实验指导书实验一、数字图像获取和格式转换一、实验目的1掌握使用扫描仪、数码相机、数码摄像级机、电脑摄像头等数字化设备以及计算机获取数字图像的方法;2修改图像的存储格式;并比较不同压缩格式图像的数据量的大小。
二、实验原理数字图像获取设备的主要性能指标有x、y方向的分辨率、色彩分辨率(色彩位数)、扫描幅面和接口方式等。
各类设备都标明了它的光学分辨率和最大分辨率。
分辨率的单位是dpi,dpi是英文Dot Per Inch的缩写,意思是每英寸的像素点数。
扫描仪扫描图像的步骤是:首先将欲扫描的原稿正面朝下铺在扫描仪的玻璃板上,原稿可以是文字稿件或者图纸照片;然后启3动扫描仪驱动程序后,安装在扫描仪内部的可移动光源开始扫描原稿。
为了均匀照亮稿件,扫描仪光源为长条形,并沿y方向扫过整个原稿;照射到原稿上的光线经反射后穿过一个很窄的缝隙,形成沿x方向的光带,又经过一组反光镜,由光学透镜聚焦并进入分光镜,经过棱镜和红绿蓝三色滤色镜得到的RGB三条彩色光带分别照到各自的CCD 上,CCD将RGB光带转变为模拟电子信号,此信号又被A/D变换器转变为数字电子信号。
至此,反映原稿图像的光信号转变为计算机能够接受的二进制数字电子信号,最后通过串行或者并行等接口送至计算机。
扫描仪每扫一行就得到原稿x方向一行的图像信息,随着沿y方向的移动,在计算机内部逐步形成原稿的全图。
扫描仪工作原理见图1.1。
4图1.1扫描仪的工作原理在扫描仪的工作过程中,有两个元件起到了关键的作用。
一个是CCD,它将光信号转换成为电信号;另一个是A/D变换器,它将模拟电信号变为数字电信号。
数字图像处理及MATLAB实现4
数字图像处理及MATLAB实现4武汉理工大学信息学院第4章图像变换(ImageTranform)4.1连续傅里叶变换4.2离散傅里叶变换4.3快速傅里叶变换4.4傅里叶变换的性质4.5图像傅里叶变换实例4.6其他离散变换一、图象变换的引入1.方法:对图象信息进行变换,使能量保持但重新分配。
2.目的:有利于加工、处理[滤除不必要信息(如噪声),加强/提取感兴趣的部分或特征]。
二、方法分类可分离、正交变换:2D-DFT,2D-DCT,2D-DHT,2D-DWT三、用途1.提取图象特征(如):(1)直流分量:f(某,y)的平均值=F(0,0);(2)目标物边缘:F(u,v)高频分量。
2.图像压缩:正交变换能量集中,对集中(小)部分进行编码。
3.图象增强:低通滤波,平滑噪声;高通滤波,锐化边缘。
4.1连续傅里叶变换(ContinuouFourierTranform)1、一维傅立叶变换及其反变换::1F(u)f(某)ej2u某d某f(某)F(u)ej2u某du4.1.1连续傅里叶变换的定义(DefinitionofContinuouFourierTranform)这里f某是实函数,它的傅里叶变换Fu通F常是复函数。
u的实部、虚部、振幅、能量和相位分别表示如下:实部Ruftco2utdt(4.3)虚部Iuftin2utdt(4.4)振幅1FuR2uI2u2(4.5)4.1.1连续傅里叶变换的定义(DefinitionofContinuouFourierTranform)能量相位EuFuR2uI2u2(4.6)(4.7)傅里叶变换可以很容易推广到二维的情形。
设函数f某,y是连续可积的,且fu,v可积,则存在如下的傅里叶变换对:IuuarctanRu4.1连续傅里叶变换的定义(DefinitionofContinuouFourierTranform)Ff(某,y)F(u,v)f(某,y)ej2u某vyd某dy(4.8)F1F(u,v)f(某,y)F(u,v)ej2u某vydudv(4.9)式中u、v是频率变量。
河北工业大学数字图像处理之matlab实验报告
实验一一、实验要求1、熟悉MATLAB软件的开发环境、基本操作以及图像处理工具箱,为编写图像处理程序奠定基础。
2、掌握二进制(黑白)图像、灰度图像、彩色图像读、写和显示的基本方法,分别选择以上几种类型的图像,观察其图像类型参数。
3、说明以下程序的显示结果为何是一幅几乎全黑的图像。
clear; close all;myi=zeros(20,20);myi(2:2:18,2:2:18)=1;myi=uint8(myi);figure, imshow(myi,'notruesize');编写程序将图一中orangutan_1.tif图片拉伸一倍后形成orangutan_2.tif所示的图片。
4、应用MATLAB(或C)语言编写一幅灰度图像直方图统计程序,并选择一幅图像显示其直方图,将结果与MATLAB图像处理工具箱中提供的灰度直方图函数imhist的处理结果进行比较。
5、利用以上编写的程序,估算图一所示图像iris.tif中的瞳孔半径(以像素为单位)。
orangutan_1.tif orangutan_2.tif iris.tif图一二、实验内容1,通过安装matlab软件,熟悉MATLAB软件的开发环境、基本操作以及图像处理工具箱2,图像的读、写、显示和图像类型参数查看通过 I= imread(FILENAME),读取图像,注意FILENAME=‘图像文件所在的位置+文件名’;1)通过imwrite(a,FILENAME,fmt),可以把a图像写进FILENAME图像,即是替换掉FILENAME,但是文件图像格式不替换。
2)通过imshow(I),可以把I图像显示出来。
3)例如:在matlab软件中,运行如下命令:I = imread('E:\orangutan_2.tif');figure,imshow(I)I1 = imread('E:\iris.tif');figure,imshow(I1)imwrite(I,'E:\iris.tif','tif')I2 = imread('E:\iris.tif');figure,imshow(I2)原图:orangutan_2.tif iris.tif运行结果:可以看到orangutan_2.tif已成功写入 iris.tif中。
使用Matlab进行图像拍摄与图像处理的实践方法
使用Matlab进行图像拍摄与图像处理的实践方法1. 引言人类对于图像的处理和分析,一直是科学和技术领域中的重要课题。
随着数字图像处理技术的不断发展,Matlab成为了研究者们图像处理的利器。
本文将探讨如何使用Matlab进行图像拍摄与图像处理,以帮助读者更好地理解并应用这一工具。
2. 图像拍摄图像拍摄是获取数字图像的第一步。
在拍摄过程中,摄影师需要注意一些关键因素,例如光线条件、曝光时间和焦距等。
Matlab提供了图像采集工具箱,可以与数码相机或摄像机相连,并实时获取图像数据。
通过该工具箱,用户可以调整曝光时间、白平衡和对焦等设置,以满足实际需求。
3. 图像处理预处理图像拍摄后,图像预处理是必不可少的一步。
预处理可以帮助提高图像质量,并减少后续处理的复杂度。
Matlab提供了一系列的图像处理函数,可以实现预处理任务,例如灰度化、平滑滤波和直方图均衡化等。
通过这些函数,用户可以根据需要调整图像的亮度、对比度和细节等参数,以获取更好的效果。
4. 图像处理主要技术图像处理主要包括图像增强、图像复原和图像分割等技术。
Matlab提供了丰富的工具箱和函数,可以实现这些技术的应用。
例如,Matlab中的imadjust函数可以对图像进行亮度和对比度调整,imfilter函数可以实现各种滤波操作,imsharpen函数可以增强图像的边缘和细节等。
通过灵活使用这些函数,用户可以根据实际情况选择合适的方法,并通过实验不断优化处理结果。
5. 图像处理案例为了更好地理解和应用Matlab进行图像处理,下面将介绍一个实际的案例:人脸识别。
人脸识别是一种常见的图像处理应用,可以应用于安防系统、人机交互和身份认证等领域。
Matlab提供了人脸检测工具箱和人脸识别工具箱,可以帮助用户进行人脸检测和特征提取等操作。
用户可以通过这些工具箱,选择适当的算法和参数,实现人脸识别任务。
在具体实现过程中,用户需要先采集包含多张人脸的图像样本,并建立人脸数据库。
数字图象处理及matlab的实现 ppt 课件 第03章
38
平滑空间滤波器
• 平滑空间滤波器:对图像进行平滑处理,以去除 较小尺度的噪声及细节的空间滤波器 • 平滑线性滤波器(smoothing linear filter)设计:利 用线性滤波计算邻域内像素平均值
有直方图均衡化,还需要直方图匹配操作吗?
25
直方图规定化
26
直方图规定化
?
?
27
直方图规定化
• 方法设计——先考虑归一化的连续灰度情况:
s T (r ) G (z)
r 0
p r (w )d w
(1)
z 0
p z (t )d t s
1
(2)
(3)
T(r)与G-1(s)解析 式一般不存在
z G
1
(s) G
T (r )
• 连续情形下直方图规定化步骤:
r
T (r )
s
G -1(s)
z
28
直方图规定化
• 离散情形:
s T (r )
z r
j0
pr ( j)
(1)
(2)
G (z)
j0
pz ( j) s
《数字图像处理与机器视觉——基于MATLAB实现》读书笔记模板
习题
8.1彩色图像基础
8.1.1彩色的定义 8.1.2彩色的物理认识 8.1.3三原色 8.1.4计算机中的颜色表示
8.2彩色图像的表示
8.2.1 RGB模型 8.2.2 MATLAB实现 8.2.3 HSV彩色模型 8.2.4 HSI模型 8.2.5 Lab模型
8.3彩色图处理基础
8.3.1图像的伪彩色处理 8.3.2全彩色图像处理基础
3.5灰度直方图
3.5.1灰度直方图的绘制 3.5.2灰度直方图的使用
3.6图像的分类
3.6.1二值图像 3.6.2灰度图像 3.6.3彩色图像 3.6.4矢量图 3.6.5索引图像
4.1概述 4.2点运算
4.3代数运算 4.4逻辑运算
本章小结
4.5几何运算
习题
4.2点运算
4.2.1线性点运算 4.2.2非线性点运算
10.4车牌识别实例
10.4.1车牌图像数据特征分析(民用汽车) 10.4.2车牌号码识别系统设计 10.4.3读入图像 10.4.4图像预处理 10.4.5车牌定位 10.4.6车牌区域处理 10.4.7字符分割 10.4.8车牌识别 10.4.9字符分割函数
1
11.1引言
2
11.2低级文件 I/O操作
4.3代数运算
4.3.1加法运算 4.3.2减法运算 4.3.3乘法运算 4.3.4除法运算
4.5几何运算
4.5.1图像的平移 4.5.2图像的镜像 4.5.3图像的旋转 4.5.4图像的缩放 4.5.5灰度插值
5.2快速傅里叶变 换
5.1认识傅里叶变 换
5.3傅里叶变换的 性质
本章小结
习题
11.5 GUI工具深入
11.5.1 GUI中的M文件 11.5.2回调函数 11.5.3 GUI跨平台的兼容性设计 11.5.4触控按钮 11.5.5静态文本 11.5.6切换按钮 11.5.7滑动条 11.5.8单选按钮 11.5.9可编辑文本
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
MATLAB数字图像处理1 概述BW=dither(I)灰度转成二值图;X=dither(RGB,map)RGB转成灰度图,用户需要提供一个Colormap;[X,map]=gray2ind(I,n)灰度到索引;[X,map]=gray2ind(BW,n)二值图到索引,map可由gray(n)产生。
灰度图n默认64,二值图默认2;X=graylice(I,n)灰度图到索引图,门限1/n,2/n,…,(n-1)/n,X=graylice(I,v)给定门限向量v;BW=im2bw(I,level)灰度图I到二值图;BW=im2bw(X,map,level)索引图X到二值图;level是阈值门限,超过像素为1,其余置0,level在[0,1]之间。
BW=im2bw(RGB,level)RGB到二值图;I=ind2gray(X,map)索引图到灰度图;RGB=ind2rgb(X,map)索引图到RGB;I=rgb2gray(RGB)RGB到灰度图。
2 图像运算2.1 图像的读写MATLAB支持的图像格式有bmp,gif,ico,jpg,png,cur,pcx,xwd和tif。
读取(imread):[1] A=imread(filename,fmt)[2] [X,map]=imread(filename,fmt)[3] […]=imread(filename)[4] […]=imread(URL,…)说明:filename是图像文件名,如果不在搜索路径下应是图像的全路径,fmt是图像文件扩展名字符串。
前者可读入二值图、灰度图、彩图(主要是RGB);第二个读入索引图,map为索引图对应的Colormap,即其相关联的颜色映射表,若不是索引图则map为空。
URL表示引自Internet URL中的图像。
写入(imwrite):[1] R=imwrite(A,filename,fmt);[2] R=imwrite(X,map,filename,fmt);[3] R=imwrite(…,filename);[4] R=imwrite(…,Param1,Val1,Param2,Val2)说明:针对第四个,该语句用于指定HDF,JPEG,PBM,PGM,PNG,PPM,TIFF等类型输出文件的不同参数。
例如HDF的Quality,Compression,WriteMode;JPEG的BitDepth,Comment:Empty or not,Mode:lossy or lossless,Quality等。
2.2 图像的显示方法1:使用Image Viewer(图像浏览器),即运用imview函数。
同时显示多帧图像的所有帧,可用到montage 函数。
改变显示大小:imview (X,map,’IntialMagnificatition ’,’fit ’), IntialMagnificatition 默认值为100,即100%显示,设置为fit 则全屏显示。
关闭:imview close all 。
Image Viewer 还提供了三个工具:全景查看窗口(导航功能)、像素区域工具、图像信息窗口。
方法2:使用图形图像视窗,即运用imshow 函数。
调用truesize 函数来设定图像到屏幕像点的映射关系。
可以运用getimage 函数来将当前显示的图像赋值给一个变量。
调用格式:[1] imshow(I,n);\\n 为灰度级[2] imshow(I,[low,high]);\\指定I 的数据围[3] imshow(BW);\\显示二值图像BW ,0为黑色,1为白色 [4] imshow(X,map);\\索引图像 [5] imshow(RGB);[6] imshow(…,display_option);\\显示图像的方式,选择‘notruesize ’或者‘turesize ’ [7] imshow(x,y,A,…);\\x,y 建立非默认的空间坐标系统 [8] imshow filename;[9] h=imshow(…)\\h 表示被显示图像的句柄2.3 图像的代数运算[1] 相加(imadd ): Z=imadd(X,Y)\\存为8位;Z=imadd(X,Y,’uint 16’)\\存为16位。
[2] 求补(imcomplement ): IM2=imcomplement(IM1)。
[3] 减法(imsubtract 或者imabsdiff ): Z=imsubtract(X,Y)\\差值结果小于0的赋值为0; Z=imabsdiff(X,Y)\\ 差值结果取绝对值。
[4] 乘法(immultiply ): Z=immultiply(X,Y)。
[5] 除法(imdivide ): Z=imdivide(X,Y)。
2.4 点运算灰度变换函数GST :B(x,y)=f[A(x,y)]。
其中有:[1]线性点运算B ()f A A αβ==+; [2]非线性点运算; [3]直方图修正。
2.5 图像的集合运算改变大小imresize :Y=imresize(X,M,method),其中M 为放大的倍数,method 有如下几种插值方式nearest,bilinear,bicubic。
也可以规定输出图像大小,[heng,zong]。
图像旋转imrotate:Y=imrotate(X,angle,method,’crop’),angle表示逆时针旋转,method同imresize的用法,crop表示将旋转以后的图像取与原图像大小相同的中心部分取出。
比例缩放imresize:同改变大小。
空间变换imtransform:B=imtransform(A,TFORM,param1,val1,param2,val2),其中TFORM为makeform或者cp2tform产生的结果。
如findounds,makereample,tformarray,imtransform等。
2.6 图像的领域和块操作领域操作分为滑动领域和分离领域两类。
滑动领域函数nlfilter,用法如下:[1] B=nlfilter(A,[m n],fun)\\[m n]表示滑动领域m*n,fun为图像领域上的处理函数;[2] B=nlfilter(A,[m n],fun,P1,P2,…)\\可以传递参数P1,P2,…给函数fun;[3] B=nlfilter(A,’indexed’)\\把图像作为索引色图像处理,double填补1,uint8补0。
而且fun可以是一个函数句柄或是一个联函数,返回类型由fun决定。
但是nlfilter 处理时可能需要很长时间,这时可是考虑使用快速处理函数colfilt。
用法类似,多一个参数bldck_tpye,表示块的移动方式,有distinc t和sliding两个取值,前者表示分离块操作,后者表示滑动块操作。
而且有[mblock nblock]表示图像块的大小。
分离块操作是将图像划分为大小相同的矩形区域,不同图像块在图像中无重叠排列,其顺序从左上角开始,不足的地方可以在右下角补0。
函数为blkproe,调用格式和nlfilter 类似。
2.7 几何畸形校正和图像配准用到函数imtransform。
3 MATLAB二维与三维图形绘制及动画3.1 基本绘图命令3.2 绘图选项常用的绘图选项:线形:- -. -- :颜色:r g b c m y k w点标记:+ o * . x s d h p > < ^ v坐标轴标注:axis([xmin xmax,ymin ymax]),axis auto/square/xy/ij/normal/off/on等用法。
图形窗口保持:hold on…hold off。
给坐标加边框:box on…box off。
图形缩放:zoom on…zoom out…zoom off。
快速绘图:fplot(‘fun’,[ xmin xmax,ymin ymax])。
打印:print[filename][-device][-options],其中device决定打印机的类型。
3.3 特殊坐标二维图形数,也可缺省,如fun1可以是plot等等。
Plot(z)绘制复数z的实部与虚部的图形。
3.4 二维图形处理图形标注:title,xlabel,ylabel,zlabel,text,gtext,legend。
图形窗口的分割:subplot(m,n,p)。
坐标系设定:axes,也可事后用gca(get current axes)获得当前坐标系的句柄。
通过get和set函数获取和设置坐标轴对象的有关属性值。
用法如:属性值=get(句柄,属性)或者set(句柄,属性1,属性值1,属性2,属性值2,…)。
3.5 三维图形的绘制说明:[1]改变网格属性:set(axes_handle,’XGrid’,’on’)grid函数显示网格。
[2]网格图中用到函数hidden on和hidden off来显示或者不显示被遮住部分。
[3]waterfall函数在x轴方向产生水流效果。
[4]meshgrid函数产生一个x-y平面的网格,如:[x,y]=meshgrid(-3:0.1:3,-2:0.1:2)。
[5]绘制球面的函数是sphere,如:sphere(n)或者[x,y,z]= sphere(n)。
也可以是函数cylinder,用法:cylinder(R,n)或者[x,y,z]= cylinder(R,n)。
n为面数,R为一函数。
[6]colorbar命令的作用是在三维曲面图旁边绘制一个可以指示亮度的彩色条。
[9]quiver函数在等值线图上画出方向或速度箭头:quiver(X,Y,DX,DY)。
求导:gradient。
[10]fill3用法类似于fill,对三维图形进行填充。
[11]clabel函数:添加等高线。
[12]bar和bar3参数说明:group同一行数据的方条靠一起,stack画在一个方条上。
[13]饼形图pie和pie3:参数explode指定某些片是否和整个图脱开,与x的维数相同的向量,其中非0的那一片脱离整体。
加上标注如{属性1,属性2,…}。
[14]火柴杆图和瀑布图:stem,stem3和waterfall。
3.6 三维图形的控制视角view:仰角(与z轴的夹角)el和方位角(与x轴的夹角)az,即view(az,el)。
控制光照light:参数有color,style(infinit和local)和position。
函数lightangle 添加光照,并指定其方位角和仰角,可是使用函数shading增强表面。
3.7 动画增量变化,需要用到对象的EraseMode属性。