数字图像处理技术的MATLAB实现案例

合集下载

用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】

数字图像处理及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数字图像处理实验报告

matlab数字图像处理实验报告

《数字图像处理实验报告》实验一图像的增强一.实验目的1.熟悉图像在MATLAB下的读写、输出;2.熟悉直方图;3.熟悉图像的线性指数等;4.熟悉图像的算术运算和几何变换。

二.实验仪器计算机、MATLAB软件三.实验原理图像增强是指根据特定的需要突出图像中的重要信息,同时减弱或去除不需要的信息。

从不同的途径获取的图像,通过进行适当的增强处理,可以将原本模糊不清甚至根本无法分辨的原始图像处理成清晰的富含大量有用信息的可使用图像。

其基本原理是:对一幅图像的灰度直方图,经过一定的变换之后,使其成为均匀或基本均匀的,即使得分布在每一个灰度等级上的像素个数.f=H等或基本相等。

此方法是典刑的图像空间域技术处理,但是由于灰度直方图只是近似的概率密度函数,因此,当用离散的灰度等级做变换时,很难得到完全平坦均匀的结果。

频率域增强技术频率域增强是首先将图像从空间与变换到频域,然后进行各种各样的处理,再将所得到的结果进行反变换,从而达到图像处理的目的。

常用的变换方法有傅里叶变换、DCT变换、沃尔什-哈达玛变换、小波变换等。

假定原图像为f(x,y),经傅立叶变换为F(u,v)。

频率域增强就是选择合适的滤波器H(u,v)对F(u,v)的频谱成分进行处理,然后经逆傅立叶变换得到增强的图像。

