如何对二值化后得到的血管图像进行边缘平滑处理。
我尝试了一种类似于this method的方法,但没有得到我期望的结果。
代码如下:
import cv2
import numpy as np
INPUT = cv2.imread('so-br-in.png',0)
MASK = np.array(INPUT/255.0, dtype='float32')
MASK = cv2.GaussianBlur(MASK, (5,5), 11)
BG = np.ones([INPUT.shape[0], INPUT.shape[1], 1], dtype='uint8')*255
OUT_F = np.ones([INPUT.shape[0], INPUT.shape[1], 1],dtype='uint8')
for r in range(INPUT.shape[0]):
for c in range(INPUT.shape[1]):
OUT_F[r][c] = int(BG[r][c]*(MASK[r][c]) + INPUT[r][c]*(1-MASK[r][c]))
cv2.imwrite('brain-out.png', OUT_F)
如何改善这些粗糙边缘的平滑度?
编辑
我想把边弄平,像http://pscs5.tumblr.com/post/60284570543。如何在OpenCV中实现这一点?
我对@dhanushka的answer for another question做了一些修改,得到了这些图像。
对不起,它是C++代码,但也许你会把它转换成Python。您可以更改下面的参数以获得不同的结果。
你可以扩张然后侵蚀这些区域。
在编辑前将比例因子去掉4
这是我用你的图片得到的结果:
我的方法主要是基于对放大图像应用的几个
cv::medianBlur
。代码如下:
锯齿状的边缘是由于阈值。如果您对一个非二进制的输出图像(即256个灰度)感到满意,您可以删除它,然后得到这个图像:
相关问题 更多 >
编程相关推荐