还剩13页未读,继续阅读
本资源只提供10页预览,全部文档请下载后查看!喜欢就下载吧,查找使用更方便
文本内容:
LeadTools中文图像处理教程
(5)图像去噪数字图像在数字化和传输过程中常受到成像设备与外部环境噪声干扰等影响,我们将其称为含噪图像或噪声图像减少数字图像中噪声的过程称为图像去噪LeadTools在去噪方面也提供了多种类,具有非常强大的功能本文主要为大家介绍1创建“图像去噪”应用程序的具体步骤2LeadTools“图像去噪”相关类的介绍3傅里叶变换A知识简介BLeadTools傅里叶变换类的介绍4“图像去噪”支持WCF简介创建“图像去噪”应用程序的具体步骤
1.打开VisualStudio.NET点击文件-新建-项目…打开新建项目对话框后,在模板中选择“VisualC#”或“VisualBasic”,随后选择“Windows窗体应用程序”在名称栏中输入项目名称“RemoveNoise”,并使用“浏览”按钮选择您工程的存储路径,点击“确定”
2.在“解决方案资源管理器”中,右击“引用”,选择“添加引用”根据当前工程的Framework版本和生成目标平台,选择添加相应的LeadTools控件,例如工程中的版本为Framework
4.
0、生成目标平台是x86,则浏览选择LeadtoolsFor.NET文件夹”LEADTOOLS_INSTALLDIR\Bin\DotNet4\Win32”选择以下的DLL“Leadtools.dllLeadtools.Codecs.dllLeadtools.Codecs.Cmp.dllLeadtools.Codecs.Bmp.dllLeadtools.Codecs.Tif.dllLeadtools.ImageProcessing.Color.dllLeadtools.ImageProcessing.Core.dllLeadtools.ImageProcessing.Effects.dllLeadtools.WinForms.dll
3.从工具箱(视图-工具箱),添加7个RadioButton控件(将RadioButton的Text属性依照下表修改),两个Panel控件(Name分别修改为panelBefore和panelAfter)如下图NameTextradioButton1使用DespeckleCommand去除一位图像斑点radioButton2使用MedianCommand去除椒盐噪声radioButton3使用AverageCommand去除均匀、高斯噪声radioButton4使用AutoBinaryCommand将图像转为二值图像radioButton5使用SmoothEdgesCommand平滑图像的边缘radioButton6对图像进行离散傅里叶变换radioButton7对图像进行快速傅里叶变换
4.切换至Form1的代码视图(右击Form1,选择查看代码),将下面几行代码添加到文件开始处1:usingLeadtools;2:usingLeadtools.Codecs;3:usingLeadtools.Codecs.Tif;4:usingLeadtools.ImageProcessing;5:usingLeadtools.ImageProcessing.Core;6:usingLeadtools.ImageProcessing.Effects;7:usingLeadtools.ImageProcessing.Color;8:usingLeadtools.WinForms;
5.将以下变量添加至Form1类1:privateRasterImageViewerbeforePic;2:privateRasterImageViewerafterPic;3:privateRasterCodecscodecs;4:privateRasterImagetemp;
6.添加Form1Load事件句柄,在其中添加以下代码1:beforePic=newRasterImageViewer;2:beforePic.BackColor=Color.DarkCyan;3:beforePic.Dock=DockStyle.Fill;4:beforePic.InteractiveMode=RasterViewerInteractiveMode.Pan;5:beforePic.HorizontalAlignMode=RasterPaintAlignMode.Center;6:beforePic.VerticalAlignMode=RasterPaintAlignMode.Center;7:beforePic.AutoResetScaleFactor=false;8:panelBefore.Controls.AddbeforePic;9:beforePic.BringToFront;10:11:afterPic=newRasterImageViewer;12:afterPic.BackColor=beforePic.BackColor;13:afterPic.Dock=beforePic.Dock;14:afterPic.InteractiveMode=beforePic.InteractiveMode;15:afterPic.HorizontalAlignMode=beforePic.HorizontalAlignMode;16:afterPic.VerticalAlignMode=beforePic.VerticalAlignMode;17:afterPic.AutoResetScaleFactor=beforePic.AutoResetScaleFactor;18:panelAfter.Controls.AddafterPic;19:afterPic.BringToFront;20:21:codecs=newRasterCodecs;22:codecs.ThrowExceptionsOnInvalidImages=true;
7.双击radioButton1,在radioButton1CheckedChanged事件句柄中添加以下代码(本段代码为DespeckleCommand类的使用)1:beforePic.Image=codecs.LoadPath.CombineApplication.StartupPath@..\..\Pic\clean.tif;2:3:temp=beforePic.Image.Clone;4:5:DespeckleCommandcommand=newDespeckleCommand;6:7:command.Runtemp;8:afterPic.Image=temp;
8.双击radioButton2,在radioButton2CheckedChanged事件句柄中添加以下代码(本段代码为MedianCommand类的使用)1:beforePic.Image=codecs.LoadPath.CombineApplication.StartupPath@..\..\Pic\Master.jpg;2:3:temp=beforePic.Image.Clone;4:5:MedianCommandcommand=newMedianCommand;6:7:command.Dimension=9;8:command.Runtemp;9:afterPic.Image=temp;
9.双击radioButton3,在radioButton3CheckedChanged事件句柄中添加以下代码(本段代码为AverageCommand类的使用)1:beforePic.Image=codecs.LoadPath.CombineApplication.StartupPath@..\..\Pic\Master.jpg;2:3:temp=beforePic.Image.Clone;4:5:AverageCommandcommand=newAverageCommand;6:7:command.Dimension=3;8:command.Runtemp;9:afterPic.Image=temp;10:codecs.SavetempPath.CombineApplication.StartupPath@..\..\Pic\AverageCommandResult.jpgRasterImageFormat.Jpeg24;
10.双击radioButton4,在radioButton4CheckedChanged事件句柄中添加以下代码(本段代码为AutoBinaryCommand类的使用)1:beforePic.Image=codecs.LoadPath.CombineApplication.StartupPath@..\..\Pic\Master.jpg;2:3:temp=beforePic.Image.Clone;4:5:AutoBinaryCommandcommand=newAutoBinaryCommand;6:7:command.Runtemp;8:afterPic.Image=temp;9:codecs.SavetempPath.CombineApplication.StartupPath@..\..\Pic\AutoBinaryCommand.jpgRasterImageFormat.Jpeg24;
11.双击radioButton5,在radioButton5CheckedChanged事件句柄中添加以下代码(本段代码为SmoothEdgesCommand类的使用)1:beforePic.Image=codecs.LoadPath.CombineApplication.StartupPath@..\..\Pic\Master.jpg;2:3:temp=beforePic.Image.Clone;4:5:SmoothEdgesCommandcommand=newSmoothEdgesCommand;6:command.Amount=50;7:command.Threshold=0;8:9:command.Runtemp;10:afterPic.Image=temp;
12.双击radioButton6,在radioButton6CheckedChanged事件句柄中添加以下代码(本段代码为DiscreteFourierTransformCommand类的使用)1:beforePic.Image=codecs.LoadPath.CombineApplication.StartupPath@..\..\Pic\Master.jpg;2:3:temp=beforePic.Image.Clone;4:5:FourierTransformInformationFTArray=newFourierTransformInformationtemp;6:LeadRectrcRange=newLeadRect00temp.Width-1temp.Height-1;7:DiscreteFourierTransformCommandcommand=newDiscreteFourierTransformCommand;8:9:command.FourierTransformInformation=FTArray;10:command.Range=rcRange;11:command.Flags=DiscreteFourierTransformCommandFlags.DiscreteFourierTransform|12:DiscreteFourierTransformCommandFlags.Gray|13:DiscreteFourierTransformCommandFlags.Range|14:DiscreteFourierTransformCommandFlags.InsideX|15:DiscreteFourierTransformCommandFlags.InsideY;16:17:18:FourierTransformDisplayCommanddisCommand=newFourierTransformDisplayCommand;19:disCommand.Flags=FourierTransformDisplayCommandFlags.Log|FourierTransformDisplayCommandFlags.Magnitude;20:disCommand.FourierTransformInformation=command.FourierTransformInformation;21:22:disCommand.Runtemp;23:24:afterPic.Image=temp;
13.双击radioButton7,在radioButton7CheckedChanged事件句柄中添加以下代码(本段代码为FastFourierTransformCommand类的使用)1:beforePic.Image=codecs.LoadPath.CombineApplication.StartupPath@..\..\Pic\Master.jpg;2:3:temp=beforePic.Image.Clone;4:5:SizeCommandsizecommand=newSizeCommand256256Leadtools.RasterSizeFlags.Bicubic;6:7:sizecommand.Runtemp;8:FourierTransformInformationFTArray=newFourierTransformInformationtemp;9:10:FastFourierTransformCommandcommand=newFastFourierTransformCommandFTArrayFastFourierTransformCommandFlags.FastFourierTransform|FastFourierTransformCommandFlags.Gray;11:command.Runtemp;12:LeadRectrcRect=newLeadRect00temp.Width/2temp.Height/2;13:FrequencyFilterCommandFreqCommand=newFrequencyFilterCommandFTArrayrcRectFrequencyFilterCommandFlags.InsideX|FrequencyFilterCommandFlags.OutsideY;14:15:FastFourierTransformCommandInvCommand=newFastFourierTransformCommandFTArrayFastFourierTransformCommandFlags.InverseFastFourierTransform|FastFourierTransformCommandFlags.Gray|FastFourierTransformCommandFlags.Scale|FastFourierTransformCommandFlags.Both;16:InvCommand.Runtemp;17:18:afterPic.Image=temp;
14.编译运行程序本文DEMO使用了DespeckleCommand、MedianCommand、AverageCommand、AutoBinaryCommand、SmoothEdgesCommand类对图像进行去噪处理,使用了离散傅里叶变换和快速傅里叶变换对图像进行了处理结果如下图LeadTools“图像去噪”相关类的介绍类名说明专门用于去除1位图像上的斑点,例如传真或DespeckleCommand扫描文件它是去除任何种类图像椒盐噪声的有效方法您可以设置邻域的大小(用于计算中间值的周MedianCommand围像素)来控制方法的强度这个方法会导致图像的最小模糊它可以移除均匀和高斯噪声,但是有的图像使用中值滤波器图像会变得更加模糊您可以设AverageCommand置邻域的大小(用于计算算术平均值的周围像素)来控制类的强度此类可在一个列表平均图像,消除图像中的随AddCommand机噪声此类可在一个列表平均图像,消除图像中的随机噪声通常情况下,调用此类可在短的时间AddWeightedCommand间隔内获取同一对象的一系列图像此类通过加权平均可以消除随机噪声此类通过将高斯滤波器应用于图像的每个像GaussianCommand素,平滑和模糊图像模糊的量由类使用的邻域大小决定【Document/Medical专用】二进制过滤器(用于黑色物体的膨胀和腐蚀)可用于噪声去除BinaryFilterCommand类使用了定向二BinaryFilterCommand进制过滤器MaximumCommand和MinimumCommand类可以控制膨胀和腐蚀的邻域大小这些方法的一种噪声移除技术创建了一个图像的两个副本,将膨胀过滤器应用于一个副本,腐蚀过滤器应用于另一个副本然后使用设置了OperationAverageaveraging标志的CombineCommand类合并处理后的两个图像【Document/Medical专用】此类基于图像AutoBinaryCommand的统计特性,使用自动计算的阈值,将图像转换为二值图像灰度图像会获取最佳的效果去除隔行扫描视频信号源图像的黑线它在图DeinterlaceCommand像中合并线和/或将线混合在一起SmoothEdgesCommand平滑图像的边缘不改变每像素的位数,将图像转换为黑白图DynamicBinaryCommand像傅立叶变换A知识简介傅里叶变换在去除谐波噪声时非常有用,如图像视频中的人字斜纹图案正弦波样式莫尔样式半色调图案干扰模式傅里叶变换在去除视频信号和CCD的噪声时也十分常有用的下面我们为大家介绍下傅里叶变换的一些基本概念和原理1傅里叶变换将一个图像在空间上的强度变化变为在频率上的强度变化当一个图像被描述为一系列的频率和相位时,便可以使用功率谱分析分析这些信息功率谱是绘制出像素强度值频率的二维示意图低频接近源点,高频接近边缘从分析可以看出,合适的滤波器可以用于去除部分图像,而这些图像恰恰是噪声使用inversecommand标记,图像可被转换回原图像,且没有噪声2离散傅里叶变换使用了一个序列进行傅里叶变换,这个序列的值有真实和设想的组件离散傅里叶变换揭示了数据的周期性,以及这些周期性的相对强度3由于离散傅里叶变换的计算时间较长,为了减少计算时间,可以使用快速傅里叶变换,它将计算次数从降为然后使用快速傅里叶变换要求点的总数为2的整数幂使用inversecommand标记,图像可被转换回原图像,且没有噪声BLeadTools傅里叶变换类的介绍通过指定flags,计算一个图像的离DiscreteFourierTransformCommand散傅里叶变换或离散傅里叶逆变换通过指定flags,计算一个图像的快FastFourierTransformCommand速傅里叶变换或快速傅里叶逆变换将频率谐波振幅或相位转换为图像FourierTransformDisplayCommand它允许将FFT和DFT的结果以图像形式显示出来FrequencyFilterCommand根据矩形范围过滤频率谐波将特定频率组件从图像移除时,创建FrequencyFilterMaskCommand一个遮罩过滤器支持WCF【Document/Medical专用】专门用于去除1Despeckle位图像上的斑点,例如传真或扫描文件Median它是去除任何种类图像椒盐噪声的有效方法您可以设置邻域的大小(用于计算中间值的周围像素)来控制方法的强度这个方法会导致图像的最小模糊Average它可以移除均匀和高斯噪声,但是有的图像使用中值滤波器图像会变得更加模糊您可以设置邻域的大小(用于计算算术平均值的周围像素)来控制类的强度Binary【Document/Medical专用】二进制过滤器(用于黑色物体的膨胀和腐蚀)可用于噪声去PredefinedBinary除Binary和PredefinedBinary使用了定向二进制过滤器Maximum和Minimum操作可以控制膨胀和腐蚀的邻域大小AutoBinary【Document/Medical专用】此类基于图像的统计特性,使用自动计算的阈值,将图像转换为二值图像灰度图像会获取最佳的效果DynamicBinary不改变每像素的位数,将图像转换为黑白图像。