读取matlab自带的blobs.png图像,自己生成一个圆形模板,半径为5,基于该模板对blob图像进行腐蚀,膨胀,开,闭运算,并比较四中运算的差异,写出代码
时间: 2024-12-14 12:14:14 浏览: 1
首先,我们需要加载MATLAB自带的`blobs.png`图像,然后创建一个圆形模板,接着进行腐蚀、膨胀、开运算和闭运算。以下是相应的步骤及代码示例:
```matlab
% 加载图像
img = imread('blobs.png');
imshow(img);
% 创建圆形模板
radius = 5; % 半径
template = ones(size(img)) > 0 & sqrt(sum(bsxfun(@minus, im2double(img), [radius radius]) .^ 2, 2)) <= radius; % 圆形模板,中心在图像中心
% 腐蚀操作
se = strel('disk', radius); % 创建结构元素
corroded_img = imopen(img, se); % 腐蚀
imshow(corroded_img, 'InitialMagnification', 'fit');
% 膨胀操作
enlarged_img = imdilate(img, se); % 膨胀
imshow(enlarged_img, 'InitialMagnification', 'fit');
% 开运算
opened_img = imopen(img, se); % 使用相同的结构元素进行开运算
imshow(opened_img, 'InitialMagnification', 'fit');
% 闭运算
closed_img = imclose(img, se); % 结合腐蚀和膨胀
imshow(closed_img, 'InitialMagnification', 'fit');
% 比较
figure;
subplot(2, 2, 1)
imagesc(img)
title('Original Image');
subplot(2, 2, 2)
imagesc(corroded_img)
title('Corrosion');
subplot(2, 2, 3)
imagesc(enlarged_img)
title('Erosion');
subplot(2, 2, 4)
imagesc(closed_img)
title('Closing');
```
在这个代码里,我们首先通过圆的方程创建了一个模板,然后依次进行了腐蚀(去除小的连接区域)、膨胀(填充小孔)、开运算(去除小物体)和闭运算(填充小洞)。每一部分都有对应的可视化结果,以便观察这四种操作对原始图像的影响。
阅读全文