眼底图像分析需要首先获取ROI 感兴趣区,这样在后续的处理中能有效避免ROI 区域外的像素的影响,降低运算的复杂度。
一般选取彩色眼底图像最能反映光照情况的红色通道灰度图进行处理,包括两步:阈值处理和形态学腐蚀操作。
我们用彩色眼底图像的红色通道做了mask 掩膜图,得到满意的结果。
代码如下:
#从目录下读取彩色眼底图,
img_ori = cv2.imread('./dataset/1.jpg')
#调整到图像统一尺寸
img_resized = cv2.resize(img_ori, (width, height), interpolation=cv2.INTER_CUBIC)
#分离出红色通道
b,g,r = cv2.split(img_resized)
#对红色通道图进行CLAHE 处理
clahe = cv2.createCLAHE(cliplimt=2.0,titleGrideSize=(8,8))
img_clahe_red = clahe.apply(r)
# 获得 红色通道的掩膜图
img_red_mask = get_redmask(img_clahe_red)
#保存掩膜图
cv2.imwrite('./mask/1_mask.png',img_red_mask )
----------下面是掩膜图处理函数 --------------
def get_redmask(img_red):
# 采用红色通道的阈值为 10 过滤非 ROI区 , 即取图像最大亮度区200~255 之间的 5%
ret, img_threshold = cv2.threshold(img_red,10,255,cv.THRESH_BINARY)
#创建 半径为 3 的圆形结构元素做kernel
kernel = cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (3, 3))
# 对 ROI 区进行腐蚀运算
img_erode = cv2.erode(img_threshold, kernel, iterations=1)
# 对显示结果
cv2.imshow('redm', img_erode)
#返回 结果
return img_erode