首页 基于MATLAB的光学图像处理

基于MATLAB的光学图像处理

举报
开通vip

基于MATLAB的光学图像处理 基于 MATLAB 的光学图像处理 学生:张雨辰 学号:1011100139 专业:光信息科学与技术 2013年 1月 2日 摘要: 现代社会随着计算机科技的飞速发展,数码技术的日益提高,对图像进行数 字处理也越来越普遍。自然拍摄的照片,往往进行适当地处理之后可以消除黑边、 红眼、曝光不足等缺陷,使得图像变得更加好看。由于经过处理后的图像可能比 原来的要更加自然好看,也有可能变得模糊不清,效果变差。这就需要根据实际 图像的特点,哪些方面需要加以改进,就从那些方面着手,采用合适的算法,对 ...

基于MATLAB的光学图像处理
基于 MATLAB 的光学图像处理 学生:张雨辰 学号:1011100139 专业:光信息科学与技术 2013年 1月 2日 摘要: 现代社会随着计算机科技的飞速发展,数码技术的日益提高,对图像进行数 字处理也越来越普遍。自然拍摄的照片,往往进行适当地处理之后可以消除黑边、 红眼、曝光不足等缺陷,使得图像变得更加好看。由于经过处理后的图像可能比 原来的要更加自然好看,也有可能变得模糊不清,效果变差。这就需要根据实际 图像的特点,哪些方面需要加以改进,就从那些方面着手,采用合适的算法,对 图像进行适当的数字处理。 本文涉及到的程序算法是基于 MATLAB 环境的。综合运用 MATLAB 工具箱 实现图像处理的 GUI 程序设计, 利用 MATLAB 图像处理工具箱,设计和实现自己 的 Photoshop 。 关键字:对比度 灰度级重构 锐化 直方图均衡 强调高频滤波与直方图 均衡 图像转动 底片效果 边缘信息 噪声图像 图像还原 维纳滤波 注:本文在 PDFPDFPDFPDF格式中添加书签以便翻阅,特此说明。 一.设计背景: 数字图像处理(Digital Image Processing),就是利用数字计算机或者 其他数字硬件,对从图像信息转换而得到的电信号进行某些数学运算,以提高图 像的实用性。例如从卫星图片中提取目标物的特征参数,三维立体断层图像的重 建等。总的来说,数字图像处理包括点运算、几何处理、图像增强、图像复原、 图像形态学处理、图像编码、图像重建、模式识别等。 由于计算机处理能力的不断增强,数字图像处理学科在飞速发展的同时,也 越来越广泛地向许多其他学科快速交叉渗透,使得图像作为信息获取以及信息的 利用等方面也变得越来越重要。目前数字图像处理的应用越来越广泛,已经渗透 到工业、医疗保健、航空航天、军事等各个领域,在国民经济中发挥越来越大的 作用。 MathWorks 公司推出的 MATLAB 软件是学习数理知识的好帮手。应用 MATLAB 友好的界面和丰富、实用、高效的指令及模块,可以使人较快地认识、理解图像 处理的相关概念,逐步掌握图像信号处理的基本方法,进而能够解决相关的工程 和科研中的问题。 图像是人类获取和交换信息的主要来源,因此,图像处理的应用领域 必然涉及到人类生活和工作的方方面面。随着人类活动范围的不断扩大, 图像处理的应用领域也将随之不断扩大,已在国家安全、经济发展、日常 生活中充当越来越重要的角色,对国计民生的作用不可低估。 二.预处理: 利用 matlab 的 GUI 程序设计一个简单实用的图像处理程序。该程序应具备 图像处理的常用功能,以满足用户的使用。现设计程序有以下基本功能: 1)图像的读取和保存。 2)设计图形用户界面,让用户能够对图像进行任意的亮度和对比度变化调整, 显示和对比变换前后的图像。 3)图像旋转:进行上下镜像,左右镜像。 4)用于实现图像的直观性和简单性,使用图像阈值处理。 5)图像直方图统计和直方图均衡,要求显示直方图统计,比较直方图均衡后的 效果。 6)将高频强调滤波与直方图均衡化结合起来,用于医学图像的增强。 7)能对图像加入各种噪声,并通过几种滤波算法实现去噪并显示结果。 8)额外功能。 三.原理及图像实现: 1.常用图像处理: 1.1、用函数 imadjust 进行亮度处理: 函数 imadjust 是对灰度图像进行亮度变换的基本 IPT 工具。语法: g = imadjust(f, [low_in high_in],[low_out high_out],gamma) 此函数将图像 f 中的亮度值映像到 g 中的新值,即将 low_in 至 high_in 之 间的值映射到 low_out 至 high_out 之间的值。输出的图像应为 uint8 类、uint16 类或 double 类图像。 function light_Callback(hObject, eventdata, handles) % hObject handle to light (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) global T axes(handles.axes2); T=getimage; prompt={'调整倍数'}; defans={'0'}; p=inputdlg(prompt,'input',1,defans); p1=str2num(p{1}); y=imadjust(handles.img,[ ], [ ],p1); %亮度调节 imshow(y); handles.img=y; guidata(hObject,handles); 亮度调整0.5倍后的图像。 1.2、对比度: 增强对比度实际是增强原图像的各部分的反差。实际中往往是通过原图中某 两个灰度值之间的动态范围来实现的(如图 4-1)。 增强对比度 在上图中可以看出,通过变换可以使原图的较高的和较低的灰度值的动态范围减 小了,而原图在二者之间的动态范围增加了,从而其范围的对比度增加了。 function uipanel6_SelectionChangeFcn(hObject, eventdata, handles) % hObject handle to the selected object in uipanel6 % eventdata structure with the following fields (see UIBUTTONGROUP) % EventName: string 'SelectionChanged' (read only) % OldValue: handle of the previously selected object or empty if none was selected % NewValue: handle of the currently selected object % handles structure with handles and user data (see GUIDATA) global T str=get(hObject,'string'); axes(handles.axes2); switch str case'增强' T=getimage; prompt={'输入参数:'}; defans={'1'}; p=inputdlg(prompt,'input',1,defans); p1=str2num(p{1}); f=immultiply(handles.img,p1); imshow(f); handles.img=f; guidata(hObject,handles); case'减弱' T=getimage; prompt={'输入参数:'}; defans={'1'}; p=inputdlg(prompt,'input',1,defans); p1=str2num(p{1}); f=imdivide(handles.img,p1); imshow(f); handles.img=f; guidata(hObject,handles); end 对比度增强 2 倍后的图像 1.3&1.41.3&1.41.3&1.41.3&1.4、直方图均衡化和直方图统计: 直方图均衡主要是对在图像中像素个数多的灰度级进行展宽,而对像素个数 少的灰度级进行缩减,从而使图像变得清晰。通过点运算使输入图像转换为在每 一灰度级上都有相同的像素点的数目,即输出图像的直方图是平的。 图像灰度的直方图是反映一幅图像中的灰度级与出现这种灰度的概率之间 关系的图形。直方图的横坐标是灰度,一般用 r 表示。纵坐标是灰度值为 ri的像 素个数或出现这个灰度值的概率 Pi (ri)。而且: ( ) i i i r p r = 灰度为 的像素个数 图像像素总个数 , 1 0 ( ) 1 k r i i p r − = =∑ ,k为一幅图像对应的灰度级数。 设变量 r代表图像中像素的灰度级,如果作归一化处理,有 0≦r≦1 在灰度级中,r=0 代表黑,r=1 代表白,从 r=0 到 r=1 之间数值的变化,反 映了像素 you3 黑之白的灰度变化。对于一幅给定的图像,每一像素取得(0,1) 区间内的灰度级是随机的,即可以认为它是一个随机变量。假定 r是连续的,那 么可以用概率密度函数 Pr (r)来表示原始图像的灰度分布。对数字图像来说,灰 度级看成是离散的,归一化后的 r取值范围为 0≦r≦1,k=0,1,2,……,L-1 这里 L为灰度级的数目 一幅给定的图像的灰度级分布在[0,1]区间内的任一个 r值,都可产生一个 s值,且任一 r值可按下式变换: s=T(r), T(r)为变换函数。 由概率论知,如果已知随机变量 r 的概率密度为 Pr (r),而随机变量 s 是 r 的函数,对于直方图均衡化后的连续图像,变换函数 T(r)与远图像概率密度函 数 P(r)之间的关系为: 1 0 ( ) ( ) r rs T r p r dr= = ∫ 对于离散图像,第 i个灰度级 ri出现的频数用 ni表示,该灰度级像素对应的 概率值 Pi (ri)为: Pi (ri)= ni/n n 是帧内像素总数,ri满足归一化条件。 离散图像的变换函数表达式为: 1 1 0 0 ( ) ( ) k k i i i r i i n S T r p r n − − = = = = =∑ ∑ , 式中 k 为灰度级数。 通过histeq函数实现直方图均衡。 因为此函数只能对灰度图像进行直方图均衡。故应先将彩图转为灰度图像。(可 利rgb2gray函数对其他图像进行灰度图像的转化,程序略。) function pushbutton7_Callback(hObject, eventdata, handles) % hObject handle to pushbutton7 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) global T axes(handles.axes2); T=getimage; h=histeq(handles.img); %直方图均衡化; imshow(h); handles.img=h; guidata(hObject,handles); % --- Executes on button press in pushbutton12. function pushbutton12_Callback(hObject, eventdata, handles) % hObject handle to pushbutton12 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) axes(handles.axes2); x=imhist(handles.img); %直方图统计 x1=x(1:10:256); horz=1:10:256; bar(horz,x1); axis([0 255 0 15000]); set(handles.axes2,'xtick',0:50:255); set(handles.axes2,'ytick',0:2000:15000); 直方图均衡化后图像 直方图统计(处理前) 直方图统计(处理后) 1.51.51.51.5、图像旋转: 一幅数字图像 f(x,y)的二维(p + q)阶矩定义为: ),( yxfym q x y p pq x ∑∑= 其中,p,q=0,1,2,...,求和在跨越图像的所有空间坐标 x,y 的值上进行。相应的中心 矩定义为 ),()()( yxfyyxxu q p x y pq −−=∑∑ 其中, 00 10 m m x = , 00 01 m m y = 归一化(p+q)阶中心矩定义为 γ 00u u n pq pq = 其中 p,q=0,1,2,...., 1 2 + + = qp γ 其中 p+q=2,3,.... 通过f=fliplr(handles.img); f=flipud(handles.img);分别实现左右镜 像翻转与上下镜像翻转。 通过p=inputdlg(prompt,'input',1,defans);p1=str2num(p{1});来输入旋 转参数。 通过函数f=imrotate(handles.img,p1,'bilinear','crop');实现翻转。 function uipanel11_SelectionChangeFcn(hObject, eventdata, handles) % hObject handle to the selected object in uipanel11 % eventdata structure with the following fields (see UIBUTTONGROUP) % EventName: string 'SelectionChanged' (read only) % OldValue: handle of the previously selected object or empty if none was selected % NewValue: handle of the currently selected object % handles structure with handles and user data (see GUIDATA) str=get(hObject,'string'); axes(handles.axes2); global T switch str case '镜面翻转' T=handles.img; f=fliplr(handles.img); imshow(f); handles.img=f; guidata(hObject,handles); case '上下翻转' T=handles.img; f=flipud(handles.img); imshow(f); handles.img=f; guidata(hObject,handles); End % --- Executes on button press in pushbutton13. function pushbutton13_Callback(hObject, eventdata, handles) % hObject handle to pushbutton13 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) global T axes(handles.axes2); T=getimage; prompt={'旋转角度:'}; defans={'0'}; p=inputdlg(prompt,'input',1,defans); p1=str2num(p{1}); f=imrotate(handles.img,p1,'bilinear','crop'); imshow(f); handles.img=f; guidata(hObject,handles); 图像旋转45度后 灰度级处理后图像进行镜面和上下翻转 2.2.2.2.图像增强: 2.12.12.12.1图像锐化: 拉普拉斯算子是线性二次微分算子,与梯度算子一样,具有旋转不变性,从 而满足不同走向的图像边缘锐化要求。下面是本程序所用的两个个 3*3 模板: 用imfilter函数产生一个拉普拉斯滤波器。 function uipanel12_SelectionChangeFcn(hObject, eventdata, handles) % hObject handle to the selected object in uipanel12 % eventdata structure with the following fields (see UIBUTTONGROUP) % EventName: string 'SelectionChanged' (read only) % OldValue: handle of the previously selected object or empty if none was selected % NewValue: handle of the currently selected object % handles structure with handles and user data (see GUIDATA) global T str=get(hObject,'string'); axes(handles.axes2); switch str case '-4拉普拉斯增强' T=getimage; w4 = fspecial('laplacian', 0); %用来生成滤波掩膜w的函数 f = im2double(handles.img); g4 = f - imfilter(f, w4, 'replicate'); imshow(g4); handles.img=g4; guidata(hObject,handles); case '-8拉普拉斯增强' T=getimage; w8 = [1 1 1;1 -8 1; 1 1 1]; %手工添置拉普拉斯算子 f = im2double(handles.img); g8 = f - imfilter(f, w8, 'replicate'); imshow(g8); handles.img=g8; guidata(hObject,handles); end 1 1 1 1 -8 1 1 1 1 0 1 0 1 -4 1 0 1 0 -4 拉普拉斯增强后的图像 -8 拉普拉斯增强图像 2.22.22.22.2、高频强调滤波与直方图均衡化: 高通滤波器偏离了直流项,从而把图像的平均值降低到了零。一种补偿方法 是给高通滤波器加上一个偏移量。若偏移量与将滤波器乘以一个大于 1 的常数结 合起来,则这种方法就称为高频强调滤波,因为该常数突出了高频部分。这个乘 数也增加了低频部分的幅度,但是只要偏移量与乘数相比较小,低频增强的影响 就弱于高频增强的影响。高频强调滤波器的传递函数为 ),(),( vubHavuH hphfe += 其中,a是偏移量,b 是乘数, ),( vuH hp 是高通滤波器的传递函数。 附:高通滤波器的函数: ),(1),( 1 vuHvuH php −= 高通和低通滤波器的传递函数,与频域滤波函数,编译成 mmmm函数,在附录 中。 将高频强调滤波与直方图均衡化结合起来,用于 X 光图像增强。特殊图像 的灰度偏向于极度暗端,用高频强调滤波与直方图均衡化结合起来使用时,所得 到的结果要好于单独使用任何一种方法所得到的结果。 步骤:原图像————高通滤波————高频强调滤波————直方图均衡 化 function pushbutton15_Callback(hObject, eventdata, handles) % hObject handle to pushbutton15 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) global T axes (handles.axes2); T=getimage; f = handles.img; PQ = paddedsize(size(f)); D0 = 0.05 * PQ(1); HBW = hpfilter('btw', PQ(1), PQ(2), D0, 2); %高通滤波 H = 0.5 + 2*HBW; ghf = dftfilt(f, H); %频域滤波函数 ghf = gscale(ghf); ghe = histeq(ghf, 256); imshow(ghe); handles.img=ghe; guidata(hObject,handles); 高频强调滤波与直方图均衡化处理后的图像 直方图均衡化处理后的图像 2.2.2.2.产生噪声图像: 利用 imnoise(I,type,parameters)来加入各种噪声。也可以使用指定的分 布产生空间随机噪声。与 imnoise 不同,imnoise2 的 M 函数产生一个大小为 M * N 的噪声数组,它不以任何形式缩放。另一个主要的不同是 imnoise 输出一个有 噪声图像,而 imnoise2 产生噪声模式本身。用户可直接指定需要的噪声参数。 imnoise2imnoise2imnoise2imnoise2的 mmmm函数,在附录中。 下面是几种噪声的实现程序: 1.用 imnoise2实现胡椒噪声: function hujiaozaosheng_Callback(hObject, eventdata, handles) % hObject handle to hujiaozaosheng (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) global T axes(handles.axes2); T=getimage; prompt={'输入胡椒噪声概率'}; defans={'0.02'}; p=inputdlg(prompt,'input',1,defans); p1=str2num(p{1}); [M, N] = size(handles.img); R=imnoise2('salt & pepper', M, N, 0.1, 0); c = find(R == 0); gs = handles.img; gs(c) = 0; imshow(gs); handles.img=gs; guidata(hObject,handles); 2.imnoise2 产生盐粒噪声: function yanlizaosheng_Callback(hObject, eventdata, handles) % hObject handle to yanlizaosheng (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) global T axes(handles.axes2); T=getimage; prompt={'输入盐粒噪声概率'}; defans={'0.02'}; p=inputdlg(prompt,'input',1,defans); p1=str2num(p{1}); [M, N] = size(handles.img); R=imnoise2('salt & pepper', M, N, 0, p1); c = find(R == 1); gp = handles.img; gp(c) = 255; imshow(gp); handles.img=gp; guidata(hObject,handles); 3.用 imnoise产生高斯噪声: function gaosizaosheng_Callback(hObject, eventdata, handles) % hObject handle to gaosizaosheng (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) global T axes(handles.axes2); T=getimage; prompt={'输入高斯噪声1:','输入高斯噪声2'}; defans={'0','0.02'}; p=inputdlg(prompt,'input',1,defans); p1=str2num(p{1}); p2=str2num(p{2}); f=imnoise(handles.img,'gaussian',p1,p2); imshow(f); handles.img=f; guidata(hObject,handles); 4.用imnoise产生乘性噪声: function chengxingzaosheng_Callback(hObject, eventdata, handles) % hObject handle to chengxingzaosheng (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) global T axes(handles.axes2); T=getimage; prompt={'输入乘性噪声:'}; defans={'0.02'}; p = inputdlg(prompt,'input',1,defans); p1 = str2num(p{1}); f = imnoise(handles.img,'speckle',p1); imshow(f); handles.img = f; guidata(hObject,handles); ),( ^ yxf ),( yxg ),( yxη 噪声 ),( yxf 4.4.4.4.图像复原: 复原的目的是在预定义的意义上改善给定的图像。复原通过使用退化现象的 先验知识试图重建或者恢复一幅退化的图像。因此,复原技术趋向于将退化的模 型化并用相反的处理来恢复原图像。 1111)仅有噪声的复原:空间滤波 我们用 spfilt 的函数在空间域执行滤波。spfiltspfiltspfiltspfilt的 mmmm函数在附录中。 下面是实现噪声复原的程序: 1.用 spfilt函数实现反调和滤波: ∑ ∑ ∈ ∈ + = xy xy Sts Q Sts Q tsg tsg yxf ),( ),( 1 ^ ),( ),( ),( 当被胡椒噪声污染时,过滤胡椒噪声的办法最好是 Q 为正值: 退化函数 H + 复原滤波器 function Untitled_12_Callback(hObject, eventdata, handles) % hObject handle to Untitled_12 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) global T axes(handles.axes2); T=getimage; k = spfilt(handles.img, 'chmean', 3, 3, 1.5); imshow(k); handles.img = k; guidata(hObject,handles); 胡椒噪声污染图像 反调和滤波器正值 当被盐粒噪声污染时,过滤盐粒噪声的办法最好是 Q 为负值: function fandiaolvbo_Callback(hObject, eventdata, handles) % hObject handle to fandiaolvbo (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) global T axes(handles.axes2); T=getimage; k = spfilt(handles.img, 'chmean', 3, 3, -1.5); imshow(k); handles.img = k; guidata(hObject,handles); 盐粒污染后图像 反调和滤波器负值 2.用 adpmedian 函数实现中值滤波: function zishiyingzhongzhilibo_Callback(hObject, eventdata, handles) % hObject handle to zishiyingzhongzhilibo (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) global T axes(handles.axes2); T=getimage; k = adpmedian(handles.img,7); imshow(k); handles.img=k; guidata(hObject,handles); 胡椒噪声污染图像 中值滤波处理图像 自适应中值滤波与原图像对比 3.同态滤波: 将像元灰度值看作是照度和反射率两个组份的产物。由于照度相对变化很 小,可以看作是图像的低频成份,而反射率则是高频成份。通过分别处理照度和 反射率对像元灰度值的影响,达到揭示阴影区细节特征的目的。 同态滤波处理的基本流程如下: S(x,y)---->Log---->DFT---->频域滤波---->IDFT---->Exp---->T(x,y) 其中 S(x,y)表示原始图像;T(x,y)表示处理后的图像;Log 代表对数运算; DFT 代表傅立叶变换(实际操作中运用快速傅立叶变换 FFT);IDFT 代表傅立 叶逆变换(实际操作中运用快速傅立叶逆变换 IFFT);Exp 代表指数运算。 function tongtailvbo_Callback(hObject, eventdata, handles) % hObject handle to tongtailvbo (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) global T axes(handles.axes2); T=getimage; img = handles.img; img=im2double(img); lnimg=log(img+0.000001);%取对数 Fimg=fft2(lnimg);%傅里叶变换 P=fftshift(Fimg);%将频域原点移到图像中心; [M,N]=size(P); x0=floor(M/2); y0=floor(N/2); %同态滤波参数设置 D0=100; c=1.50; Hh=2;Hl=0.5;%Hh>1,Hl<1 for u=1:M for v=1:N D(u,v)=(u-x0)^2+(v-y0)^2; H(u,v)=(Hh-Hl)*(1-exp(-c*(D(u,v)^2/D0^2)))+Hl;%同态滤波 器函数 end end hImg=Fimg.*H;%滤波,矩阵点乘 gImg=ifft2(hImg);%反傅立叶变换 Y=exp(gImg); %取指数 J=im2uint8(Y); imshow(J); handles.img = J; guidata(hObject,handles); 同态滤波前图像 同态滤波后图像 2222)有退化函数与噪声的复原: 1.维纳滤波: 维纳滤波是最小均方误差准则下的最佳线性滤波器,不仅适用含噪信号的 恢复和估计,同样在图像处理中也有重要应用。在景物成像的过程中可能出现的 模糊、失真或噪声还有变形,会导致图像质量下降,本文主要通过介绍维纳滤波 的基本原理,并结合 MATLAB中的函数,设计相应的维纳滤波器,实现“含噪” 图像的复原。 维纳滤波器寻找一个使统计误差函数: }){( 2 ^ 2 ffEe −= 最小的估计 ^ f 。其中,E是期望值操作符,f是未退化的图像。该表达式在 频域可表示为: ] ),(/),(|),(| |),(| ),( 1 [),( 2 2^ vuSvuSvuH vuH vuH vuF fη + = 首先产生一个模糊噪声图像: function zhizaomohuzaosheng_Callback(hObject, eventdata, handles) % hObject handle to zhizaomohuzaosheng (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) global T axes(handles.axes2); T=getimage; f = handles.img; PSF = fspecial('motion', 7, 45); gb = imfilter(f, PSF, 'circular'); noise = imnoise(zeros(size(f)),'gaussian', 0, 0.001); g = gb + im2uint8(noise); %图像矩阵类型不同,注意转换。 imshow(g); handles.img =g; guidata(hObject,handles); 使用deconvwnr函数进行维纳滤波: function weinalvbo_Callback(hObject, eventdata, handles) % hObject handle to weinalvbo (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) global T axes(handles.axes2); T=getimage; f = handles.img; PSF = fspecial('motion', 7, 45); noise = imnoise(zeros(size(f)),'gaussian', 0, 0.001); noise = im2uint8(noise); Sn = abs(fft2(noise)).^2; Sf = abs(fft2(f)).^2; NCORR = fftshift(real(ifft2(Sn))); ICORR = fftshift(real(ifft2(Sf))); fr3 = deconvwnr(f, PSF, NCORR, ICORR); imshow(fr3); handles.img =fr3; guidata(hObject,handles); 模糊的噪声图像 自相关函数的维纳滤波图像 4.4.4.4.特殊图像处理: 4.14.14.14.1、底片效果: 通过 f=imcomplement(handles.img);实现图像取反,形成底片效果。 function dipianxiaoguo_Callback(hObject, eventdata, handles) % hObject handle to dipianxiaoguo (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) global T axes (handles.axes2); T=getimage; f=imcomplement(handles.img); %图像取反? imshow(f); handles.img=f; guidata(hObject,handles); 底片效果 4.24.24.24.2、边缘信息: Canny 检测 工程第三方检测合同工程防雷检测合同植筋拉拔检测方案传感器技术课后答案检测机构通用要求培训 器是使用函数edge的最有效边缘检测器。该方法 总结 初级经济法重点总结下载党员个人总结TXt高中句型全总结.doc高中句型全总结.doc理论力学知识点总结pdf 如下: 1.图像使用带有指定标准偏差 σ 的高斯滤波器来平滑,从而可以减少噪声。 2.在 每 一 点 处 计 算 局 部 梯 度 2/122 ][),( yx GGyxg += 和 边 缘 方 向 )/arctan(),( xy GGyx =α 。边缘点定义为梯度方向上其强度局部最大的点。 3.第二条中确定的边缘点会导致梯度幅度图像中出现脊。然后,算法追踪所 有脊的顶部,并将所有不在脊的顶部的像素设为零,以便在输出中给出一条细线, 这就是众所周知的非最大值为强边缘像素,T1和T2之间的脊像素称为弱边缘像 素。 4.最后,算法通过将8连接的弱像素集成到强像素,执行边缘链接。 边缘检测器的语法为: [g, t] = edge (f, 'canny', T, sigma) function bianyuanxinxi_Callback(hObject, eventdata, handles) % hObject handle to bianyuanxinxi (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) global T axes(handles.axes2); T=getimage; f=edge(handles.img,'canny'); imshow(f); handles.img=f; guidata(hObject,handles); 边缘检测 4.34.34.34.3、快速傅里叶变换: 在 FFT 中,利用 WN 的周期性和对称性,把一个 N 项序列(设 N=2k,k 为正 整数),分为两个 N/2 项的子序列,每个 N/2 点 DFT 变换需要(N/2)2 次运算, 再用 N 次运算把两个 N/2 点的 DFT 变换组合成一个 N 点的 DFT 变换。这样变 换以后,总的运算次数就变成 N+2(N/2)2=N+N2/2。利用分裂的思想,对傅里 叶变换分解,使得计算量降低。下面介绍快速傅里叶变换的数学符号表达式。 设:因子 W是周期为 N 的周期函数 W=cos (2π/N) - j sin(2π/N) W (m+kN)(n+lN) = W mn 库利-图基给出了快速傅立叶变换算法,其基本思想示 将一个长输入序列分为 奇、偶两部分 x1(n)=x(2n) n= 0, 1, (N-1)/2 x2(n)=x(2n+1) n= 0, 1, (N-1)/2 由傅立叶变换定义 ∑ − = = 1 0 )()( N n mn N WnxmX ∑ ∑ − = − = +++= 2 1 0 2 1 0 )12()2( )12()2( N n N n nm N nm N WnxWnx 由于 因为周期性,对于所有的 m值 可见快速傅里叶变换算法的思想核心就是将一个傅氏变换转化为两个离散傅氏 变换。 function kuaisufuliyebianhuan_Callback(hObject, eventdata, handles) % hObject handle to kuaisufuliyebianhuan (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) global T axes(handles.axes2); T=getimage; f = handles.img; F = fft2(f); Fc = fftshift( log(1 + abs(F))); %对数变换 S2 = gscale(Fc); imshow(S2); handles.img=S2; guidata(hObject,handles); ∑ ∑ − = − = ++= 2 1 0 2 1 0 2()2( )12()2( N n N n nm N m N nm N WnxWWnx ) k N k N j k N j k N WeeW 2 ) 2 2 ( 2) 2 (2 === − − π π ∑ ∑ − = − = += 2 1 0 2 1 0 2 2 2 1 )() N n N n mn N m N mn N WnxWWnx( ∑ ∑ − = − = += 2 1 0 2 1 0 2 2 2 1 )())( N n N n mn N m N mn N WnxWWnxmX ( 快速傅里叶变换FFT 4.44.44.44.4、灰度级重构: 重构是一种涉及到两幅图像和一个结构元素(而不是单幅图像和一个结构元 素)的形态学变换。一幅图像,即标记,是变换的开始点。另一幅图像是掩膜, 用来约束变换过程。结构元素用于定义连接性。 原图像——开运算重构——开运算——顶帽重构——顶帽变换——一条 水平开运算——膨胀——重构结果。 function pushbutton16_Callback(hObject, eventdata, handles) % hObject handle to pushbutton16 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) global T axes(handles.axes2); T=getimage; f = handles.img; f_obr = imreconstruct(imerode(f, ones(1, 71)), f); f_o = imopen(f, ones(1, 71)); f_thr = imsubtract(f, f_obr); f_th = imsubtract(f, f_o); g_obr = imreconstruct(imerode(f_thr, ones(1, 11)), f_thr); g_obrd = imdilate(g_obr, ones(1,21)); f2 = imreconstruct(min(g_obrd, f_thr), f_thr); imshow(f2); handles.img = f2; guidata(hObject,handles); 灰度级重构后消除了反光的影响 四.总结 本文主要介绍了数字图像增强处理的方法以及 MATLAB 语言的特点,基于 MATLAB 的数字图像处理环境,介绍了如何利用 MATLAB 及其数字图像增强处理的 方法。 当我第一次开始写论文的时候,我有些迷茫了。虽然,曾经学习过 matlab 的课程,但由于对 matlab 的学习更多的只是停留在理论上的学习,在课时内的 试验也只是简单的基础性试验, 所以对 matlab 实际运用不是很熟练。 为此,在实践正式开始前,我利用课余时间,重新复习了 matlab 教材,专 门借阅了利用 matlab 进行图像处理的相关教程,通过索引网络上的相关资料, 为课设做了较为充分的准备。在参考了相关材料及源程序,我对自己要做的课设 内容有了进一步的了解,并对 matlab 的使用有了更深的体会。 当然,在课设的进行过程中,我还是遇到了不少问题。例如,起初由于我对 句柄使用以及一些函数使用的不恰当,使得在对图像文件的保存上就遇
本文档为【基于MATLAB的光学图像处理】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_148102
暂无简介~
格式:pdf
大小:1MB
软件:PDF阅读器
页数:32
分类:
上传时间:2014-01-27
浏览量:64