matlab实现把二值图片多个小白块距离近的圈在一个大矩形框里
时间: 2024-03-10 16:46:57 浏览: 75
可以使用MATLAB中的regionprops函数来获取二值图片中的连通区域的属性,然后根据这些属性来判断小白块之间的距离和位置关系,最后在相邻的小白块之间画一个大矩形框来将它们框起来。
以下是一些关键步骤的示例代码:
```matlab
% 读入二值图片
bw = imread('binary_image.png');
% 获取连通区域的属性
cc = bwconncomp(bw);
stats = regionprops(cc, 'BoundingBox');
% 将小白块按照位置排序
bbox_centers = zeros(length(stats), 2);
for i = 1:length(stats)
bbox_centers(i,:) = stats(i).BoundingBox(1:2) + 0.5*stats(i).BoundingBox(3:4);
end
[~, sort_idx] = sort(bbox_centers(:,1));
% 判断相邻小白块之间的距离
min_dist = 20; % 设置最小距离
group_idx = zeros(length(stats), 1);
curr_group = 1;
for i = 2:length(stats)
if bbox_centers(sort_idx(i),1) - bbox_centers(sort_idx(i-1),1) < min_dist
group_idx(sort_idx(i)) = curr_group;
else
curr_group = curr_group + 1;
end
end
% 在相邻小白块之间画大矩形框
figure; imshow(bw); hold on;
for i = 1:max(group_idx)
group_bbox = stats(group_idx == i).BoundingBox;
x = min(group_bbox(:,1));
y = min(group_bbox(:,2));
w = max(group_bbox(:,1) + group_bbox(:,3)) - x;
h = max(group_bbox(:,2) + group_bbox(:,4)) - y;
rectangle('Position', [x, y, w, h], 'EdgeColor', 'r', 'LineWidth', 2);
end
```
这段代码将会在原图上画出所有距离近的小白块的大矩形框。你可以根据需要调整代码中的最小距离、线条颜色和宽度等参数。
阅读全文