上图就是将相机定位后,辅以打光在离心机正上方取像而成的。由图可知,离心机内部分为四块区域,四块区域内部又分为半径大小不一的试管槽若干个,本篇文章主要就是讨论如何从相机取得的这些图像中,通过一系列算法将试管槽是否存在试管进行判断。
一、建模
建模的目的就是为了方便离心机内部旋转各种不同角度后,所取得的图像进行信息判断。
为了增强模型的参照度,我们一般选取的图片必须具备原始性。如下图所示:
为了方便进行图像处理,我们需要先把图像分离出三基色,利用单色调图像进行处理。
decompose3 (Image, R, G, B)
分离效果如下图所示:
- 小试管槽区域的手动定位建模
draw_circle (WindowHandle, Row, Column, Radius) //手动画小试管槽轮廓
gen_circle_contour_xld (ContCircle, Row, Column, Radius, 0, 6.28318, 'positive', 1) //显示所画圆形轮廓,并建立XLD模型ContCircle
gen_circle (Circle, Row, Column, Radius+10) //自动显示一个比所画圆形“轮廓”半径大10个像素的圆形“区域”
reduce_domain (R, Circle, ImageReduced) //将圆形区域隐藏
create_shape_model_xld (ContCircle, 'auto', 0, 0, 'auto', 'auto', 'ignore_local_polarity', 5, ModelID) //根据之前建立的XLD模型ContCircle创建小试管槽的模板
find_shape_model (ImageReduced, ModelID, 0, 0, 0.5, 1, 0.5, 'least_squares', 0, 0, Row1, Column1, Angle, Score) //在大圆区域内查找1个小试管槽模板
find_shape_model (R, ModelID, 0, 0, 0.5, 18, 0.5, 'least_squares', 0, 0, Row2, Column2, Angle1, Score1) //在图片R内查找18个小试管槽模板
dev_display_shape_matching_results (ModelID, 'red', Row2, Column2, Angle1, 1, 1, 0) //显示查找到的小试管槽模板
小试管槽建模效果如下图所示:
- 大试管槽区域的手动定位建模(与小试管槽同理)
draw_circle (WindowHandle, Row3, Column3, Radius1)
gen_circle_contour