如何在opencv中使用脊检测滤波器

时间:2018-02-11 03:11:19

标签: python opencv computer-vision

我正在尝试使用带有opencv-python的ridge / valley过滤器。我刚刚在openCV的官方website中查看了该文档,该文件告诉我使用

out = cv.ximgproc_RidgeDetectionFilter.getRidgeFilteredImage( _img[, out] )

然而,在尝试之后,这个函数似乎在cv2(python)中不存在。有没有其他方法可以使用openCV或任何其他可用的方法来做到这一点?

3 个答案:

答案 0 :(得分:7)

脊是图像二阶导数矩阵的特征值,也称为粗糙矩阵。

使用上述信息,您可以使用scikit-image

提供的功能轻松编写脊探测器
from skimage.features import hessian_matrix, hessian_matrix_eigvals
def detect_ridges(gray, sigma=3.0):
    hxx, hyy, hxy = hessian_matrix(gray, sigma)
    i1, i2 = hessian_matrix_eigvals(hxx, hxy, hyy)
    return i1, i2

这里,i1返回局部最大值脊,i2返回局部最小值脊。您可以使用sigma值来调整以获得适当的解决方案。 示例:

enter image description here

实际上,在Python / OpenCV中,你可以做这样的事情

image = cv2.imread('retina.tif')
ridge_filter = cv2.ximgproc.RidgeDetectionFilter_create()
ridges = ridge_filter.getRidgeFilteredImage(image)

cv2.ximgproc.RidgeDetectionFilter_create的参数包括:

@param ddepth  Specifies output image depth. Defualt is CV_32FC1
@param dx Order of derivative x, default is 1 .   
@param dy  Order of derivative y, default is 1 .   
@param ksize Sobel kernel size , default is 3 .   
@param out_dtype Converted format for output, default is CV_8UC1 .   
@param scale Optional scale value for derivative values, default is 1 .   
@param delta  Optional bias added to output, default is 0 .   
@param borderType Pixel extrapolation  method, default is BORDER_DEFAULT

来源 - https://docs.opencv.org/trunk/d4/d36/classcv_1_1ximgproc_1_1RidgeDetectionFilter.html

答案 1 :(得分:0)

当前(scikit图像1.14.1),接受的答案无效。 这是一个做的版本:

difficulty: [
  { name: 'Beginner'},
  { name: 'Intermediate'}
]

fundus_fig

图片来源:https://en.wikipedia.org/wiki/Fundus_photography#/media/File:Fundus_photograph_of_normal_left_eye.jpg

答案 2 :(得分:0)

有一个基于“ Steger,C.,1998.曲线结构的无偏检测器。IEEE模式分析与机器智能学报,20(2),第113–125页”的岭检测算法版本。纸。

它不使用openCV,因此我希望不要成为话题,但是您可以根据自己的目的修改代码

这里是链接: https://gitlab.gwdg.de/sphire/ridge_detection

您可以直接通过pip安装它 https://pypi.org/project/ridge-detection/