还不会做图像识别?看完这个灰度化处理就懂了!

Posted 电子发烧友网

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了还不会做图像识别?看完这个灰度化处理就懂了!相关的知识,希望对你有一定的参考价值。

大多数的图像处理算法,都是从灰度化处理开始。当开始接触图像处理的童鞋,可能跟我一样,经常会看到诸如彩色图像存储、转化为灰度图,灰度化、二值化处理,对这些概念迷惑过,具体不知道要怎么做。那么今天小编就给大家详细介绍这两个概念。开篇之前,先对图像基础颜色RGB做简单了解。

  

在图像处理中,用RGB三个分量(R:Red,G:Green,B:Blue),即红、绿、蓝三原色来表示真彩色,R分量,G分量,B分量的取值范围均为0~255,比如电脑屏幕上的一个红色的像素点的三个分量的值分别为:255,0,0。

 

像素点

 

像素点是最小的图像单元,一张图片由好多的像素点构成,下图是一张美女的大白腿的图片。


还不会做图像识别?看完这个灰度化处理就懂了!

查看这张图片的信息,尺寸是800 * 800 的,宽度是800像素,高度是800像素。也就是说这张图片是由一个800 * 800的像素点矩阵构成的(不理解矩阵是什么意思的话,可以把矩阵理解为C语言中的二维数组),这个矩阵是800行,800列,像素是图像的最小单元,这张图片的宽度是800个像素点的长度,高度是800个像素点的长度,共有800 * 800 = 640000个像素点。


还不会做图像识别?看完这个灰度化处理就懂了!

因为一个像素点的颜色是由RGB三个值来表现,所以一个像素点矩阵对应三个颜色向量矩阵,分别是R矩阵,G矩阵,B矩阵,它们也都是800 *800大小的矩阵。下面展示这张美女图片的一部分颜色矩阵数据:

 

这个是R矩阵中的一部分

还不会做图像识别?看完这个灰度化处理就懂了!


这个是G矩阵中的一部分


还不会做图像识别?看完这个灰度化处理就懂了!

这个是B矩阵中的一部分


还不会做图像识别?看完这个灰度化处理就懂了!

比如每个矩阵的第一行第一列的值分别为:R:240,G:223,B:204,所以这个像素点的颜色就是(240,223,204),三个矩阵的值不一定一一对应,这样做只是为了便于读者理解。

 

还不会做图像识别?看完这个灰度化处理就懂了!

图像的灰度化

 

在理解了一张图片是由一个像素点矩阵构成之后,我们就知道我们对图像的处理就是对这个像素点矩阵的操作,想要改变某个像素点的颜色,我们只要在这个像素点矩阵中找到这个像素点的位置,比如第x行,第y列,所以这个像素点在这个像素点矩阵中的位置就可以表示成(x,y),因为一个像素点的颜色由红、绿、蓝三个颜色变量表示,所以我们通过给这三个变量赋值,来改变这个像素点的颜色,比如改成红色(255,0,0),可以表示为(x,y,(R=255,G=0,B=0))。


那么什么叫图片的灰度化呢?其实很简单,就是让像素点矩阵中的每一个像素点都满足下面的关系:R=G=B(就是红色变量的值,绿色变量的值,和蓝色变量的值,这三个值相等,“=”的意思不是程序语言中的赋值,是数学中的相等),此时的这个值叫做灰度值。

 

灰度处理的方法:

 

 一般灰度处理经常使用两种方法来进行处理。

 

方法1:

灰度化后的R=(处理前的R + 处理前的G +处理前的B)/ 3

灰度化后的G=(处理前的R + 处理前的G +处理前的B)/ 3

灰度化后的B=(处理前的R + 处理前的G +处理前的B)/ 3

 

美女图片经过方法1进行灰度化后的效果如下:


还不会做图像识别?看完这个灰度化处理就懂了!

方法2:

灰度化后的R =  处理前的R * 0.3+ 处理前的G * 0.59 +处理前的B * 0.11

灰度化后的G =  处理前的R * 0.3+ 处理前的G * 0.59 +处理前的B * 0.11

灰度化后的B =  处理前的R * 0.3+ 处理前的G * 0.59 +处理前的B * 0.11

 

美女图片经过方法2进行灰度化后的效果如下:


还不会做图像识别?看完这个灰度化处理就懂了!

个人觉得第二种方法处理的效果比较好,第一种方法处理后的图片有点模糊。

 

还不会做图像识别?看完这个灰度化处理就懂了!

图像的二值化

 

什么叫图像的二值化?二值化就是让图像的像素点矩阵中的每个像素点的灰度值为0(黑色)或者255(白色),也就是让整个图像呈现只有黑和白的效果。在灰度化的图像中灰度值的范围为0~255,在二值化后的图像中的灰度值范围是0或者255。

 

黑色:

二值化后的R =  0

二值化后的G =  0

二值化后的B =  0

 

白色:

二值化后的R =  255

二值化后的G =  255

二值化后的B =  255

 

那么一个像素点在灰度化之后的灰度值怎么转化为0或者255呢?比如灰度值为100,那么在二值化后到底是0还是255?这就涉及到取一个阀值的问题。


常用的二值化方法:

 

方法1:

取阀值为127(相当于0~255的中数,(0+255)/2=127),让灰度值小于等于127的变为0(黑色),灰度值大于127的变为255(白色),这样做的好处是计算量小速度快,但是 缺点也是很明显的,因为这个阀值在不同的图片中均为127,但是不同的图片,他们的颜色分布差别很大,所以用127做阀值,白菜萝卜一刀切,效果肯定是不好的。

 

方法2:

计算像素点矩阵中的所有像素点的灰度值的平均值avg

(像素点1灰度值+...+像素点n灰度值)/ n = 像素点平均值avg

然后让每一个像素点与avg一一比较,小于等于avg的像素点就为0(黑色),大于avg的 像素点为255(白色),这样做比方法1好一些。

 

方法3:

使用直方图方法(也叫双峰法)来寻找二值化阀值,直方图是图像的重要特质。直方图方法认为图像由前景和背景组成,在灰度直方图上,前景和背景都形成高峰,在双峰之间的最低谷处就是阀值所在。取到阀值之后再一一比较就可以了。

 

下面给出一张美女图片二值化后的效果图:(漂亮的大白腿依稀可见。)


还不会做图像识别?看完这个灰度化处理就懂了!


针对LabVIEW视觉初学者更好地学习入门机器视觉、图像识别处理。编者给大家准备了LabVIEW视觉大礼包(入门基础+编程实例+项目案例+深度学习)电子书。想领取资料的学员,可以联系文末的助教老师微信领取。


还不会做图像识别?看完这个灰度化处理就懂了!

还不会做图像识别?看完这个灰度化处理就懂了!


助教老师木木



以上是关于还不会做图像识别?看完这个灰度化处理就懂了!的主要内容,如果未能解决你的问题,请参考以下文章

Nginx可以做什么?看完这篇你就懂了

Nginx可以做什么?看完这篇你就懂了

图像识别入门5 二值化处理

python图像处理(灰度化)

python图像处理(灰度化)

图像二值化后里面有白点,怎么去除