利用matlab写出 不调用matlab自带的函数对多张二值图像进行膨胀、腐蚀的代码
时间: 2023-11-02 18:11:48 浏览: 99
图像分割与腐蚀膨胀matlab代码
可以使用Matlab中的循环结构和基本的图像处理操作,对多张二值图像进行膨胀、腐蚀操作。以下是一个示例代码:
```matlab
% 读取多张二值图像并存储在一个cell数组中
imageFiles = dir('*.bmp'); % 读取当前文件夹下所有bmp格式的图像
numImages = length(imageFiles);
images = cell(1, numImages);
for k = 1:numImages
filename = fullfile(imageFiles(k).folder, imageFiles(k).name);
images{k} = imread(filename);
end
% 定义膨胀和腐蚀的结构元素
SE_d = ones(3, 3); % 3×3的全1矩阵
SE_e = [0 0 1 0 0; 0 0 1 0 0; 1 1 1 1 1; 0 0 1 0 0; 0 0 1 0 0]; % 5×5的十字形矩阵
% 对每张二值图像进行膨胀、腐蚀操作
for k = 1:numImages
BW = images{k};
[m, n] = size(BW);
% 执行膨胀操作
BW_d = zeros(m, n);
for i = 2:m-1
for j = 2:n-1
if BW(i, j) == 1
BW_d(i-1:i+1, j-1:j+1) = 1;
end
end
end
% 执行腐蚀操作
BW_de = zeros(m, n);
for i = 3:m-2
for j = 3:n-2
if sum(sum(BW_d(i-2:i+2, j-2:j+2) & SE_e)) == sum(SE_e(:))
BW_de(i, j) = 1;
end
end
end
% 显示结果
subplot(1, numImages, k);
imshow(BW_de);
end
```
这段代码与上一个示例代码类似,不同之处在于膨胀和腐蚀操作的实现。在这个示例代码中,没有调用Matlab自带的imdilate和imerode函数,而是使用了基本的图像处理操作。在膨胀操作中,对每个白色像素的周围8个像素进行赋值;在腐蚀操作中,使用一个5×5的十字形矩阵,对每个像素判断周围的像素是否与该矩阵相交,如果相交则将该像素设为白色。需要注意的是,这里对二值图像进行操作时,都是在二值图像的像素值为1的位置进行的。
阅读全文