【发布时间】:2015-05-20 10:17:35
【问题描述】:
我正在尝试使用 k-NN 分类器制作对象识别程序。我有一堆图像用于分类器的训练部分,还有一堆图像要识别。这些图像是灰度的,每张图像都有一个对象。问题是只有对象的边缘(未填充),所以我不认为使用regionprops(img,'centroid') 可以正常工作,因为我理解......
那么我怎样才能得到它们的质心呢?
【问题讨论】:
标签: matlab classification centroid
我正在尝试使用 k-NN 分类器制作对象识别程序。我有一堆图像用于分类器的训练部分,还有一堆图像要识别。这些图像是灰度的,每张图像都有一个对象。问题是只有对象的边缘(未填充),所以我不认为使用regionprops(img,'centroid') 可以正常工作,因为我理解......
那么我怎样才能得到它们的质心呢?
【问题讨论】:
标签: matlab classification centroid
xenoclast 的答案应该很清楚,只是添加一些额外的东西。
当您完成使用im2bw 从您的灰度图像创建二进制图像时;如果对象的边缘是完全覆盖对象的边界,则可以直接使用regionprops(bw,'centroid'),而无需经过imfill。
【讨论】:
regionprops(bw,'centroid') 按维度顺序返回元素,这是否意味着第一个元素将是最小元素的质心,最后一个元素是区域的质心?跨度>
regionprops()返回的值是N个结构。 N 是输入图像中连通分量的数量(或对象的数量)。你可以看看这个mathworks.com/help/images/ref/… 你可以试试这个来检查返回结构的顺序。 BW = imread('text.png'); s = regionprops(BW, 'centroid'); imshow(BW) hold on for n = 1 : length(s) plot(s(n).Centroid(:, 1),s(n).Centroid(:,2), 'b*') pause(0.2) end
第一步是使用im2bw 对图像进行二值化处理。然后您可以使用imfill(img, 'holes') 将其从轮廓变为实心。之后regionprops 将按预期工作。
【讨论】:
imfill 自行生成 gui,但使用 imfill(img, 'holes') 是一个自动过程(只要您的大纲已关闭)。