% 读取灰度图像 img = imread('D:\课设图片\1.jpg'); gray_img = rgb2gray(img); subplot(331),imshow(gray_img),title('原图像'); % 进行自适应阈值处理 thresh = adaptthresh(gray_img, 0.6, 'NeighborhoodSize', 111, 'Statistic', 'Mean'); % 对图像进行二值化 binary_img = imbinarize(gray_img, thresh); % 显示处理结果 subplot(332),imshow(binary_img),title('二值化图像'); % 定义腐蚀模板 se = strel('square', 4); % 对图像进行腐蚀处理 erodedImg = imerode(binary_img, se); subplot(333),imshow(erodedImg),title('腐蚀处理后的图像'); % 对二值化后的图像进行形态学处理 se = strel('disk', 5); I2 = imclose(erodedImg, se); I3 = imopen(I2, se); I4 = imopen(I3, se); subplot(334),imshow(I4),title('形态学处理'); % 定义腐蚀模板 se = strel('square', 2); % 对图像进行腐蚀处理 I5 = imerode(I4, se); subplot(335),imshow(I5),title('腐蚀处理后的图像');改进代码,用直线标志所选取的特定面积的连通域
时间: 2023-12-31 13:06:40 浏览: 149
以下是改进代码,其中标记连通域的部分使用了 regionprops 函数和 bwlabel 函数:
```matlab
% 读取灰度图像
img = imread('D:\课设图片\1.jpg');
gray_img = rgb2gray(img);
subplot(331), imshow(gray_img), title('原图像');
% 进行自适应阈值处理
thresh = adaptthresh(gray_img, 0.6, 'NeighborhoodSize', 111, 'Statistic', 'Mean');
% 对图像进行二值化
binary_img = imbinarize(gray_img, thresh);
subplot(332), imshow(binary_img), title('二值化图像');
% 定义腐蚀模板
se = strel('square', 4);
% 对图像进行腐蚀处理
erodedImg = imerode(binary_img, se);
subplot(333), imshow(erodedImg), title('腐蚀处理后的图像');
% 对二值化后的图像进行形态学处理
se = strel('disk', 5);
I2 = imclose(erodedImg, se);
I3 = imopen(I2, se);
I4 = imopen(I3, se);
subplot(334), imshow(I4), title('形态学处理');
% 定义腐蚀模板
se = strel('square', 2);
% 对图像进行腐蚀处理
I5 = imerode(I4, se);
subplot(335), imshow(I5), title('腐蚀处理后的图像');
% 标记连通域
labeledImg = bwlabel(I5); % 标记连通域
props = regionprops(labeledImg, 'Area', 'BoundingBox'); % 获取连通域信息
areas = [props.Area]; % 获取连通域面积
idx = find(areas > 1000 & areas < 5000); % 选择面积在 1000 到 5000 之间的连通域
selectedAreas = ismember(labeledImg, idx); % 标记选定的连通域
subplot(336), imshow(selectedAreas), title('选定的连通域');
% 绘制边框
subplot(337), imshow(img), title('标记连通域的原图像');
hold on;
for i = 1:length(idx)
rectangle('Position', props(idx(i)).BoundingBox, 'EdgeColor', 'r', 'LineWidth', 2);
end
hold off;
```
阅读全文