记录了如下内容
- MDI多文档窗口创建
- 打开图像
- 保存图像
- 图像的去色处理
- 图像的二值化
- 图像的提取边缘
- 图像的中值滤波
- 图像的直方图
- 图像的直方图图像拉伸
- 图像的直方图均衡化
- 图像的线性点运算
- 图像的目标提取标记
1 MDI多文档窗口创建
- 创建一个普通的C# Windows窗体应用程序,将
IsMdiContainer
设置为true
,这样一个多文档应用程序就创建完成了。 - 只需将子窗口的
MdiParent
设置为主窗体就可以为主窗口添加一个子窗口。 - 子窗口的显示只能用
form.Show()
方法,如果用的是form.ShowDialog()
则==不是==MDI子窗口了;
2 打开图像
- 打开文件需要用到
OpenFileDialog
控件,然后子主程序里面判断是否点击了确定按钮,当用户点击了确定按钮的时候就相应打开文件操作; - 当用户选择了一个文件并确定后,
openFileDialog
的FileName
属性就存储了需要打开文件的完整文件名; - 得到了需要打开图像的完整文件名后就需要用
Bitmap
对象存储图像文件;
1 | try |
- 这里有一个特别需要注意的地方就是
openFileDialog
的Filter
属性设置方法;
1 | this.openFileDialog_main.Filter = "所有图片文件|*.jpg;*.bmp;*.png;*.pcx;*.gif;"; |
- 在窗体上面显示图像,就需要用到
Graphics
对象; - 在整个窗体绘制完成后用强制刷新窗口,显示最新的图像;
1 | g = Graphics.FromHwnd(this.Handle); |
1 | private void form_MDI_SizeChanged(object sender, EventArgs e) |
3 保存图像
- 和打开图像一样,保存图像同样也会用到一个类似的
saveFileDialog
控件; - 当用户点击了保存窗口的确定按钮后就开始了保存动作;
- 同样需要注意的是这个控件的
Filter
属性;
1 | try |
4 图像的去色处理
- 图像的去色,就是将普通的彩色图像修改为改为黑白照片;
- 普通的RGB图像换算为灰度图像有一个公式
(Red * 19595 + Green * 38469 + Blue * 7472) >> 16
;
1 | public static void GreyImage(Bitmap image) |
5 图像的提取边缘
- 图像的边缘提取有很多的方法,这里利用的是差分法,就是利用拉普拉斯算子对图像进行差分计算,得到了灰度边缘,然后进行二值化,使图像形成比较清晰的轮廓;
1 | public static void ExtactEage(Bitmap image) |
6 图像的二值化
- 图像二值化就是将图片转换成只有黑白两种颜色的图像;
- 二值化转换的过程中需要得到进行二值化最小、最大的两个颜色值;
1 | /// <summary> |
7 图像的中值滤波
- 图像的滤波处理可以使图像更加的平滑,这里利用的是中值滤波的方法进行图像滤波处理;
- 中值滤波算法的思想是重新计算图像所有的像素值,去像素的3X3邻域9个像素点的颜色值,从大到小进行排列,去排序后中间一个像素的颜色值作为滤波后该颜色的像素值;
- 这里排序利用的是
List<>[].sort()
方法;
1 | /// <summary> |
8 图像的直方图
- 图像直方图显示的是一个灰度图像的所有像素值得分不规律;
- 横坐标是0-255,纵坐标则是格银色像素点的的相对数量比;
- 直方图可以显示一个图像的像素分布水平,可以为其他的更高级的图像处理提供参考依据;
1 | /// <summary> |
9 图像的直方图图像拉伸
- 基于直方图的图像拉伸可以改善图像整体颜色的对比度和亮度;
- 直方图的图像拉伸思想是将图像的最大像素值和最小像素值拉伸至255和0,中间各像素点也会同比例的拉伸;
1 | /// <summary> |
10 图像的直方图均衡化
- 直方图均衡化又叫直方图修平,通常该方法用来增加图像的局部对比度,尤其是图像有用像素的对比度十分接近时,通过这种方法亮度可以很好的在直方图上面分布;
- 直方图均衡化的思想是将图像所有的像素点通过直方图映射到0-1(也就是0-255,最亮和最暗)区间里;
- 此种方法的到的图像直方图是不连续的;
1 | /// <summary> |
11 图像的线性点运算
- 图像的线性点运算,可以利用线性的方法改变图像的整体亮度和对比度;
- 当斜率设置为-1,偏移量设置为255时,进过图像的线性运算后得到的就是图像的负片;
1 | /// 线性点运算, |
12 图像的目标提取标记
- ==此方法对于色块比较大的二值图像会出现堆栈溢出的现象!==
1 | /// <summary> |
- 增加了一个进行上下左右搜索的递归函数,此处易出现堆栈溢出;
1 | /// <summary> |
–END–