图像处理之三---摄像头灰度值处理

上一节介绍了几种二值化方法,二值化的方法还有很多种(拉布拉斯边缘检测,canny边缘检测),图像处理是一个很深入的课程,想要学好首先要求有着深厚的数学功底,线性代数必须要学好,而且把每个算法都搞懂是很花时间的一件事,我们不必花费太多时间在这方面,浪费太多时间就有点舍本诼末了,(当然专门做图像处理的同学除外),只要自己二值化能处理好(用时短,鲁棒性强)即可。

 

这一节我们来介绍灰度处理和基于灰度的颜色识别

预备知识:

1、像素点

像素点是最小的图像单元,一张图片由好多的像素点组成。比如下方图像

可以看到图片尺寸是472*493 表示图片是由一个472*493的像素点矩阵构成的,这张图片的宽度是472个像素点的长度,高度是493个像素点的长度,共有472*493 = 232 696个像素点。

由此可以知道我们平时使用的一些TFT彩屏或者OLED屏幕的像素点数值,比如128*120的TFT彩屏 64*128的OLED屏幕

2.RGB

RGB色彩模式是工业界的一种颜色标准,是通过对红(R)、绿(G)、蓝(B)三个颜色通道的变化以及它们相互之间的叠加来得到各式各样的颜色的,RGB即是代表红、绿、蓝三个通道的颜色,一个像素点的颜色是由RGB三个值来表现的

这个应该都了解,不做过多介绍

3.屏幕分辨率

屏幕分辨率是屏幕每行的像素点数*每列的像素点数,每个屏幕有自己的分辨率。屏幕分辨率越高,所呈现的色彩越多,清晰度越高。

1什么是灰度

首先我们知道了什么是二值化图像(只有0和255的灰度图像),那么在这个基础上,我们来了解一下灰度图

灰度是表明图像明暗的数值,即黑白图像中点的颜色深度,把白色与黑色之间按对数关系分成若干级,称为“灰度等级”范围一般从0到255,白色为255 ,黑色为0,故黑白图片也称灰度图像。灰度值指的是单个像素点的亮度。灰度值越大表示越亮。

灰度就是没有色彩,RGB色彩分量全部相等。如果是一个二值灰度图象,它的象素值只能为0或1,我们说它的灰度级为2。用个例子来说明吧:一个256级灰度的图象,如果RGB三个量相同时(R=G=B),如:RGB(100,100,100)就代表灰度为100,RGB(50,50,50)代表灰度为50。

这样可以很容易看出灰度图于RGB图像的区别

 

2灰度化处理

彩色图象的灰度其实在转化为黑白图像后的像素值(是一种广义的提法),转化的方法看应用的领域而定,一般按加权的方法转换,R, G,B 的比一般为3:6:1。

任何颜色都由红、绿、蓝三基色组成,假如原来某点的颜色为RGB(R,G,B),那么,我们可以通过下面几种方法,将其转换为灰度:

1.浮点算法:Gray=R*0.3+G*0.59+B*0.11

2.整数方法:Gray=(R*30+G*59+B*11)/100

3.移位方法:Gray =(R*77+G*151+B*28)>>8;

4.平均值法:Gray=(R+G+B)/3;

5.仅取绿色:Gray=G;

通过上述任一种方法求得Gray后,将原来的RGB(R,G,B)中的R,G,B统一用Gray替换,形成新的颜色RGB(Gray,Gray,Gray),用它替换原来的RGB(R,G,B)就是灰度图了

由此我们可以得到不同颜色的灰度值了,那么怎么样做颜色检测呢。

2.颜色识别

最简单的方法就是:计算相对应颜色的灰度值,然后做灰度值检测,判断是否识别到颜色,

这样做可以识别,但是存在一些坑:

1.单纯用一个颜色灰度值,可能有干扰,很难正确识别,需要灰度范围值,但是这个范围就有的讲了

2.物体灰度值很容易受到光线影响

3.计算值与实际测值有偏差,这个值不可避免地,因为各种因素影响,甚至你的物体颜色不纯正(类似正红和中国红区别)

所以建议使用自己测出来的灰度值与计算值做一个均衡处理。

4.摄像头在不同曝光下相同物体灰度值会有所偏差

如果真的要做颜色识别处理(可以考虑HSV颜色模型,RGB颜色识别,HSL处理)这里附上几个个人认为可以的博客,可以参阅

https://blog.csdn.net/hongbin_xu/article/details/54911339

http://www.noobyard.com/article/p-hmbluxhz-qd.html

https://blog.csdn.net/hanshanbuleng/article/details/80383813

那么还是回到正题,对于灰度值检测的颜色识别,虽然比较简陋,但是也是可以使用,至少现在加上一些处理之后使用效果还行,我个人是在对图像进行画中线处理中加上了几个判断,检测到预期灰度值达到一定范围就跳出,减少代码执行次数,代码实现很简单,又做了一些处理之后目前可以实现检测红色障碍,虽然还是会受到一定的光线影响,但整体效果可以,

每个人的思想不同,解决问题的方法也是层出不穷,这里我们给出思路,具体实现还是要靠自己调试,发现问题,不断改进,这样才能有一个很好的理解