天天看点

【Halcon机器视觉】ch7 颜色和纹理

彩色图像和灰度图像:彩色图像具备更多信息,可以进行目标区域分析等

图像的颜色

  • RGB颜色
  • 灰度图像
  • HSV:色调Hue、饱和度Saturation、纯度Value
  • HSI: 色调Hue、饱和度Saturation、亮度Intensity

Bayer

使用单芯片和一个Bayer滤色片过滤光线得到不同通道信息,输出的图像就叫做Bayer图像,每个像素只有一个颜色分量的图像

图像通道

RGB+灰度图表示像素的透明度

  • 访问通道:access_channel()
  • 通道数量查询:count_channels()
  • 通道合并:compose3() 逆操作 channels_to_image():数组通道合成图像
  • 通道分离:decompose3() decompose4() image_to_channels():分解包含多个单个通道的图像数组(Array)
read_image(Image,'fpc')
dev_open_window(0, 0, 512, 512, 'black', WindowHandle)
dev_display(Image)
*获取图像通道数量
count_channels(Image, Channels)
*访问某一指定的通道
access_channel(Image, Image4, 2)
*分离RGB图像为3个通道
decompose3(Image, Image1, Image2, Image3)
*把三通道图像合成RGB图像
compose3(Image1, Image2, Image3, MultiChannelImage)
*将数组内多张单通道图像合成一幅多通道图像
read_image(Images,['fpc','fpc','fpc'])
channels_to_image(Images, MultiChannelImage1)
count_channels(Images,channels)

           
【Halcon机器视觉】ch7 颜色和纹理

处理RGB图像

对图像各通道进行相加、减、乘、除操作。

read_image(Image, 'zhuzi')
decompose3(Image, Image1, Image2, Image3)
dev_display(Image3)
sub_image(Image1, Image2, ImageSub, 1, 128)
add_image(Image1, Image2, Imageadd, 0.5, 0)
div_image(Image1, Image2, Imagediv, 255, 0)
mult_image(Image1, Image2, Imagemult, 0.005, 0)

sub_image(ImageSub, Imagemult, ImageSub1, 1, 128)
threshold(ImageSub1, Region, 240, 255)
dev_clear_window()
dev_display(Region)
*腐蚀
erosion_circle(Region, RegionErosion, 1.5)
dev_clear_window()
dev_display(RegionErosion)


           
【Halcon机器视觉】ch7 颜色和纹理

通过通道操作,把红色 紫色的珠子区域提取了出来

【Halcon机器视觉】ch7 颜色和纹理

利用颜色信息提取背景相似的字符区域

【Halcon机器视觉】ch7 颜色和纹理
read_image(Image, 'M105')
rgb1_to_gray(Image, GrayImage)
*灰度对比度不大

decompose3(Image, Image1, Image2, Image3)
*B对比度较大

*rgb转化为HSV,色调 饱和度,明度
trans_from_rgb(Image1, Image2, Image3, ImageResult1, ImageResult2, ImageResult3, 'hsv')
add_image(ImageResult2, ImageResult3, ImageResult, 0.5, 0)
*HSV对比度也不大

*选择B通道
rgb1_to_gray(Image2, GrayImage1)
threshold(GrayImage1, Region1,60, 89)
*区域分割
reduce_domain(GrayImage1, Region1, ImageReduced)
erosion_circle(Region1, RegionErosion, 3.5)
*膨胀操作
dilation_circle(RegionErosion, RegionDilation, 3.5)
*开运算
opening_circle(RegionDilation, RegionOpening, 3.5)
dev_clear_window()
dev_display(RegionOpening)

           
【Halcon机器视觉】ch7 颜色和纹理
【Halcon机器视觉】ch7 颜色和纹理

纹理分析

对于很难用颜色区分析处理的图像,不妨用纹理分析,纹理是图像表面的灰度变化,规则局部的重复部分为纹理单元。

纹理滤波器:texture_laws(),该算子提供7种纹理滤波器的集合:level、edge、spot、wave、ripple、undulation、oscillation。水平、边缘、斑点、波浪、波纹、波动、振荡

第三个参数是上述组合,如ls,代表行方向滤波器类型为level,列方向上采用spot,

ls类型适合检测垂直方向上的缺陷

【Halcon机器视觉】ch7 颜色和纹理
*读取布料图像
read_image(Image, 'zhehen')
*将图像分解为R G B三通道图像
decompose3(Image, Image1, Image2, Image3)
*将RGB转换为HSV颜色空间
trans_from_rgb(Image1, Image1, Image1, ImageResult1, ImageResult2, ImageResult3, 'hsv')
*进行纹理分析
*选择滤波器类型ls
*ls适合分析垂直上的缺陷
texture_laws(ImageResult3, ImageTexture, 'ls', 2, 7)
*均值滤波
mean_image(ImageTexture, ImageMean, 9,9)
*阈值分割
threshold(ImageMean, Region, 136, 255)
*分离区域
reduce_domain(ImageMean, Region, ImageReduced)
*开运算 先腐蚀后膨胀
opening_circle(ImageReduced, RegionOpening, 1)
dev_clear_window()
dev_display(RegionOpening)
*分割为独立区域
connection(RegionOpening, ConnectedRegions)
*计算各区域面积,提取最大
area_center(ConnectedRegions, Area, Row, Column)
select_shape(ConnectedRegions, SelectedRegions, 'area', 'and', 150, 99999)
*闭操作,提取有缺陷区域
closing_circle(SelectedRegions, RegionClosing, 11.5)
dev_clear_window()
dev_display(SelectedRegions)

           
【Halcon机器视觉】ch7 颜色和纹理
【Halcon机器视觉】ch7 颜色和纹理

检测纸折痕

【Halcon机器视觉】ch7 颜色和纹理

原木计数

【Halcon机器视觉】ch7 颜色和纹理
*关闭当前窗口,清空屏幕
dev_close_window()
*读取一张图片
read_image(Image,'mu.jpg')
*获取图像大小,以建立合适尺寸的窗口
get_image_size(Image,Width,Height)
dev_open_window(0,0,Width,Height,'black',WindowHandle)
*显示读取的图像
dev_display(Image)
*将图像转换为单通道灰度图像
rgb1_to_gray(Image,GrayImage)
*显示灰度图像
dev_display(GrayImage)
*使用阈值提取较亮的部分
threshold(GrayImage,DarkArea,125,255)
*清空窗口并显示亮的部分
dev_clear_window()
dev_display(DarkArea)
*腐蚀
erosion_circle(DarkArea, RegionErosion, 5.5)
*清空窗口并显示亮的部分
dev_clear_window()
dev_display(RegionErosion)
dilation_circle(RegionErosion, RegionDilation, 3.5)
*将不相连的区域整体分割成独立的区域
connection(RegionDilation,ConnectedRegions)
* 排除杂点,将面积较大的目标选择出来
select_shape(ConnectedRegions,SelectedRegions,'area','and',150,99999)
*目标计数
count_obj(SelectedRegions,Number)
*即将显示文字,将文字颜色设置为黑色
dev_set_color('white')
*确定文字显示区域
set_tposition(WindowHandle,150,100)
*设置字体
set_font(WindowHandle,'-System-24-*-0-0-0-1-GB2312_CHARSET-')
*窗口输出文字
write_string(WindowHandle,'有'+Number+'个木头')

*end

           
【Halcon机器视觉】ch7 颜色和纹理

根根根

【Halcon机器视觉】ch7 颜色和纹理
【Halcon机器视觉】ch7 颜色和纹理

继续阅读