目录
1. 介绍
2. code
1. 介绍
灰度级形态学将形态学在二值图像的处理中扩展到灰度图像
灰度腐蚀:得到kernel 处理子区域的最小值
因此:灰度腐蚀后的图像整体偏暗,并且亮特征减少
灰度膨胀:得到kernel 处理子区域的最大值
同二值图像 膨胀运算一样,需要将结构元先反射,绕原点选择180。但通常使用的结构元都是对称的,因此可以不用考虑反射的问题
因此:灰度膨胀后的图像整体偏亮,并且暗特征减少
灰度腐蚀就是统计排序滤波器里面的最小值滤波器
灰度膨胀就是统计排序滤波器里面的最大值滤波器
2. code
首先将 空间滤波-统计排序滤波器 里面的算法代码拷贝
import cv2
import numpy as npdef statistical_sorting_filter(img, kernel_size=3, transform='median'):height, width = img.shape[:2] # 获取图像的长宽ksize = kernel_size # 滤波器的sizepad = int((ksize - 1) / 2) # padding 的大小img_pad = np.pad(img, pad, mode="edge") # 将原图进行边缘上的填充for i in range(pad, pad + height): # 遍历img_pad 图像的点,将滤波后的带能赋值给原图img对应位置for j in range(pad, pad + width):value = img_pad[i - pad:i + pad + 1, j - pad:j + pad + 1] # 取出子区域if transform == 'max': # 最大值滤波img[i - pad][j - pad] = np.max(value)if transform == 'min': # 最小值滤波img[i - pad][j - pad] = np.min(value)return img.astype(np.uint8)img = cv2.imread('./flower.jpg', 0)img_ssf_min = statistical_sorting_filter(img.copy(), transform='min') # 统计滤波器处理-min
img_ssf_max = statistical_sorting_filter(img.copy(), transform='max') # 统计滤波器处理-maxkernel = cv2.getStructuringElement(cv2.MORPH_RECT,(3,3))
img_erode = cv2.erode(img,kernel) # 腐蚀
img_dilate = cv2.dilate(img,kernel) # 膨胀cv2.imshow('erode', np.hstack((img,img_ssf_min,img_erode)))
cv2.imshow('dilate', np.hstack((img,img_ssf_max,img_dilate)))cv2.waitKey()
cv2.destroyAllWindows()
处理结果为:
图像顺序:原图、统计排序滤波器的min滤波、腐蚀图
图像顺序:原图、统计排序滤波器的max滤波、膨胀图
处理的结果是一样的