正如我在上一个问题中所述,您应该使用边缘过滤器
然后测量质心:
image=导入[“https://i.sstatic.net/2fjQth5M.png"];edge=边缘检测[图像,2];centers=ComponentMeasurements[边,“质心”]//值;HighlightImage[图像,点@中心,图像大小->400]
![在此处输入图像描述](https://i.sstatic.net/27QtTeM6.png)
现在创建剪裁的Voroni网格:
imgBounds=转置[{{0,0},图像维度[image]}];vm=VoronoiMesh[中心,imgBounds,网格单元样式->{{2,全部}->Black,{1,全部}->White}]
![在此处输入图像描述](https://i.sstatic.net/wiKokBLY.png)
您还可以将其转换回图像,并乘以图像的圆形部分,以查看其对齐情况。我必须删除Voroni Mesh周围的白色边框,以便对齐:
场景=图像@显示[vm,图形[{洋红色,点[centers]}]];(*去掉白色边框*)blackPix=图像值位置[场景,黑色];bounds=最小值/@(Transpose[blackPix]);argTake=加入[{scene},反转@bounds];场景=ImageTake@@argTake;(*缩放到图像大小*)scene=ImageResize[scene,ImageDimensions[image]];circ=Binarize[image,0.99]//颜色否定;ImageMultiply[scene,circ]+ColorNegate[circ]
![![![![在此处输入图像描述](https://i.sstatic.net/M6CxNkZp.png)
我们看到Voroni Mesh看起来与原始图像相当。
如果你想继续使用你的方法,你可以使用流域组件
,但您需要删除圆外部的所有小而嘈杂的流域:
cells=流域组件[image];cellImg=单元格//着色
![在此处输入图像描述](https://i.sstatic.net/Cb8VJFYr.png)
这可以通过以下方式实现删除SmallComponents
:
最小尺寸=100;newCells=DeleteSmallComponents[cellImg,minSize]
![在此处输入图像描述](https://i.sstatic.net/V0NJvDdt.png)
现在测量质心并高亮显示:
centers00=组件测量[newCells,“质心”];centers0=中心00[[全部,2]];HighlightImage[图像,点@中心0]
![在此处输入图像描述](https://i.sstatic.net/kERf8pcb.png)
并使用与之前相同的方法创建剪裁的Voroni网格,将其转换为图像,然后查看圆形部分:
vm=VoronoiMesh[中心0,imgBounds,网格单元样式->{{2,全部}->Black,{1,全部}->White}];场景=图像@显示[vm,图形[{洋红色,点[centers0]}]];(*去掉白色边框*)blackPix=ImageValuePositions[场景,黑色];bounds=最小值/@(Transpose[blackPix]);argTake=加入[{scene},反转@bounds];场景=ImageTake@@argTake;(*缩放到图像大小*)scene=ImageResize[scene,ImageDimensions[image]];circ=二值化[图像,0.99]//ColorNegate;ImageMultiply[scene,circ]+ColorNegate[circ]
![![![在此处输入图像描述](https://i.sstatic.net/g1acNjIz.png)