这是我入门机器视觉的系列学习经验之开篇,本来想着依靠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模糊的更多相关文章

  1. MATLAB 矩阵转化为灰度图

    A=[ 1.00 0.96 0.98 0.88 0.94 0.61 0.96 0.80 0.98 0.89 0.96 1.00 0.94 0.90 0.95 0.71 0.96 0.83 0.90 0 ...

  2. 【 D3.js 入门系列 --- 9.3 】 弦图生产

    我个人的博客: www.ourd3js.com csdn博客为: blog.csdn.net/lzhlzz 转载请注明出处,谢谢. 弦图( Chord ),主要用于表示两个节点之间的联系.例如以下图: ...

  3. S0.2 灰度图

    目录 灰度图定义 灰度图优点 RGB转灰度算法(OpenCV3) 量化 算法公式 OpenCV自带函数实现 综合比较 灰度图定义 对于单色(灰度)图像而言,每个像素的亮度用一个数值来表示,通常数值范围 ...

  4. 图像处理基础---RGB图 灰度图 索引图 调色板

    (1)二进制图 在二进制图中,像素的取值为两个离散数值0或1中的一个,0代表黑色,1代表白色 例 A=[0 0 1;1 1 0; 0 0 1];>> imshow(A,'InitialMa ...

  5. 快速入门系列--MVC--01概述

    虽然使用MVC已经不少年,相关技术的学习进行了多次,但是很多技术思路的理解其实都不够深入.其实就在MVC框架中有很多设计模式和设计思路的体现,例如DependencyResolver类就包含我们常见的 ...

  6. 【JAVA零基础入门系列】Day9 Java中的那个大数值

    什么是大数值?用脚趾头想也知道,当然是"大"的数值(233).Java中有两个用于表示大数值的类,BigInteger和BigDecimal,那到底能表示多大的数值呢?理论上,可以 ...

  7. 数据挖掘入门系列教程(八)之使用神经网络(基于pybrain)识别数字手写集MNIST

    目录 数据挖掘入门系列教程(八)之使用神经网络(基于pybrain)识别数字手写集MNIST 下载数据集 加载数据集 构建神经网络 反向传播(BP)算法 进行预测 F1验证 总结 参考 数据挖掘入门系 ...

  8. Spring Boot入门系列(十六)使用pagehelper实现分页功能

    之前讲了Springboot整合Mybatis,然后介绍了如何自动生成pojo实体类.mapper类和对应的mapper.xml 文件,并实现最基本的增删改查功能.接下来要说一说Mybatis 的分页 ...

  9. Spring Boot入门系列(二十)快速打造Restful API 接口

    spring boot入门系列文章已经写到第二十篇,前面我们讲了spring boot的基础入门的内容,也介绍了spring boot 整合mybatis,整合redis.整合Thymeleaf 模板 ...

随机推荐

  1. SYSTick 定时器

        CM3 内核的处理器,内部包含了一个 SysTick 定时器,(SysTick 的时钟源自 HCLK 的 8 分频,8个系统时钟周期systick跳一个,即8*1/72M=1/9 us)Sys ...

  2. Query Designer:Condition,根据KeyFigure值来过滤数据

    声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...

  3. Javascript学习笔记:闭包题解(4)

    代码: var val1=0; var val2=0; var val3=0; for(var i1=1;i1<=3;i1++){ var i2=i1; (function(){ var i3= ...

  4. 如何获得APP内部资源

    安装一个iTools(百度一下就有) 用USB连接设备,打开iTools

  5. Codeforces Round #389 (Div. 2, Rated, Based on Technocup 2017 - Elimination Round 3) D. Santa Claus and a Palindrome STL

    D. Santa Claus and a Palindrome time limit per test 2 seconds memory limit per test 256 megabytes in ...

  6. 基于Eclipse+Cordova的Android Hybrid应用开发环境搭建

    环境说明 操作系统:Windows 7 64位 Eclipse版本:4.5.2 Release(eclipse-jee-mars-2) JDK版本:1.8 搭建步骤 1.从http://www.ecl ...

  7. Android开发之Git配置

    Android开发之Git配置 1.首先git配置: 输入命令: git config --global user.name "xxx.xx" git config --globa ...

  8. jq弹出一个透明小提示窗,然后逐渐消失

      function show_main(content) { var showWindow = '<div id="show_main" style="borde ...

  9. 自定义scrollview右侧的滑动条

    在做这个功能之前我其实是拒绝的,为什么这么说呢,因为我怕麻烦啊!(开玩笑的,怕麻烦就不做程序员了) 很久没有写博客,这次刚好项目中有个有趣的东西,想拿出来分享一下,希望能帮到某些小伙伴. 首先说说需求 ...

  10. Eclipse WTP Tomcat hot deploy

    转自: http://ducquoc.wordpress.com/2010/11/06/eclipse-wtp-tomcat-hot-deploy/ One of the reasons why Ja ...