《HALCON机器视觉与算法原理编程实践》第7章 颜色与纹理
文章目录
- 7.1 图像的颜色
- 7.1.1 图像的色彩空间
- 7.1.2 Bayer图像
- 7.1.3 颜色空间的转换
- 7.2 颜色通道的处理
- 7.2.1 图像的通道
- 7.2.2 访问通道
- 7.2.3 通道分离与合并
- 7.2.4 处理RGB信息
- 7.3 利用颜色信息提取背景相似的字符区域
- 7.4 纹理分析
7.1 图像的颜色
7.1.1 图像的色彩空间
(1)RGB颜色空间
(2)灰度图像
即单通道图像,每个像素的灰度值为0~255。
(3)HSV/HSI
HSV (色相hue, 饱和度saturation, 明度value), 也称HSB (B指brightness) 是艺术家们常用的,因为与加法减法混色的术语相比,使用色相,饱和度等概念描述色彩更自然直观。HSV 是RGB色彩空间的一种变形,它的内容与色彩尺度与其出处——RGB色彩空间有密切联系。
HSL (色相hue, 饱和度saturation, 亮度lightness/luminance), 也称HLS 或 HSI (I指intensity) 与 HSV非常相似,仅用亮度(lightness)替代了明度(brightness)。
7.1.2 Bayer图像
参考链接:https://www.cnblogs.com/whw19818/p/6223143.html
bayer格式图片是伊士曼·柯达公司科学家Bryce Bayer发明的,Bryce Bayer所发明的拜耳阵列被广泛运用数字图像。
对于彩色图像,需要采集多种最基本的颜色,如rgb三种颜色,最简单的方法就是用滤镜的方法,红色的滤镜透过红色的波长,绿色的滤镜透过绿色的波长,蓝色的滤镜透过蓝色的波长。如果要采集rgb三个基本色,则需要三块滤镜,这样价格昂贵,且不好制造,因为三块滤镜都必须保证每一个像素点都对齐。当用bayer格式的时候,很好的解决了这个问题。bayer 格式图片在一块滤镜上设置的不同的颜色,通过分析人眼对颜色的感知发现,人眼对绿色比较敏感,所以一般bayer格式的图片绿色格式的像素是是r和g像素的和。
另外,Bayer格式是相机内部的原始图片, 一般后缀名为.raw。很多软件都可以查看, 比如PS。我们相机拍照下来存储在存储卡上的.jpeg或其它格式的图片, 都是从.raw格式转化过来的。如下图,为bayer色彩滤波阵列,由一半的G,1/4的R,1/4的B组成。
7.1.3 颜色空间的转换
* 将一个RGB图像转换成任意的颜色空间trans_from_rgb (BlueSubRedGreen, BlueSubRedGreen, BlueSubRedGreen, ImageResult1, ImageResult2, ImageResult3, 'hsv')* 将三个任意颜色空间的3个通道图像转换为RGB图像trans_to_rgb (ImageResult1, ImageResult1, ImageResult1, ImageRed, ImageGreen, ImageBlue, 'hsv')* 创建一个颜色查找表create_color_trans_lut ('hsv', 'from_rgb', 8, ColorTransLUTHandle)
7.2 颜色通道的处理
7.2.1 图像的通道
图像通道在RGB色彩模式下就是指在下就是指那单独的红色R、绿色G、蓝色B部分。也就是说,一幅完整的图像,是由红色绿色蓝色三个通道组成的。他们共同作用产生了完整的图像。同样在HSV色系中指的是色调H,饱和度S,亮度V三个通道。
7.2.2 访问通道
* 读取图像read_image (Image2, 'data/beads.jpg')* 从Image2取出序号为1的通道图像,取名为Redaccess_channel (Image2, Red, 1)* 获取Image2图像中通道的数量count_channels (Image2, Channels)
7.2.3 通道分离与合并
* 读取图像read_image (MultiChannelImage, 'data/beads.jpg')* 通道分离decompose3 (MultiChannelImage, R, G, B)* 将多幅单通道图像合并成一幅多通道图像compose3 (R, G, B, MultiChannelImage1)* 通道分离为数组image_to_channels (MultiChannelImage, ImageArray)* 将数组内的单通道图像合并成一幅多通道图像channels_to_image (ImageArray, MultiChannelImage2)
7.2.4 处理RGB信息
read_image (Image, 'data/beads.jpg')decompose3 (Image, Red, Green, Blue)sub_image (Blue, Red, BlueSubRed, 1, 128)sub_image (BlueSubRed, Green, BlueSubRedGreen, 1, 128)threshold (BlueSubRedGreen, BlueRegion, 230, 255)
7.3 利用颜色信息提取背景相似的字符区域
read_image (Image, 'data/m105')*将原始图像进行通道分离,得到红绿蓝三个分量的图像decompose3 (Image, Red, Green, Blue)*将RGB三个分量的图像转化为H(色调)、S(饱和度)、V(明度)的图像trans_from_rgb (Red, Green, Blue, ImageResultH, ImageResultS, ImageResultI, 'hsv')*对饱和度图像阈值处理,分割出高饱和度区域,即字符区域的大致范围threshold (ImageResultS, High, 192,255)*区域分割,reduce_domain (ImageResultH, High, ImageReduced)*并进行膨胀操作dilation_circle (ImageReduced, RegionDilation, 3.5)*开运算,使边缘更清晰opening_circle (RegionDilation, RegionChars, 5.5)dev_clear_window ()dev_display (RegionChars)
7.4 纹理分析
read_image(Image, 'data/cloth')*将图像分解成RGB三个通道decompose3 (Image, Image1, Image2, Image3)*将RGB三个通道的图像,转化为HSV图像空间trans_from_rgb (Image1, Image2, Image3, ImageResult1, ImageResult2, ImageResult3, 'hsv')*进行纹理检测。*其中选择的滤波器类型是‘ls’,即行方向用‘level’,列方向用‘spot’进行检测。*这种滤波器类型适合检测垂直方向上的缺陷。texture_laws (ImageResult2, ImageTextureLS, 'ls', 2, 7) *对滤波器处理后的图像进行均值化,使图像更平滑,缺陷区域明显mean_image (ImageTextureLS, ImageMean, 11, 11)*对检测出的缺陷区域进行形态学处理并显示出来threshold (ImageMean, Regions, 60, 255)*将符合条件的区域分隔成独立区域connection(Regions, ConnectedRegions)*计算各区域的面积,提取出面积最大的区域area_center (ConnectedRegions, Area, Row, Column)select_shape (ConnectedRegions, SelectedRegions, 'area', 'and', max(Area), 99999) *做闭运算,提取出缺陷区域closing_circle(SelectedRegions, RegionClosing, 11.5)dev_clear_window ()dev_display (RegionClosing)