我尝试使用手动ROI选择来跟踪对象的边界,并在原始图像上以灰度绘制轮廓。我注意到,与原始对象位置相比,轮廓发生了偏移。为什么?我的代码中遗漏了什么吗?
代码:
close all;
clear all;
clc;
I = imread('pillsetc.png');
figure('Name','pillsetc');
imshow(I)
x1 = 50;
y1 = 200
Iroi = imcrop(I,[x1,y1,400,150]);
GrayRoi = rgb2gray(Iroi);
figure('Name','pillsetcGrayCrop');
imshow(GrayRoi);
BWRoi = imbinarize(GrayRoi);
BWRoi = bwareaopen(BWRoi, 10);
BWRoi = imfill(BWRoi,'holes');
[B,L] = bwboundaries(BWRoi,'noholes');
stat = regionprops(L, 'Centroid');
figure('Name','pillsetcCropBoundaries');
imshow(rgb2gray(I));
hold on;
for k = 1 :numel(stat)
b = B{k};
c = stat(k).Centroid;
plot(b(:,2)+x1, b(:,1)+y1,'r');
end
2条答案
按热度按时间ltskdhd11#
**1.-**使用MATLAB命令
bwboundaries
没有
label2rgb
生成的颜色**2.-**对所有找到的边界进行编号
元素过多
**3.-**移除小元件
**4.-**其他有趣的命令:
imfill
:补孔,可补特定位置。imdilate
:扩展细线也可能有用imclearborder
:锉粗边egmofgnx2#
看起来您的图像并不像regionprops喜欢的那样是 * 二进制 * 的。regionprops函数似乎是从左到右的光栅扫描,最亮的开始,最暗的停止,并延迟任何渐变操作。
简单来说:
因此,如果您使暗背景一起模糊到相同的最暗级别,然后在使用区域属性处理之前,将任何非暗背景加到最亮的前景(底部两个最暗级别以上的任何灰色都设置为白色),您可能会得到更好的轮廓。