四.实验内容及步骤1.图像在MATLAB下的读写、输出;实验过程:>> I = imread('F:\image\');figure;imshow(I);title('Original Image');text(size(I,2),size(I,1)+15, ...'', ...'FontSize',7,'HorizontalAlignment','right');Warning: Image is too big to fit on screen; displaying at 25% > In imuitools\private\initSize at 86In imshow at 1962.给定函数的累积直方图。

(完整版)数字图像处理MATLAB程序【完整版】

(完整版)数字图像处理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技术的实际应用案例解析随着计算机技术的发展,Matlab作为一种高级技术语言,被广泛应用于多个领域。

无论是在科研领域还是工程实践中,Matlab都扮演着重要的角色。

本文将通过几个实际应用案例,探讨Matlab技术在不同领域的应用,以期给读者提供一些启示和参考。

一、图像处理领域图像处理是Matlab的一项重要应用领域。

利用Matlab提供的强大的图像处理工具箱,可以实现各种功能,例如图像增强、滤波、分割和识别等。

以下将介绍一个实际应用案例。

案例一:肿瘤图像分割肿瘤图像的分割对于医学诊断非常关键。

在某医院的研究中,研究人员利用Matlab进行了肿瘤图像的分割工作。

首先,他们先对肿瘤图像进行预处理,包括降噪和增强等操作。

然后,利用Matlab提供的图像分割算法,将肿瘤与周围组织分离出来。

最后,通过对分割后的图像进行计算,可以得到肿瘤的大小、形状等信息,为医生提供诊断依据。

二、信号处理领域信号处理是Matlab的另一个重要应用领域。

通过利用Matlab提供的信号处理工具箱,可以实现信号的滤波、谱分析、峰值检测等功能。

以下将介绍一个实际应用案例。

案例二:语音信号增强在通信领域,语音信号是一种常见的信号类型。

在某通信公司的项目中,研发团队利用Matlab对语音信号进行增强。

首先,他们通过Matlab提供的滤波器设计算法,设计了一种高效的降噪滤波器。

然后,他们利用该滤波器对采集到的语音信号进行滤波处理,去除噪声成分。

最后,通过对处理后的语音信号进行主观听感和客观评价,证明了该算法的有效性。

三、控制系统领域Matlab在控制系统领域的应用也非常广泛。

通过Matlab提供的控制系统工具箱,可以进行控制系统的建模、仿真和优化等操作。

以下将介绍一个实际应用案例。

案例三:智能交通信号优化在城市交通系统中,智能交通信号优化是一个重要的研究方向。

在某城市的交通管理局的项目中,研究人员利用Matlab进行了智能交通信号优化的仿真研究。

《数字图像处理及MATLAB实现》图像增强与平滑实验

《数字图像处理及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图像处理基础实例

matlab图像处理基础实例

matlab图像处理基础实例·边缘检测(edge)边缘检测时先要把其他格式图像转化为灰度图像>> f=imread('');>> a=rgb2gray(f);>> [g,t]=edge(a,'canny');>> imshow(g)·剪贴(imcrop)、subplot等imfinfo colormap subimageimadd imsubtract immultiply imdivide imresize imrotate(旋转)>> a=imread('');>> b=imcrop(a,[75 68 130 112]);% I2 = IMCROP(I,RECT)% RECT is a 4-element vector with the form [XMIN YMIN WIDTH HEIGHT]; % subplot(121)⼀⾏两列的显⽰,当前显⽰第⼀个图⽚>> subplot(121);imshow(a);>> subplot(122);imshow(b);·roipoly选择图像中的多边形区域>> a=imread('');>> c=[200 250 278 248 199 172];>> r=[21 21 75 121 121 75];>> b=roipoly(a,c,r);>> subplot(121);imshow(a);>> subplot(122);imshow(b);·roicolor按灰度值选择的区域>> a=imread('');>> i=rgb2gray(a);>> b=roicolor(i,128,255);>> subplot(121);imshow(a);>> subplot(122);imshow(b);·转化指定的多边形区域为⼆值掩膜poly2mask>> x=[63 186 54 190 63];>> y=[60 60 209 204 60];>> b=poly2mask(x,y,256,256); >> imshow(b);>> holdCurrent plot held>> plot(x,y,'b','LineWidth',2)·roifilt2区域滤波a=imread('');i=rgb2gray(a);c=[200 250 278 248 199 172];r=[21 21 75 121 121 75];b=roipoly(i,c,r);h=fspecial('unsharp');j=roifilt2(h,i,b);subplot(121),imshow(i);subplot(122),imshow(j);·roifill区域填充>> a=imread('');>> i=rgb2gray(a);>> c=[200 250 278 248 199 172]; >> r=[21 21 75 121 121 75]; >> j=roifill(i,c,r); >> subplot(211);imshow(i);>> subplot(212);imshow(j);·FFT变换f=zeros(100,100);f(20:70,40:60)=1;imshow(f);F=fft2(f);F2=log(abs(F));imshow(F2),colorbar·补零操作和改变图像的显⽰象限f=zeros(100,100);f(20:70,40:60)=1;subplot(121);imshow(f);F=fft2(f,256,256);F2=fftshift(F);subplot(122);imshow(log(abs(F2)))·离散余弦变换(dct)>> a=imread('');>> i=rgb2gray(a);>> j=dct2(i);>> subplot(131);imshow(log(abs(j))),colorbar >> j(abs(j)<10)=0;>> k=idct2(j);>> subplot(132);imshow(i);>> subplot(133);imshow(k,[0,255]);info=imfinfo('')%显⽰图像信息·edge提取图像的边缘canny prewitt sobelradon函数⽤来计算指定⽅向上图像矩阵的投影>> a=imread('');>> i=rgb2gray(a);>> b=edge(i);>> theta=0:179;>> [r,xp]=radon(b,theta);>> figure,imagesc(theta,xp,r);colormap(hot); >> xlabel('\theta(degrees)'); >> ylabel('x\prime');>> title('r_{\theta}(x\prime)');>> colorbar·filter2均值滤波>> a=imread('');>> i=rgb2gray(a);>> 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 >> figure,imshow(k1)>> figure,imshow(k2)>> figure,imshow(k3)wiener2滤波eg:k=wiener(I,[3,3]))medfilt2中值滤波同上deconvwnr维纳滤波马赫带效应(同等差⾊带条)·减采样>> a=imread('');>> b=rgb2gray(a);>> [wid,hei]=size(b);>> quarting=zeros(wid/2+1,hei/2+1); >> i1=1;j1=1;>> for i=1:2:widfor j=1:2:heiquarting(i1,j1)=b(i,j);j1=j1+1;endi1=i1+1;j1=1;end>> figure>> imshow(uint8(quarting))>> title('4倍减采样')>> quarting=zeros(wid/4+1,hei/4+1); i1=1;j1=1;for i=1:4:widfor j=1:4:heiquarting(i1,j1)=b(i,j);j1=j1+1;endi1=i1+1;j1=1;end>> figure,imshow(uint8(quarting)); title('16倍减采样')结论:在采⽤不同的减采样过程中,其图像的清晰度和尺⼨均发⽣了变化灰度级转化>> a=imread('');>> b=rgb2gray(a);>> figure;imshow(b)>> [wid,hei]=size(b);>> img2=zeros(wid,hei);>> for i=1:widfor j=1:heiimg2(i,j)=floor(b(i,j)/128);endend>> figure;imshow(uint8(img2),[0,2]) %2级灰度图像图像的基本运算>> i=imread('');>> figure;subplot(231);imshow(i);>> title('原图');>> j=imadjust(i,[.3;.6],[.1 .9]);%Adjust image intensity values or colormap图像灰度值或colormap调整% J = IMADJUST(I,[LOW_IN; HIGH_IN],[LOW_OUT; HIGH_OUT])>> subplot(232);imshow(j);title('线性扩展');>> i1=double(i);i2=i1/255;c=2;k=c*log(1+i2);>> subplot(233);imshow(k);>> title('⾮线性扩展');>> m=255-i;>> subplot(234);imshow(m)>> title('灰度倒置')>> n1=im2bw(i,.4);n2=im2bw(i,.7);>> subplot(235);imshow(n1);title('⼆值化阈值')>> subplot(236);imshow(n2);title('⼆值化阈值')图像的代数运算加。

数字图像处理ch01(MATLAB)-课件

数字图像处理ch01(MATLAB)-课件

