用矩形表示白点
Represent white spots by rectangles
我有这张带有白点的二值图像:
我想用一个矩形来表示每个白点,该矩形具有相同的点大小,并且如果可能的话具有相同的方向。有什么功能可以做到吗?
我可以使用 RP 检测每个点:
您可以尝试使用regionprops
如下:
I = imread('tHZhy.png');
stats = regionprops(I, 'centroid', 'Orientation', 'MajorAxisLength','MinorAxisLength', 'BoundingBox');
figure
imshow(I)
hold on
for i=1:length(stats)
xc = stats(i).Centroid;
ma = stats(i).MajorAxisLength/2;
mi = stats(i).MinorAxisLength/2;
theta = -deg2rad(stats(i).Orientation);
dx = [-ma -mi; ma -mi; ma mi; -ma mi; -ma -mi];
R = [cos(theta) -sin(theta); sin(theta) cos(theta)]; % rotation matrix
x = xc + dx*R';
plot(xc(1), xc(2), 'g*');
plot(x(:, 1), x(:, 2), 'g');
end
请注意,结果并不完美,尤其是对于相当方形的对象。因此,原因是主要尺寸在沿对角线方向时最大。
我会计算最小的 Feret 直径(最短投影)和相应的角度,以及垂直投影。这通常对应于最小的边界框。
有关计算 Feret 直径的 MATLAB 代码,请参见此处:http://www.crisluengo.net/archives/408
我有这张带有白点的二值图像:
您可以尝试使用regionprops
如下:
I = imread('tHZhy.png');
stats = regionprops(I, 'centroid', 'Orientation', 'MajorAxisLength','MinorAxisLength', 'BoundingBox');
figure
imshow(I)
hold on
for i=1:length(stats)
xc = stats(i).Centroid;
ma = stats(i).MajorAxisLength/2;
mi = stats(i).MinorAxisLength/2;
theta = -deg2rad(stats(i).Orientation);
dx = [-ma -mi; ma -mi; ma mi; -ma mi; -ma -mi];
R = [cos(theta) -sin(theta); sin(theta) cos(theta)]; % rotation matrix
x = xc + dx*R';
plot(xc(1), xc(2), 'g*');
plot(x(:, 1), x(:, 2), 'g');
end
请注意,结果并不完美,尤其是对于相当方形的对象。因此,原因是主要尺寸在沿对角线方向时最大。
我会计算最小的 Feret 直径(最短投影)和相应的角度,以及垂直投影。这通常对应于最小的边界框。
有关计算 Feret 直径的 MATLAB 代码,请参见此处:http://www.crisluengo.net/archives/408