dev_close_window ()
dev_update_off ()
read_image (baseImage, 'blister/blister_reference')
get_image_size (baseImage, Width, Height)
dev_open_window_fit_image (baseImage, 0, 0, -1, -1, WindowHandle)
set_display_font (WindowHandle, 16, 'mono', 'true', 'false')
dev_set_draw ('margin')
dev_set_line_width (3)
* 1.分离通道>二值化得到外部区域>仿射变换得到基准图片>生成药丸区域
* 2.读取图片>仿射变换图片位置到基准>获取药丸位置>遍历药丸二值化判断是否有无放错
* 分离通道
access_channel (baseImage, Image, 1)
* 得到外部区域
threshold (Image, Region, 60, 255)
connection (Region, ConnectedRegions)
select_shape (ConnectedRegions, SelectedRegions, 'area', 'and', 50000, 9999999)
shape_trans (SelectedRegions, RegionTrans, 'convex')
* 仿射变换
orientation_region (RegionTrans, Phi)
area_center (RegionTrans, Area, Row, Column)
vector_angle_to_rigid (Row, Column, Phi, Row, Column, 0, HomMat2D)
affine_trans_image (Image, Base_image, HomMat2D, 'constant', 'false')
* 生成药丸区域
gen_empty_obj (base_inner_cp_region)
cp_row_number := 5
cp_column_number := 3
for Index := 1 to cp_row_number by 1
* 外循环控制row 内循环控制column
row := 85+(Index-1)*71
for Index1 := 1 to cp_column_number by 1
column := 160+(Index1-1)*151
gen_rectangle2 (Rectangle, row, column, 0, 67, 30)
concat_obj (base_inner_cp_region, Rectangle, base_inner_cp_region)
endfor
endfor
union1 (base_inner_cp_region, union_base_inner_cp_region)
affine_trans_region (RegionTrans, RegionAffineTrans, HomMat2D, 'nearest_neighbor')
orientation_region (RegionAffineTrans, Base_phi)
area_center (RegionAffineTrans, Area1, Base_row, Base_column)
image_count := 6
for Index2 := 1 to image_count by 1
read_image (Image1, 'blister/blister_'+Index2$'02')
decompose3 (Image1, ImageR, ImageG, ImageB)
threshold (ImageB, Region1, 200, 255)
connection (Region1, ConnectedRegions1)
select_shape (ConnectedRegions1, SelectedRegions1, 'area', 'and', 50000, 9999999)
fill_up (SelectedRegions1, RegionFillUp)
shape_trans (RegionFillUp, RegionTrans1, 'convex')
orientation_region (RegionTrans1, now_phi)
area_center (RegionTrans1, Area2, now_row, now_column)
vector_angle_to_rigid (now_row, now_column, now_phi, Base_row, Base_column, Base_phi, HomMat2D1)
affine_trans_image (Image1, show_image, HomMat2D1, 'constant', 'false')
affine_trans_image (ImageB, ImageAffineTrans, HomMat2D1, 'constant', 'false')
reduce_domain (ImageAffineTrans, union_base_inner_cp_region, image_reduce_out_imageB)
* 二值化得到产品
mean_image (image_reduce_out_imageB, mean_ImageB, 15, 15)
dyn_threshold (image_reduce_out_imageB, mean_ImageB, RegionDynThresh, 10, 'dark')
fill_up (RegionDynThresh, RegionFillUp1)
opening_circle (RegionFillUp1, RegionOpening, 15)
* 遍历拿到每一个产品判断灰度值
gen_empty_obj (is_null)
gen_empty_obj (is_error)
count_obj (base_inner_cp_region, Number)
for Index3 := 1 to Number by 1
select_obj (base_inner_cp_region, select_region, Index3)
intersection (select_region, RegionOpening, intersection_out_image)
min_max_gray (intersection_out_image, image_reduce_out_imageB, 0, Min, Max, Range)
area_center (intersection_out_image, Area3, Row1, Column1)
* 判断是否为空
if(Area3>0)
if (Area3<3700 or Min<60)
concat_obj (is_error, intersection_out_image, is_error)
disp_message (WindowHandle, 'NG', 'window', 12, 600, 'red', 'true')
endif
else
concat_obj (is_null, select_region, is_null)
disp_message (WindowHandle, 'NG', 'window', 12, 600, 'red', 'true')
endif
endfor
* 显示
dev_display (show_image)
dev_set_color ('green')
dev_display (RegionOpening)
count_obj (is_null, is_null_num)
count_obj (is_error, is_error_num)
dev_set_color ('red')
dev_display (is_null)
dev_display (is_error)
stop ()
endfor