阅读:1693回复:22
大家看看这个图,分割图像里的小黑块 |
|
最新打赏:0人 |
沙发#
发布于:2020-03-17 19:13
如果黑块面积都一样,是否可以用 黑色区域总面积/单块小黑块面积。
|
|
板凳#
发布于:2020-03-17 20:58
|
|
地板#
发布于:2020-03-18 10:10
似乎和之前的藥丸很相似?
使用matching的方式應該不難 但這邊嘗試一下由較傳統的形態學方式處理 檢測數量為64? 沒有仔細一個一個數不確定數字對不對 可參考下列程序 dev_update_off () read_image (Image94633A699c330bb37091, 'C:/jash/test51/9_4633_a699c330bb37091.bmp') rgb1_to_gray (Image94633A699c330bb37091, GrayImage) gen_rectangle1 (ROI_0, 83.6872, 371.851, 261.495, 625.837) reduce_domain (GrayImage, ROI_0, ImageReduced) threshold (ImageReduced, Regions, 0, 60) connection (Regions, ConnectedRegions) count_obj (ConnectedRegions, Number) gen_empty_obj (EmptyObject) AS:=0 Cut:=0 for Index := 1 to Number by 1 select_obj (ConnectedRegions, ObjectSelected, Index) Phi:=0 for Phi := AS to AS+180 by 0.5 gen_rectangle2 (Rectangle, 300, 200, rad(Phi), 5, 2) opening (ObjectSelected, Rectangle, RegionOpening) area_center (RegionOpening, Area, Row, Column) if (Area[0] > 0) concat_obj (EmptyObject, RegionOpening, EmptyObject) difference (ObjectSelected, RegionOpening, ObjectSelected) endif if (Phi=AS+180) connection (ObjectSelected, ConnectedRegions1) select_shape (ConnectedRegions1, SelectedRegions, ['area','rectangularity'], 'and', [15,0.5], [99999,1]) union1 (SelectedRegions, RegionUnion) area_center (RegionUnion, Area2, Row2, Column2) if (Area2>40) Cut:=Cut+1 endif endif endfor endfor count_obj (EmptyObject, Number1) Num:=Number1+Cut |
|
4楼#
发布于:2020-03-18 22:28
|
|
5楼#
发布于:2020-03-18 22:52
sq463875952:只需要输入一个参数 单个黑色的缺陷面积 形态学参数全部自动设置,理论上能适用其余类似项目。回到原帖我重新上传了一波图片,你可以再测试下,通过面积的方法的确是可取的,只是有的时候会侧着,面积只有三分之二,你算法里的分水岭算法并不能正确分割,当然了,这里的重点是技术,不是分割显示 |
|
6楼#
发布于:2020-03-19 09:36
|
|
7楼#
发布于:2020-03-19 14:51
sq463875952:只需要输入一个参数 单个黑色的缺陷面积 形态学参数全部自动设置,理论上能适用其余类似项目。回到原帖@sc6231565:图在哪?试试 |
|
8楼#
发布于:2020-03-19 14:56
sq463875952:@sc6231565:图在哪?试试回到原帖上传了更多的图片 |
|
9楼#
发布于:2020-03-19 15:25
sc6231565:上传了更多的图片回到原帖试过了 都对着,按照你传的原图,事实上分水还能再筛选一波,筛选完在用面积准确率更高。 理论上 面积筛选随粘连数量上升准确率越来越低,但是 前一波的筛选已经让粘连数量不会超过5个,所以面积筛选只能说是一种方案,但是不是最优方案。但对于目前图像而言,都能检测。 list_files ('', ['files','follow_links','recursive'], ImageFiles) tuple_regexp_select (ImageFiles, ['\\.(tif|tiff|gif|bmp|jpg|jpeg|jp2|png|pcx|pgm|ppm|pbm|xwd|ima|hobj)$','ignore_case'], ImageFiles) for Index := 0 to |ImageFiles| - 1 by 1 read_image (Image, ImageFiles[Index]) dev_open_window (0, 0, 512, 512, 'black', WindowHandle) ***单个平均面积 dd:=80 ************* qqq:=0 **定义缩放倍数 ss:=4 dev_set_draw ('fill') rgb1_to_gray (Image, GrayImage) binary_threshold (GrayImage, Region, 'max_separability', 'dark', UsedThreshold) closing_circle (Region, RegionClosing, 10) connection (RegionClosing, ConnectedRegions) select_shape (ConnectedRegions, SelectedRegions3, 'area', 'and', 250, 99000) union1 (SelectedRegions3, RegionUnion) shape_trans (RegionUnion, SelectedRegions, 'rectangle1') reduce_domain (GrayImage, SelectedRegions, ImageReduced) crop_domain (ImageReduced, ImagePart) emphasize (ImagePart, ImageEmphasize,60, 60, 60) get_image_size (ImageEmphasize, Width, Height) threshold (ImageEmphasize, Regions, 0, 20) opening_rectangle1 (Regions, RegionOpening, 10, 10) opening_circle (RegionOpening, RegionOpening1, 6) **** area_center (RegionOpening1, Area1, Row1, Column1) ****可以进一步用分水领域求分割点 事实上缩放玩 就能用模板匹配了 懒得操作。 connection (RegionOpening1, ConnectedRegions1) select_shape (ConnectedRegions1, SelectedRegions1, 'area', 'and',800, 99999) select_shape (ConnectedRegions1, SelectedRegions2, 'area', 'and', 200,800) distance_transform (SelectedRegions1, DistanceImage, 'city-block', 'true', Width, Height) convert_image_type (DistanceImage, DistanceImageByte, 'byte') invert_image (DistanceImageByte, DistanceImageInv) scale_image_max (DistanceImageInv, DistanceImageInvScaled) watersheds_threshold (DistanceImageInv, Basins,4) intersection (Basins, SelectedRegions1, RegionIntersection) count_obj (SelectedRegions1, Number) gen_empty_obj (EmptyObject) for Index1 := 1 to Number by 1 select_obj (SelectedRegions1, ObjectSelected, Index1) area_center (ObjectSelected, Area, Row, Column) num:=Area/(650)+1 qqq:=qqq+num endfor count_obj (SelectedRegions2, Number1) www:=Number1+qqq dev_display (ImageEmphasize) dev_set_draw ('fill') dev_set_colored (12) dev_display (SelectedRegions2) dev_set_draw ('margin') dev_set_line_width (3) dev_set_color ('red') dev_display (SelectedRegions1) disp_message (WindowHandle, '未粘连数:'+Number1, 'window', 10, 12, 'black', 'true') disp_message (WindowHandle, '粘连数:'+qqq, 'window', 30, 12, 'black', 'true') disp_message (WindowHandle, '总数:'+www, 'window', 50, 12, 'black', 'true') dev_set_colored (12) * Image Acquisition 01: Do something endfor |
|
10楼#
发布于:2020-03-19 15:39
|
|
11楼#
发布于:2020-03-19 15:42
sq463875952:楼上有一个 分水领域加分类的,我觉得准确率更高,可以试试他的。他的思路可以。回到原帖分水岭的 并不能改正确分割, 这个偏计数,分割到是其次 |
|
12楼#
发布于:2020-03-19 15:54
|
|
|
13楼#
发布于:2020-03-19 16:24
sq463875952:分割都能正确区分,计数自然不在话下,我觉得分割比计数要难。。。。。所有的结果图你可以看下。目前10个样本都正确.回到原帖是的 ,都能计数成功,不错的思路 |
|
14楼#
发布于:2020-03-21 17:01
|
|
上一页
下一页