用HSV的方式进行颜色识别
用HSV的方式进行颜色识别时受光照影响较大。
* Image Acquisition 01: Code generated by Image Acquisition 01
* Image Acquisition 01: Code generated by Image Acquisition 01
*颜色识别
dev_close_window ()
dev_open_window (0, 0, 512, 512, 'black', WindowHandle)
for i:=1 to 2 by 1
read_image (Image, 'cable'+i)
decompose3 (Image, Red, Green, Blue)
*分割图像为R,G,B三个图像
trans_from_rgb (Red, Green, Blue, Hue, Saturation, Intensity, 'hsv')
*转换为HSV图像
threshold (Saturation, Region, 128, 255)
*将图像明显的S分量图像二值化
reduce_domain (Hue, Region, ImageReduced)
*从H通道中获得特定区域Region位置的图像(通过reduce_domain确实能获得特定区域Region位置的图像,但是,reduce_domain是缩小一个图像的定义域,并不缩小图像的实际尺寸,即新图像ImageReduced尺寸大小并未发生变化。)
threshold (ImageReduced, Yellow, 20, 50)
*用灰度直方图选取黄色的区域
connection (Yellow, ConnectedRegions)
*将选取形成一个连通域
select_shape_std (ConnectedRegions, SelectedRegions, 'max_area', 70)
*轮廓直方图选择区域
closing_circle (SelectedRegions, RegionClosing, 3.5)
*闭运算
reduce_domain (ImageReduced, RegionClosing, ImageReduced1)
*获得指定区域RegionClosing的图像
dev_display (ImageReduced)
dev_display (ImageReduced1)
endfor
颜色识别步骤:
1.采集
2.预处理:
对比度:
scale_image:对图像做比例运算
emphasize:图像分割
gray_range_rect:确定一个矩形的灰度值范围
equ_hist_image:直方图均衡化.
去噪:
中值滤波:
均值滤波:
高斯滤波:
3.图像分割:
blob分析:
二值化:threshold
形状选择:select_shape_std
形态学:
4.特征识别及计算:
5显示或通信:
* Image Acquisition 01: Code generated by Image Acquisition 01
* Image Acquisition 01: Code generated by Image Acquisition 01
*颜色识别案例——识别不同颜色糖豆
while(true)
read_image (Image, 'printer_chip/printer_chip_01')
decompose3 (Image, Red, Green, Blue)
*图像分割
trans_from_rgb (Red, Green, Blue, Hue, Saturation, Intensity, 'hsv')
*灰度转换
threshold (Hue, Region, 128, 255)
*用灰度直方图提取特定灰度区域
connection (Region, ConnectedRegions)
*按特定区域形成连通域
select_shape_std (ConnectedRegions, SelectedRegions, 'max_area', 70)
*用特征直方图提取特定区域
endwhile
用MLP训练学习进行颜色识别
* Image Acquisition 01: Code generated by Image Acquisition 01
* Image Acquisition 01: Code generated by Image Acquisition 01
open_framegrabber ('File', 1, 1, 0, 0, 0, 0, 'default', -1, 'default', -1, 'false', 'printer_chip/printer_chip_01', '', 1, 2, AcqHandle)
grab_image_start (AcqHandle, -1)
grab_image_async (Image, AcqHandle, -1)
get_image_size (Image, Width, Height)
*读取图像
dev_close_window ()
dev_open_window (0, 0, 512, 512, 'black', WindowHandle)
Regions:= ['黄','红','绿','橙','背景']
gen_empty_obj(Classes)
for i :=1 to |Regions| by 1
dev_display (Image)
dev_display (Classes)
disp_message (WindowHandle, '请选择指定区域', 'window', 12, 12, 'black', 'true')
draw_rectangle1 (WindowHandle, Row1, Column1, Row2, Column2)
gen_rectangle1 (Rectangle, Row1, Column1, Row2, Column2)
concat_obj (Rectangle, Classes, ObjectsConcat)
endfor
*手动规划检测样本
create_class_mlp (3, 7, 5, 'softmax', 'normalization', 3, 42, MLPHandle)
add_samples_image_class_mlp (Image, Classes, MLPHandle)
*创建深度学习框架
disp_message (WindowHandle, '开始训练模型', 'window', Row1, Column1, 'black', 'true')
train_class_mlp (MLPHandle, 400, 0.5, 0.01, Error, ErrorLog)
*训练模型
while(true)
grab_image_async (Image,AcqHandle, -1)
classify_image_class_mlp (Image, ClassRegions, MLPHandle, 0.5)
*识别
count_obj (ObjectsConcat, Number)
for Index :=1 to 5 by 1
dev_clear_window ()
copy_obj (ObjectsConcat, ObjectsSelected, Index, 1)
dev_display (Image)
dev_display (ObjectsSelected)
disp_message (WindowHandle, Regions[Number-Index], 'window', Row1, Column1, 'black', 'true')
*显示
stop()
endfor
endwhile
close_framegrabber (AcqHandle)