图像开运算自己写的for循环 MATLAB代码
时间: 2023-11-26 22:05:11 浏览: 84
好的,以下是使用 for 循环实现图像开运算的 MATLAB 代码:
```matlab
function img_opening = opening(img, se)
% 先进行腐蚀操作
img_erode = erosion(img, se);
% 再进行膨胀操作
img_opening = dilation(img_erode, se);
end
% 腐蚀操作函数
function img_erode = erosion(img, se)
% 获取结构元素的大小
se_size = size(se, 1);
% 获取图像的大小
[img_height, img_width] = size(img);
% 创建一个全 0 的图像作为输出
img_erode = zeros(img_height, img_width);
% 对于每个像素,将结构元素与其周围的像素相乘,并取最小值
for i = 1:img_height
for j = 1:img_width
% 如果当前像素不在图像边缘
if i > floor(se_size/2) && i < img_height - floor(se_size/2) && j > floor(se_size/2) && j < img_width - floor(se_size/2)
% 获取结构元素覆盖的区域
img_region = img(i-floor(se_size/2):i+floor(se_size/2), j-floor(se_size/2):j+floor(se_size/2));
% 将结构元素与图像区域相乘并取最小值
img_erode(i, j) = min(min(img_region .* se));
end
end
end
end
% 膨胀操作函数
function img_dilate = dilation(img, se)
% 获取结构元素的大小
se_size = size(se, 1);
% 获取图像的大小
[img_height, img_width] = size(img);
% 创建一个全 0 的图像作为输出
img_dilate = zeros(img_height, img_width);
% 对于每个像素,将结构元素与其周围的像素相乘,并取最大值
for i = 1:img_height
for j = 1:img_width
% 如果当前像素不在图像边缘
if i > floor(se_size/2) && i < img_height - floor(se_size/2) && j > floor(se_size/2) && j < img_width - floor(se_size/2)
% 获取结构元素覆盖的区域
img_region = img(i-floor(se_size/2):i+floor(se_size/2), j-floor(se_size/2):j+floor(se_size/2));
% 将结构元素与图像区域相乘并取最大值
img_dilate(i, j) = max(max(img_region .* se));
end
end
end
end
```
其中,`erosion` 和 `dilation` 分别是腐蚀和膨胀操作的函数,使用了两层 for 循环实现。`opening` 函数则先进行腐蚀操作,再进行膨胀操作,从而实现了开运算。
希望这个代码对你有所帮助!
阅读全文