资源下载地址:https://download.csdn.net/download/sheziqiong/85706526
资源下载地址:https://download.csdn.net/download/sheziqiong/85706526
图像的基本处理算法的编程实现与交互式演示界面设计
a) 编程实现图像处理基础经典算法,并集成到一个交互演示界面中
b) 可以通过界面选择相应的算法进行演示,可以通过文件选择进行算法所处理的图像的输入输出,可以在界面上进行参数选择,以及算法结果图像展示(要求在界面上同时展现输入图像和输出图像,便于比对)
实现:
1、256 色转灰度图
2、二值化变换
3、图像缩放
通过参数框设置图像的缩放比例,实现在屏幕上对输入图像的缩放。
4、图像旋转
通过参数框设置图像的旋转角度,实现在屏幕上对输入图像的旋转
(1)掌握图像基本处理算法的工作流程,我们在实验中只能涉猎其中很小的一部分,希望大家能够在实验之外自学理解相关算法;
(2)掌握应用高级语言实现基本交互演示界面的技能;
整体框架:
使用 C# windows 窗体应用程序设计交互式界面,可以直接在“工具箱”里找到相应控件并设置代码。界面由两个 pictureBox 和实现各个功能的 buttons(图像处理、保存、打开按钮)以及需要用户输入的参数的 textboxes。左边的 pictureBox 显示打开图片,右边显示处理后的图片。
1、 进入不同控件代码,在 Form1.cs 中设置不同控件发生的事件。
从头开始编码,形成的 Form1 首先要初始化:使用 InitializeComponent();因为要在打开文件按钮接受文件路径,所以 pathname 直接定义在整个 class Form1:Form 中以便后面其他控件的函数使用。
第一个按钮是需要用户打开文件,通过 file 的 Filename 函数得到路径并在 pictureBox1 中显示,pathname 被赋值。
保存按钮代码比较简单,直接在 pictureBox2 中使用 image.save
以下开始实现图像处理功能。首先是彩色图转灰度图:使用了整数方法;获得原图的 RGB 后带入计算可得所需图像的 RGB。输出时仍然使用之前用过的 pathname 获得图像参数然后传入此函数。
二值化:迭代法计算阈值。该算法先假定一个阈值,然后计算在该阈值下的前景和背景的中心值,当前景和背景中心值得平均值和假定的阈值相同时,则迭代中止,并以此值为阈值进行二值化。此方法先获得了直方图,取得最大灰度值和最小灰度值,再分别将图片分为两个大部分进行迭代求各部分自己的阈值,最后将所得的两个阈值将求平均数并二值化
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OeAoTwjJ-1655696209263)(https://www.writebug.com/myres/static/uploads/2022/6/20/b87000ba0cc5181faa3d77f46a509810.writebug)]
图像缩放:使用了双线性插值的方法得到缩放图片。在界面中有两个 textbox 分别要用户输入新图片的高与宽,在点击“缩放”这个控件时直接将这两个数据传为参数即可。
缩放代码中新图片需要获得各个像素并赋值。所得图片的像素需要靠旁边的四个点,根据这四个点与本点的距离的关系计算目标图像中(x,y)一点的像素值。通 Mat.at(i,j)得到图片位置 i,j 像素值,循环得到每个像素的 RGB 值(体现为三维数组)时并一个个赋值给新图片的 Vec3b value,即像素值。针对(x0,y0)value(x0,y0)=value(x2,y2)*s1
+value(x1,y2)*s2+value(x1,y1)*s3+value(x2,y1)*s4; 其中 s1-s4 是通过代码中的偏移量得到的。
1、 图像旋转:图片的旋转需要用户输入角度,传参过程同上。图像旋转的原理就是利用新的坐标和旧坐标在 cos, sin 之间关系。新点(x,y)与旧点(x0,y0)和须按转角度 a 之间的关系为:
x =x0cosa+y0sina;
y =-x0sina+y0cosa;
首先这里分为两个函数,因为要获得图像中心,旋转是以图像中心为远点的;第一个函数先得到图像旋转的所占区域,在第二个:得到最终图片的函数中,定义的函数宽高就要以旋转后的宽高为准 c#的窗体应用程序中本身的
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Drawing.Imaging;
中包含了 graphics 类型,其中包括了处理图像较多方法,所以在 try 中主要用它们处理图像。要让 graphics 围绕某矩形中心点旋转 N 度,分三步:第一步,将 graphics 坐标原点移到矩形中心点,假设其中点坐标(x,y);第二步,graphics 旋转相应的角度(沿当前原点);第三步,移回(-x,-y)。先将画布坐标原点放在中心,然后旋转,最后将图片平移。因为原图像的坐标原点不再中心,所以得到两点偏移量再重合,最后绘制。
1、图像平移:传参过程同上。基本算法:使用获得像素值的方法得到新图片数据,背景色设为白。
new Rectangle 进行初始化,ImageLockMode 锁定图像以便于改写像素。新建两个 byte 数组存入像素数据,通过 Stride 扫描图片得到新的像素值并传给新图片,最后将所得数据全部拷贝放入系统内存。
一、测试数据和执行结果 (在给定数据下,执行操作、算法和程序的结果,可使用数据、图表、截图等给出)
资源下载地址:https://download.csdn.net/download/sheziqiong/85706526
资源下载地址:https://download.csdn.net/download/sheziqiong/85706526