% 读取灰度图像 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 > 2200 & areas < 2800); % 选择面积在 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;
时间: 2024-01-05 17:02:21 浏览: 106
读取灰度图像
4星 · 用户满意度95%
这段代码是对一张灰度图像进行自适应阈值处理、形态学处理和连通域分析,最终在原图像上标记出符合要求的连通域并绘制边框。
具体步骤如下:
1. 读取一张彩色图像并将其转换成灰度图像。
2. 使用 adaptthresh 函数对灰度图像进行自适应阈值处理,得到二值化图像。
3. 使用 imerode 函数对二值化图像进行腐蚀处理,去除不必要的细节。
4. 使用 imclose 和 imopen 函数对腐蚀处理后的图像进行形态学处理,进一步去除噪声和小的不连续区域。
5. 使用 bwlabel 函数对处理后的图像进行连通域分析,获取连通域面积信息。
6. 根据连通域面积信息选取符合要求的连通域并标记出来。
7. 在原图像上绘制符合要求的连通域的边框。
其中,使用 imerode 函数进行腐蚀处理时,使用了一个 4×4 的正方形腐蚀模板;使用 imclose 和 imopen 函数进行形态学处理时,使用了一个半径为 5 的圆形结构元素。在选择符合要求的连通域时,选取面积在 2200 到 2800 之间的连通域,这个范围可以根据实际需求进行调整。在绘制连通域边框时,使用了 Matlab 中的 rectangle 函数,将连通域的边框绘制成红色。
阅读全文