C#机器视觉入门系列1-转化为灰度图&&3*3模糊

这是我入门机器视觉的系列学习经验之开篇,本来想着依靠opencv快速实现一些功能,但是想了一下既然是学数学的,还是应该自己多算算,写一些自己理解的东西才好。

入门篇很简单,就只是实现了转化成灰度图以及模糊(去噪点),模糊功能写得很简单。文章基于C#实现。

首先新建一个winform程序,添加一个picturebox和一个botton按钮,在解决资源管理器里面新建一个类,本文我取名为Greyand3_3.cs,

 using System;
 using System.Collections.Generic;
 using System.Linq;
 using System.Text;
 using System.Threading.Tasks;
 using System.Drawing;

 namespace roberts
 {
     class Greyand3_3
     {
         //转化成灰度图且3*3平均模糊
         public Image GreyMethod(Image testimage)
         {
             Bitmap newGreyImage;
             newGreyImage = new Bitmap(testimage);

             Color pixelColor;

             ;
             double T;
             ;

             //转换成灰度图
             ; i < newGreyImage.Width; i++)
             {
                 ; g < newGreyImage.Height; g++)
                 {
                     pixelColor = newGreyImage.GetPixel(i, g);
                     newUnitColor = (pixelColor.R + pixelColor.G + pixelColor.B) / ;
                     Color newColor = Color.FromArgb(newUnitColor, newUnitColor, newUnitColor);

                     newGreyImage.SetPixel(i, g, newColor);
                 }
             }

            //3*3去除噪点
             ; m < newGreyImage.Width - ; m++)
             {
                 ; n < newGreyImage.Height - ; n++)
                 {
                     ; x < 3; x++)
                     {
                         ; y < 3; y++)
                         {
                             pixelColor = newGreyImage.GetPixel(m + x, n + y);
                             AverageColor = pixelColor.R + AverageColor;
                         }
                     }
                     AverageColor = Math.Round(AverageColor / );
                     int XYA = Convert.ToInt32(AverageColor);
                      || XYA < )
                     {
                         XYA = ;
                     }
                     newGreyImage.SetPixel(m, n, Color.FromArgb(XYA, XYA, XYA));
                 }
             }
             return newGreyImage;
         }
     }
 }

引用system.Drawing,处理图像需要使用该命名空间的Bitmap。首先转换成灰度图按照公式:newcolor = (R + G + B) /3 即可。

实现过程使用两个for循环完成(x方向和y方向),Color 用来存储颜色,Getpixel表示获取当前像素的颜色,Setpixel表示修改当前像素的颜色。

3*3模糊

由于噪点通常会出现亮度突增的情况,因此对其取九宫格平均值可以降低其亮度,只要在循环里计算求值&赋值就好了。使用math.round的使用总是出错,应该是对黑色区域取整的时候取大了,因此对于大于255的值一律赋值为255.

写得十分简单,实现本来也容易,这个方法的效果并不好,后面使用Gauss的时候会好一点,但是在笔记本上跑得真的蛮慢的。

效果如下:C#机器视觉入门系列1-转化为灰度图&&3*3模糊C#机器视觉入门系列1-转化为灰度图&&3*3模糊

上一篇:Docker 共有 13 个管理命令和 41 个通用命令,以下是常用 Docker 命令列表


下一篇:为什么说 Gumroad 是一家 “失败” 的创业公司?