2024/10/12
第一章 绪论
17
2024/10/12
第一章 绪论
18
2024/10/12
第一章 绪论
19
2024/10/12
第一章 绪论
20
<2>几何处理
放大、缩小、旋转,配准,几何校正,面积、周长计算。
请计算台湾的陆地面积
2024/10/12
第一章 绪论
21
<3>图象复原
由图象的退化模型,求出原始图象
图像处理是指按照一定的目标,用一系列的操 作来“改造”图像的方法.
2024/10/12
第一章 绪论
7
➢图象处理技术的分类(从方法上进行分类)[2]
1.模拟图象处理(光学图像处理等)
用光学、电子等方法对模拟信号组成的图像,用光学器 件、电子器件进行光学变换等处理得到所需结果(哈哈 镜、望远镜,放大镜,电视等).
2024/10/12
第一章 绪论
22
<4>图象重建[3]
[3]此图像来自罗立民,脑成像,
2024/10/12
第一章 绪论
23
/zhlshb/ct/lx.htm
2024/10/12
第一章 绪论
图形用户界面,动画,网页制作等
2024/10/12象处理的基本概念,和基 本问题,以及一些典型的应用。
2024/10/12
第一章 绪论
33
提问
摄像头(机),扫描仪,CT成像装置,其他图象成像装置
2)图象的存储
各种图象存储压缩格式(JPEG,MPEG等),海量图象数据库技术
3)图象的传输
内部传输(DirectMemoryAccess),外部传输(主要是网络)

数字图像处理实验matlab4

数字图像处理实验matlab4

9,对图3实施正交变换编码和解码(采用离散傅立叶变换)。

建议将图3分成4*4的4个子图象。

思路:先将图3数据读入模块,显示图像,将图分块进行DFT 变换,显示图像,,在进行反变换恢复原数据,在进行哈夫曼编码编码,后解码。

原理:傅立叶变换傅立叶变换是数字图像处理中应用最广的一种变换,其中图像增强、图像复原和图像分析与描述等,每一类处理方法都要用到图像变换,尤其是图像的傅立 叶变换。

离散傅立叶(Fourier )变换的定义:二维离散傅立叶变换(DFT )为:逆变换为:式中,在DFT 变换对中, 称为离散信号 的频谱,而 称为幅度谱,为相位角,功率谱为频谱的平方,它们之间的关系为:图像的傅立叶变换有快速算法。

下面给出具体的Huffman 编码算法。

(1)首先统计出每个符号出现的频率,例如S0到S7的出现频率分别为:0.25,0.19,0.08,0.06,0.21,0.02,0.03,0.16(2)从左到右把上述频率按从大到小的顺序排列。

