使用for循环自己编写matlable膨胀代码
时间: 2023-08-14 18:04:57 浏览: 34
下面是使用 for 循环自己编写的 matlable 膨胀代码,实现了对二值图像进行膨胀操作:
```python
import numpy as np
def dilate(img, kernel):
height, width = img.shape
k_height, k_width = kernel.shape
# 计算 padding 大小
pad_height = k_height//2
pad_width = k_width//2
# 对原图进行 padding
padded_img = np.zeros((height+pad_height*2, width+pad_width*2))
padded_img[pad_height:-pad_height, pad_width:-pad_width] = img
# 创建输出图像数组
output = np.zeros_like(padded_img)
# 对每个像素进行膨胀操作
for i in range(pad_height, height+pad_height):
for j in range(pad_width, width+pad_width):
if np.sum(kernel*padded_img[i-pad_height:i+pad_height+1, j-pad_width:j+pad_width+1]) > 0:
output[i,j] = 1
# 去除 padding
output = output[pad_height:-pad_height, pad_width:-pad_width]
return output
```
其中,`img` 为输入的二值图像,`kernel` 为给定的卷积核。在函数内部,首先计算了 padding 大小,并使用 `np.zeros` 创建了一个相应大小的全 0 数组 `padded_img`,然后将输入图像填充到 `padded_img` 的中央。接着创建了一个和 `padded_img` 相同大小的全 0 数组 `output` 作为输出图像。最后,对每个像素进行膨胀操作,根据卷积核计算该像素周围的值,并判断是否需要将该像素设为 1。由于在 padding 区域的像素并不需要进行膨胀操作,因此最后要将输出图像去除 padding。