如何在开放环境下使用脊线检测滤波器

2024-05-23 20:16:05 发布

您现在位置:Python中文网/ 问答频道 /正文

我尝试在opencv python中使用ridge/valley过滤器。我刚刚检查了openCV的官方文件website,它告诉我使用

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

但是,经过尝试,这个函数在cv2(python)中似乎不存在。有没有其他方法可以用openCV或其他可用的方法来实现呢?在


Tags: 文件方法过滤器img官方websiteoutopencv
2条回答

目前(scikit映像1.14.1),接受的答案不起作用。 以下是一个版本:

import cv2
import matplotlib.pyplot as plt
from skimage.feature import hessian_matrix, hessian_matrix_eigvals

src_path = 'Fundus_photograph_of_normal_left_eye.jpg'

def detect_ridges(gray, sigma=1.0):
    H_elems = hessian_matrix(gray, sigma=sigma, order='rc')
    maxima_ridges, minima_ridges = hessian_matrix_eigvals(H_elems)
    return maxima_ridges, minima_ridges

def plot_images(*images):
    images = list(images)
    n = len(images)
    fig, ax = plt.subplots(ncols=n, sharey=True)
    for i, img in enumerate(images):
        ax[i].imshow(img, cmap='gray')
        ax[i].axis('off')
    plt.subplots_adjust(left=0.03, bottom=0.03, right=0.97, top=0.97)
    plt.show()

img = cv2.imread(src_path, 0) # 0 imports a grayscale
if img is None:
    raise(ValueError(f"Image didn\'t load. Check that '{src_path}' exists."))

a, b = detect_ridges(img, sigma=3.0)

plot_images(img, a, b)

fundus_fig

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

脊线是图像二阶导数矩阵的特征值,也称为hessian矩阵。在

使用以上信息,您可以使用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中,可以执行以下操作

^{pr2}$

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

相关问题 更多 >