∑∑-=-=+-=1010)(2exp ),(1),(M x N y N vy M ux j y x f MN v u F π∑∑-=-=+=101)(2exp ),(1),(M u N v N vy M ux j v u F MN y x f π}1,,1,0{,-∈M x u }1,,1,0{,-∈N y v ),(v u F ),(y x f ),(v u F ),(v u ϕ),(),()],(exp[),(),(v u jI v u R v u j v u F v u F +==ϕ(3)将最小的两个数相加的值表上*号,其余的数据不变,然后将得到的数据排序(4)重复(3),直到只有两个数据。

(5) 从最后一列概率编码,从而得到最终编码。

具体过程如下图所示:概率压缩过程:初始信源信源的消减步骤 符号概率 1 2 3 4 5 6 S00.25 0.25 0.25 0.25 0.35* 0.4* 0.6* 0.21 0.21 0.21 0.25 0.35 0.4 0.19 0.19 0.19 0.21 0.25 0.16 0.16 0.19* 0.19 0.08 0.11* 0.16 0.06 0.08 0.05*S40.21 S10.19 S70.16 S20.08 S30.06 S60.03 S5 0.02表 3-1 哈夫曼概率压缩过程编码过程: 初始信源 对消减信源的赋值符号 概率 编码 1 2 3 4 5 6 S00.25 01 0.25 01 0.25 01 0.25 01 0.35*00 0.4* 1 0.6* 0 0.21 10 0.21 10 0.21 10 0.25 01 0.35 00 0.4 1 0.19 11 0.19 11 0.19 11 0.21 10 0.25 01 0.16 001 0.16 001 0.19*000 0.19 11 0.08 0001 0.11* 0000 0.16 0001 0.06 00000 0.08 0001 0.05* 00001S40.21 10 S10.19 11 S70.16 001 S20.08 0001 S30.06 00000 S60.03 S5 0.02表 3-2 哈夫曼算法编码过程算法流程此处并没有采用概率排序, 而是采用对灰度像素个数 读入图像 初始化 统计每种灰度数灰度数排序排序,这是因为计算概率无 疑增大了计算量,因此用灰 度级的像素个数替代图3-1 哈夫曼算法程序流程图程序:clc;clear;close all ;A=[3 3 4 4 4 4 5 24 1 1 2 2 15 44 3 4 4 4 45 24 5 2 5 0 3 1 21 5 0 3 3 5 6 42 3 1 1 2 2 1 20 3 6 5 5 7 2 03 1 2 2 1 5 0 6];subplot(2,2,1),imshow(A);title('原图');I=double(A);P=A(1:4,1:4);K=fft(P);P1=A(1:4,5:8);K1=fft(P1);P2=A(5:8,1:4);K2=fft(P2);P3=A(5:8,5:8);K3=fft(P3);for i=1:4for j=1:4H(i,j)=K(i,j);endendfor i=1:4for j=5:8H(i,j)=K1(i,j-4);endendfor i=5:8 按哈夫曼算法编码 将灰度编码表及原图的编码写入txtfor j=1:4H(i,j)=K2(i-4,j);endendfor i=5:8for j=5:8H(i,j)=K3(i-4,j-4);endendsubplot(2,2,2),imshow(H);title('DFT变换后的频域图像');I=H(1:4,1:4);M=ifft(I);I1=H(1:4,5:8);M1=ifft(I1);I2=H(5:8,1:4);M2=ifft(I2);I3=H(5:8,5:8);M3=ifft(I3);for i=1:4for j=1:4A1(i,j)=M(i,j);endendfor i=1:4for j=5:8A1(i,j)=M1(i,j-4);endendfor i=5:8for j=1:4A1(i,j)=M2(i-4,j);endendfor i=5:8for j=5:8A1(i,j)=M3(i-4,j-4);endendsubplot(2,2,3),imshow(A1);title('复原图像');%编码%读入图像,定义结构体,便于存储I=A;pix(8)=struct('huidu',0.0,...'number',0.0,...'bianma','');[m n l]=size(I);fid=fopen('E:\学习\数字图像处理\huffman.txt','w');%huffman.txt是灰度级及相应的编码表fid1=fopen('E:\学习\数字图像处理\huff_compara.txt','w');%huff_compara.txt是编码表huf_bac=cell(1,l);for t=1:l %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %初始化结构数组for i=1:8pix(i).number=1;pix(i).huidu=i-1;pix(i).bianma='';end%统计每种灰度像素的个数记录在pix数组中for i=1:mfor j=1:nk=I(i,j,t)+1;pix(k).number=1+pix(k).number;endend%按灰度像素个数从大到小排序for i=1:7for j=i+1:8if pix(i).number<pix(j).numbertemp=pix(j);pix(j)=pix(i);pix(i)=temp;endendendfor i=8:-1:1if pix(i).number ~=0break;endendnum=i;count(t)=i;%记录每层灰度级%定义用于求解的矩阵clear huffmanhuffman(num,num)=struct('huidu',0.0,...'number',0.0,...'bianma','');huffman(num,:)=pix(1:num);%矩阵赋值for i=num-1:-1:1p=1;%算出队列中数量最少的两种灰度的像素个数的和sum=huffman(i+1,i+1).number+huffman(i+1,i).number;for j=1:i%如果当前要复制的结构体的像素个数大于sum就直接复制if huffman(i+1,p).number>sumhuffman(i,j)=huffman(i+1,p);p=p+1;else%如果当前要复制的结构体的像素个数小于或等于sum就插入和的结构体%灰度值为-1标志这个结构体的number是两种灰度像素的和huffman(i,j).huidu=-1;huffman(i,j).number=sum;sum=0;huffman(i,j+1:i)=huffman(i+1,j:i-1);break;endendend%开始给每个灰度值编码for i=1:num-1obj=0;for j=1:iif huffman(i,j).huidu==-1obj=j;break;elsehuffman(i+1,j).bianma=huffman(i,j).bianma;endendif huffman(i+1,i+1).number>huffman(i+1,i).number%说明:大概率的编0,小概率的编1,概率相等的,标号大的为1,标号小的为0huffman(i+1,i+1).bianma=[huffman(i,obj).bianma '0']; huffman(i+1,i).bianma=[huffman(i,obj).bianma '1'];elsehuffman(i+1,i+1).bianma=[huffman(i,obj).bianma '1']; huffman(i+1,i).bianma=[huffman(i,obj).bianma '0'];endfor j=obj+1:ihuffman(i+1,j-1).bianma=huffman(i,j).bianma;endendfor k=1:count(t)huf_bac(t,k)={huffman(num,k)}; %保存endend%写出灰度编码表for t=1:lfor b=1:count(t)fprintf(fid,'%d',huf_bac{t,b}.huidu);fwrite(fid,' ');fprintf(fid,'%s',huf_bac{t,b}.bianma);fwrite(fid,' ');endfwrite(fid,'%');end%解码%按原图像数据,写出相应的编码,也就是将原数据用哈夫曼编码替代for t=1:lfor i=1:mfor j=1:nfor b=1:count(t)if I(i,j,t)==huf_bac{t,b}.huiduM(i,j,t)=huf_bac{t,b}.huidu;%将灰度级存入解码的矩阵 fprintf(fid1,'%s',huf_bac{t,b}.bianma);fwrite(fid1,' ');%用空格将每个灰度编码隔开break;endendendfwrite(fid1,',');%用空格将每行隔开endfwrite(fid1,'%');%用%将每层灰度级代码隔开endfclose(fid);fclose(fid1);M=uint8(M);save('M')%存储解码矩阵Msubplot(2,2,4),imshow(A);title('解码后图');原图DFT变换后的频域图像复原图像解码后图对应编码:0 00011 0012 103 0114 115 0106 000007 00001矩阵的编码11 001 001 10 10 001 010 11 ,11 011 11 11 11 11 010 10 ,11 010 10 010 0001 011 001 10 ,001 010 0001 011 011 010 00000 11 ,10 011 001 001 10 10 001 10 ,0001 011 00000 010 010 00001 10 0001 ,011 001 10 10 001 010 0001 00000 ,解码矩阵:M =3 34 4 4 45 24 1 1 2 2 15 44 3 4 4 4 45 24 5 2 5 0 3 1 21 5 0 3 3 5 6 42 3 1 1 2 2 1 2 0 3 6 5 5 7 2 0 3 1 2 2 1 5 0 6。

MATLAB图像处理技术与实例展示

MATLAB图像处理技术与实例展示

MATLAB图像处理技术与实例展示引言图像处理是一门涉及数字图像处理和计算机视觉的重要学科,它在日常生活中的应用范围非常广泛。

MATLAB作为一种强大的数值计算和可视化工具,提供了许多图像处理的函数和工具箱,能够帮助实现各种图像处理任务。

本文将介绍一些常用的MATLAB图像处理技术,并提供相应的实例展示。

一、图像加噪与去噪图像加噪是指在原始图像上添加一些随机扰动,使原始图像的细节模糊或失真。

在实际应用中,图像往往会受到各种因素的影响,如传感器噪声、压缩噪声等。

为了恢复原始图像的质量,需要进行去噪处理。

MATLAB提供了许多图像加噪和去噪的函数和工具箱。

例如,使用imnoise函数可以在图像上添加高斯噪声、椒盐噪声等。

而使用imnlmfilt函数可以实现非局部均值去噪算法,通过对邻域像素的均值进行补偿,可以有效降低噪声。

实例展示:下面以一个简单的实例展示图像去噪的过程。

首先,我们使用imnoise函数在一张原始图像上添加高斯噪声:```MATLABI = imread('original_image.jpg');noisy_image = imnoise(I, 'gaussian', 0, 0.02);```然后,我们使用imnlmfilt函数对添加噪声的图像进行去噪处理:```MATLABdenoised_image = imnlmfilt(noisy_image);```最后,我们可以将原始图像、添加噪声的图像和去噪后的图像进行对比,以评估去噪效果。

二、图像增强图像增强是指通过一系列的处理方法,改善图像的质量和视觉效果,使图像更加清晰、鲜艳。

图像增强的方法有很多,其中包括直方图均衡化、对比度增强、锐化等。

在MATLAB中,可以使用histeq函数实现直方图均衡化,通过重新分布图像灰度级的分布,增强图像的对比度和细节。

而使用imadjust函数可以进行对比度增强,通过调整图像对比度和亮度来增强图像的视觉效果。

图像处理实例(含Matlab代码)

图像处理实例(含Matlab代码)

1. 图像一的细胞计数
将该图形进行一系列处理,计算得到途中清晰可见细胞的个数。 转为灰度图,二值化,中值滤波,图像取反,计数,再次中值滤 波,再次计数
1. 图像一的细胞计数
clear;close all; Image = imread('1.jpg'); figure,imshow(Image),title('原图'); Image=rgb2gray(Image); figure,imshow(Image),title('灰度图'); Theshold = graythresh(Image); Image_BW = im2bw(Image,Theshold); Reverse_Image_BW22=~Image_BW; figure,imshow(Image_BW),title('二值化图像'); Image_BW_medfilt= medfilt2(Image_BW,[3 3]); figure,imshow(Image_BW_medfilt),title('中值滤波后的二值化图像'); Reverse_Image_BW = ~Image_BW_medfilt; figure,imshow(Reverse_Image_BW),title('图象取反'); Image_BW_medfilt2= medfilt2(Reverse_Image_BW,[20 20]); figure,imshow(Image_BW_medfilt2),title('第二次中值滤波的二值化图像'); [Label, Number]=bwlabel(Image_BW_medfilt,8);Number [Label, Number]=bwlabel(Image_BW_medfilt2,8);Number

数字图像处理matlab代码

数字图像处理matlab代码

一、编写程序完成不同滤波器的图像频域降噪和边缘增强的算法并进行比较,得出结论。

1、不同滤波器的频域降噪1.1 理想低通滤波器(ILPF)和二阶巴特沃斯低通滤波器(BLPF)clc;clear all;close all;I1=imread('me.jpg');I1=rgb2gray(I1);subplot(2,2,1),imshow(I1),title('原始图像');I2=imnoise(I1,'salt & pepper');subplot(2,2,2),imshow(I2),title('噪声图像');F=double(I2);g = fft2(F);g = fftshift(g);[M, N]=size(g);result1=zeros(M,N);result2=zeros(M,N);nn = 2;d0 =50;m = fix(M/2);n = fix(N/2);for i = 1:Mfor j = 2:Nd = sqrt((i-m)^2+(j-n)^2);h = 1/(1+0.414*(d/d0)^(2*nn));result1(i,j) = h*g(i,j);if(g(i,j)< 50)result2(i,j) = 0;elseresult2(i,j) =g(i,j);endendendresult1 = ifftshift(result1);result2 = ifftshift(result2);J2 = ifft2(result1);J3 = uint8(real(J2));subplot(2, 2, 3),imshow(J3,[]),title('巴特沃斯低通滤波结果'); J4 = ifft2(result2);J5 = uint8(real(J4));subplot(2, 2, 4),imshow(J5,[]),title('理想低通滤波结果');实验结果:原始图像噪声图像巴特沃斯低通滤波结果理想低通滤波结果1.2 指数型低通滤波器(ELPF)clc;clear all;close all;I1=imread('me.jpg');I1=rgb2gray(I1);I2=im2double(I1);I3=imnoise(I2,'gaussian',0.01);I4=imnoise(I3,'salt & pepper',0.01);subplot(1,3,1),imshow(I2), title('原始图像'); %显示原始图像subplot(1,3,2),imshow(I4),title('加入混合躁声后图像 ');s=fftshift(fft2(I4));%将灰度图像的二维不连续Fourier 变换的零频率成分移到频谱的中心[M,N]=size(s); %分别返回s的行数到M中,列数到N中n1=floor(M/2); %对M/2进行取整n2=floor(N/2); %对N/2进行取整d0=40;for i=1:Mfor j=1:Nd=sqrt((i-n1)^2+(j-n2)^2); %点(i,j)到傅立叶变换中心的距离 h=exp(log(1/sqrt(2))*(d/d0)^2);s(i,j)=h*s(i,j); %ILPF滤波后的频域表示endends=ifftshift(s); %对s进行反FFT移动s=im2uint8(real(ifft2(s)));subplot(1,3,3),imshow(s),title('ELPF滤波后的图像(d=40)');运行结果:1.3 梯形低通滤波器(TLPF)clc;clear all;close all;I1=imread('me.jpg');I1=rgb2gray(I1); %读取图像I2=im2double(I1);I3=imnoise(I2,'gaussian',0.01);I4=imnoise(I3,'salt & pepper',0.01);subplot(1,3,1),imshow(I2),title('原始图像'); %显示原始图像subplot(1,3,2),imshow(I4),title('加噪后的图像');s=fftshift(fft2(I4));%将灰度图像的二维不连续Fourier 变换的零频率成分移到频谱的中心[M,N]=size(s); %分别返回s的行数到M中,列数到N中n1=floor(M/2); %对M/2进行取整n2=floor(N/2); %对N/2进行取整d0=10;d1=160;for i=1:Mfor j=1:Nd=sqrt((i-n1)^2+(j-n2)^2); %点(i,j)到傅立叶变换中心的距离 if (d<=d0)h=1;else if (d0<=d1)h=(d-d1)/(d0-d1);else h=0;endends(i,j)=h*s(i,j); %ILPF滤波后的频域表示endends=ifftshift(s); %对s进行反FFT移动s=im2uint8(real(ifft2(s))); %对s进行二维反离散的Fourier变换后,取复数的实部转化为无符号8位整数subplot(1,3,3),imshow(s),title('TLPF滤波后的图像');运行结果:1.4 高斯低通滤波器(GLPF)clear all;clc;close all;I1=imread('me.jpg');I1=rgb2gray(I1);I2=im2double(I1);I3=imnoise(I2,'gaussian',0.01);I4=imnoise(I3,'salt & pepper',0.01);subplot(1,3,1),imshow(I2),title('原始图像');subplot(1,3,2),imshow(I4),title('加噪后的图像');s=fftshift(fft2(I4));%将灰度图像的二维不连续Fourier 变换的零频率成分移到频谱的中心[M,N]=size(s); %分别返回s的行数到M中,列数到N中n1=floor(M/2); %对M/2进行取整n2=floor(N/2); %对N/2进行取整d0=40;for i=1:Mfor j=1:Nd=sqrt((i-n1)^2+(j-n2)^2); %点(i,j)到傅立叶变换中心的距离 h=1*exp(-1/2*(d^2/d0^2)); %GLPF滤波函数s(i,j)=h*s(i,j); %ILPF滤波后的频域表示endends=ifftshift(s); %对s进行反FFT移动s=im2uint8(real(ifft2(s))); %对s进行二维反离散的Fourier变换后,取复数的实部转化为无符号8位整数subplot(1,3,3),imshow(s),title('GLPF滤波后的图像(d=40)');运行结果:1.5 维纳滤波器clc;clear all;close all;I=imread('me.jpg'); %读取图像I=rgb2gray(I);I1=im2double(I);I2=imnoise(I1,'gaussian',0.01);I3=imnoise(I2,'salt & pepper',0.01);I4=wiener2(I3);subplot(1,3,1),imshow(I1),title('原始图像'); %显示原始图像subplot(1,3,2),imshow(I3),title('加入混合躁声后图像');I4=wiener2(I3);subplot(1,3,3),imshow(I4),title('wiener滤波后的图像');运行结果:结论:理想低通滤波器,虽然有陡峭的截止频率,却不能产生良好的效果,图像由于高频分量的滤除而变得模糊,同时还产生振铃效应。

数字图像处理实验(MATLAB版)

数字图像处理实验(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实验报告

河北工业大学数字图像处理之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技术图像去抖动实例

MATLAB技术图像去抖动实例引言:在数字图像处理领域,图像去抖动是一项重要且具有挑战性的任务。

抖动是指由于拍摄设备的震动或图像传感器噪声等因素导致图像出现模糊或不稳定的现象。

为了提高图像的质量和清晰度,人们开发了各种图像去抖动算法。

而MATLAB作为一种功能强大的图像处理工具,提供了丰富的函数和工具箱,方便我们进行图像去抖动的实现。

本文将通过一个实例来演示如何使用MATLAB技术实现图像去抖动。

一、图像去抖动的原理在开始之前,让我们简要了解一下图像去抖动的原理。

抖动是由于图像采集过程中的噪声或振动造成的,因此图像去抖动的目标就是通过抵消或减少这些噪声或振动的影响,使图像恢复到原本的清晰和稳定。

常用的图像去抖动方法包括平均法、滤波法、运动估计法等。

本文将以滤波法为例进行讲解。

二、图像去抖动的实现步骤1. 导入图像首先,我们需要导入待处理的图像。

在MATLAB中,可以使用'imread'函数来导入图像。

例如:```matlabimage = imread('image.jpg');```2. 图像去抖动预处理在进行滤波之前,我们需要对图像进行一些预处理操作,以增强去抖动效果。

常用的预处理方法包括调整图像亮度、对比度、锐化等。

在MATLAB中,可以使用'imadjust'函数来完成图像的调整。

例如:```matlabimage_adjusted = imadjust(image);```3. 滤波处理接下来,我们使用滤波器对图像进行去抖动处理。

在MATLAB中,有很多滤波器可供选择,例如中值滤波、均值滤波等。

这里我们以中值滤波为例。

代码如下:```matlabimage_filtered = medfilt2(image_adjusted);```4. 结果显示最后,我们将处理后的图像显示出来,以便查看去抖动效果。

在MATLAB中,可以使用'imshow'函数来显示图像。

数字图像处理第二版MatLab代码大全

数字图像处理第二版MatLab代码大全

4.3
空域滤波增强
Matlab 实现的邻域平均法抑制噪声的程序: I=imread('eight.tif'); J=imnoise(I,'salt & pepper', 0.02); subplot(231),imshow(I);title('原图像'); subplot(232),imshow(J);title('添加椒盐噪声图像') k1=filter2(fspecial('average',3),J); %进行 3×3 模板平滑滤波 k2=filter2(fspecial('average',5),J); %进行 5×5 模板平滑滤波 k3=filter2(fspecial('average',7),J); %进行 7×7 模板平滑滤波 k4=filter2(fspecial('average',9),J); %进行 9×9 模板平滑滤波 subplot(233),imshow(uint8(k1));title('3×3 模板平滑滤波'); subplot(234),imshow(uint8(k2));title('5×5 模板平滑滤波'); subplot(235),imshow(uint8(k3));title('7×7 模板平滑滤波'); subplot(236),imshow(uint8(k4));title('9×9 模板平滑滤波') 例 4.10:使用中值滤波降低图像噪声
9
xlabel(‘\theta (degrees)’); ylabel(‘X\prime’); set(gca,’Xtick’,0:20:180); colormap(hot); colorbar;

Matlab技术创新算法与应用案例

Matlab技术创新算法与应用案例

Matlab技术创新算法与应用案例引言近年来,计算机科学与技术领域的快速发展使得各种创新的算法层出不穷。

Matlab作为一种重要的科学计算软件,因其强大的数据分析和可视化能力,成为了许多科研工作者和工程师的首选。

本文将介绍几种基于Matlab的技术创新算法,并探讨其在实际应用中的案例。

一、图像处理与分析1. 图像去噪算法在数字图像处理领域,去除图像中的噪声是一项非常重要的任务。

传统的去噪算法往往需要手动选择参数,容易出现过度去噪或保留噪声的情况。

近年来,一种基于Matlab的自适应图像去噪算法备受关注。

该算法通过分析图像的统计特征,自动确定合适的去噪参数,并可以适用于不同类型和强度的噪声。

在实际应用中,该算法在医学图像处理和无损检测等领域中取得了显著的成果。

2. 图像识别算法图像识别是计算机视觉领域的核心问题之一。

通过Matlab提供的机器学习工具箱,研究人员可以利用各种分类算法进行图像识别和分类。

例如,使用支持向量机(SVM)算法对车牌进行识别,可以在不同环境和光照条件下准确识别车牌字符。

此外,还可以利用卷积神经网络(CNN)算法进行图像分类,例如人脸识别、物体检测等。

这些算法在智能安防、自动驾驶等领域中有着广泛的应用。

二、信号处理与模型优化1. 盲源分离算法在许多实际场景中,我们可能需要从混合信号中分离出各个独立的源信号。

盲源分离算法通过对混合信号进行数学建模和统计分析,可以估计出源信号,并对它们进行分离。

Matlab提供了多种盲源分离算法的实现,如独立分量分析(ICA)、非负矩阵分解(NMF)等。

这些算法在音频处理、语音识别和脑电图分析等领域中得到了广泛的应用。

2. 线性规划与整数规划在工程和管理决策中,线性规划和整数规划是两种常见的优化问题。

Matlab提供了专门的优化工具箱,可以帮助用户解决这些问题。

通过定义目标函数和约束条件,用户可以使用Matlab中的线性规划算法求解最优解。

例如,在物流管理中,可以利用线性规划算法优化运输路径,降低运输成本。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

MATLAB材料科学图片处理案例I = imread('bag.png');%读入系统自带的图片bag.pngfigure, imshow(I);%创建图形窗口,在窗口中显示读入的图像E = entropyfilt(I);Eim = mat2gray(E);imshow(Eim);%BW1 = im2bw(Eim, .8);imshow(BW1);%figure, imshow(I);%创建新图形窗口BWao = bwareaopen(BW1,2000);%这里可以看到BWao是BW+area+open的缩写imshow(BWao); %nhood = true(9);closeBWao = imclose(BWao,nhood);%对前面的开启运算得到的图像再进行闭合运算imshow(closeBWao)%roughMask = imfill(closeBWao,'holes');%填充孔洞imshow(roughMask);figure, imshow(I);I2 = I;I2(roughMask) = 0;%图像透过遮罩,遮罩图像黑色部分可以透过去,白色部分透不过imshow(I2);E2 = entropyfilt(I2);E2im = mat2gray(E2);% 将矩阵转换成灰度图像imshow(E2im);BW2 = im2bw(E2im,graythresh(E2im));imshow(BW2)figure, imshow(I);mask2 = bwareaopen(BW2,1000);imshow(mask2);texture1 = I;%将图像I复制为texture1texture1(~mask2) = 0;%这里有个运算符号~,逻辑非,作用是将mask2黑白颠倒texture2 = I;%将图像I复制为texture2texture2(mask2) = 0;%在MA TLAB中,~A代表“取逻辑非”的意思。

但是实际上其意义要比通常的取逻辑非稍微广泛一点。

%假如A = 1,那么~A = 0;%假如A = [0 1] ,那么~A = [1 0];%假如A = [0 0 0],那么~A= [1 1 1];%但是假如A= [3 4 5],那么~A = [0,0,0]。

可见~A有那么一点“广义的逻辑非”的意思。

imshow(texture1);figure, imshow(texture2);boundary = bwperim(mask2);%生成边界线%BWPERIM函数能够起到探测灰度图象内部物体周边缘的作用,返回一幅相同尺寸的二值图象。

segmentResults = I;segmentResults(boundary) = 255;%设置边界线颜色为白色imshow(segmentResults);%S = stdfilt(I,nhood);imshow(mat2gray(S));R = rangefilt(I,ones(5));% rangefilt 函数句法为J = rangefilt(I, NHOOD),对输入图像I做距离滤波,由NHOOD指定领域imshow(R);MATLAB医学图像处理load mri% 装入文件到MA TLAB的工作空间,其命令形式为load filenameD = squeeze(D);% squeeze函数去除掉维数为1的那个维度,这里由128×128×1×27变为128×128×27image_num = 8;%对image_num赋值image(D(:,:,image_num)) %第8张图片,图片尺寸为128×128axis image %加上坐标colormap(map) %色彩索引图为mapx = xlim;%函数形式为xlim, ylim, zlim,设置或者查询坐标范围y = ylim;contourslice(D,[],[],image_num)%画第8张图的等高线图axis ijxlim(x)%设定x坐标范围和上一张图一致ylim(y)%设定y坐标范围和上一张图一致daspect([1,1,1])%设置或者查询坐标轴的外观比例colormap('default')%色彩索引图为默认phandles = contourslice(D,[],[],[1,12,19,27],8); 画第1,12,19,27张图的等高线图view(3); axis tightset(phandles,'LineWidth',2)%设置线宽Ds = smooth3(D);%平滑三维数据hiso = patch(isosurface(Ds,5),...%生成面片三维图像'FaceColor',[1,.75,.65],...%这里使用...进行程序换行连续'EdgeColor','none');hcap = patch(isocaps(D,5),...'FaceColor','interp',...'EdgeColor','none');colormap(map)colormap(map)view(45,30)axis tight %设置坐标轴范围为数据范围daspect([1,1,.4])%设置坐标轴显示比例,这里Z轴比例为1:0.4lightangle(45,30); %设置光线入射角度set(gcf,'Renderer','zbuffer'); lighting phong%得到当前句柄,设置光照类型isonormals(Ds,hiso)% 句法为n = isonormals(V,p),计算句柄p包含面片向量的法线set(hcap,'AmbientStrength',.6)%设置环境直接反射强度set(hiso,'SpecularColorReflectance',0,'SpecularExponent',50)%设置对象镜面反射光的颜色程度和对象镜面反射高光的尺寸使用matlab寻找地震源% Import Data Filesloc = importdata('loctim.txt');bound = importdata('border.xy');lat = loc(:,1); %纬度lon = loc(:,2); %经度ele = loc(:,3); %拔高度tim = loc(:,4); %地震运动到达时间% Plot Switzerlandplot(bound(:,1),bound(:,2))hold on;% Plot Stationsplot(lon,lat,'*')time = distance/velocityt-t0 = sqrt((x-x0)^2 + (y-y0)^2)/v% 初始猜想lat0 = 46.9; lon0 = 9;% 使用红色圆圈标出初始猜想震中plot(lon0,lat0,'ro')% 使用绿色圆圈标记地震台Gplot(lon(6),lat(6),'go')% 将度数转换成公里的参数latkm = 111.19; lonkm = 75.82; vp = 5.8;% 初始计算t0 = sqrt( ((lon(6)-lon0)*lonkm).^2 + ((lat(6)-lat0)*latkm).^2 )/vp%初始猜想存储到数组mm(1) = t0; m(2)= lon0; m(3) = lat0;%循环遍历所有地震台for i=1:length(lat)diffx = (lon(i)-m(2))*lonkm;diffy = (lat(i)-m(3))*latkm;D0(i) = sqrt(diffx^2+diffy^2); % 距离d(i) = tim(i) - D0(i)/vp - m(1); % 时间% 存储结果到矩阵GG(i,3) = -(diffy/D0(i))/vp; G(i,2) = -(diffx/D0(i))/vp; G(i,1) = 1; endG*m = ddm = inv(G'*G)*G'*d'% 选择迭代次数for i = 1:6for i=1:length(lat)diffx = (lon(i)-m(2))*lonkm;diffy = (lat(i)-m(3))*latkm;D0(i) = sqrt(diffx^2+diffy^2);d(i) = tim(i) - D0(i)/vp - m(1);G(i,3) = -(diffy/D0(i))/vp; G(i,2) = -(diffx/D0(i))/vp; G(i,1) = 1;end% 最小二乘解dm = inv(G'*G)*G'*d'% 将dm变为度数,因为坐标系中用度数dm(2) = dm(2)/lonkm;dm(3) = dm(3)/latkm;% Update 'm' Vectorm = m+dm'% 使用蓝色圆圈标识每次迭代结果plot(m(2),m(3),'o')end%使用黑色菱形框线标识最终结果plot(m(2),m(3),'kd')dm =1.0e-006 *-0.02620.41400.9619m =40.2578 7.5580 47.2169。

相关文档
最新文档