自己写的function腐蚀膨胀开运算MATLAB代码
时间: 2023-11-06 17:04:05 浏览: 93
膨胀 腐蚀,膨胀腐蚀开运算闭运算,matlab
5星 · 资源好评率100%
好的,以下是腐蚀、膨胀和开运算的 MATLAB 代码实现:
腐蚀操作:
```matlab
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
```
膨胀操作:
```matlab
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
```
开运算操作:
```matlab
function img_opening = opening(img, se)
% 先进行腐蚀操作
img_erode = erosion(img, se);
% 再进行膨胀操作
img_opening = dilation(img_erode, se);
end
```
以上是腐蚀、膨胀和开运算的 MATLAB 代码实现,希望能对你有所帮助!
阅读全文