簡體   English   中英

使用gabor內核提取垂直線會產生黑色圖像

[英]Using gabor kernel to extract vertical lines results in black image

我了解gabor內核的概念以及如何將其用於識別方向邊緣。 所以我想用它來識別圖像中的條形碼行。

但是,當我用gabor內核過濾圖像時,總是得到空白/黑色結果。 您是否可以提供有關我需要做些什么的反饋,以使Gabor識別圖像中的垂直線,即產生垂直邊緣處具有白色的結果?

輸入圖片: 在此處輸入圖片說明

結果: 在此處輸入圖片說明

import cv2
import numpy as np  

def deginrad(degree):
    radiant = 2*np.pi/360 * degree
    return radiant

def main():
    src = cv2.imread('./images/barcode1.jpg', cv2.IMREAD_GRAYSCALE)

    # Introduce consistency in width
    const_width = 300
    aspect = float(src.shape[0]) / float(src.shape[1])
    src = cv2.resize(src, (const_width, int(const_width * aspect)))

    src = cv2.GaussianBlur(src, (7,7), 0)

    # Apply gabor kernel to identify vertical edges
    g_kernel = cv2.getGaborKernel((9,9), 8, deginrad(0), 5, 0.5, 0, ktype=cv2.CV_32F)
    gabor = cv2.filter2D(src, cv2.CV_8UC3, g_kernel)

    # Visual the gabor kernel
    h, w = g_kernel.shape[:2]
    g_kernel = cv2.resize(g_kernel, (20*w, 20*h), interpolation=cv2.INTER_CUBIC)

    cv2.imshow('src', src)
    cv2.imshow('gabor', gabor)  # gabor is just black
    cv2.imshow('gabor kernel', g_kernel)
    cv2.waitKey(0)

if __name__ == "__main__":
    main()

您需要使用參數才能正確查看它。 參數如下:

cv2.getGaborKernel(ksize, sigma, theta, lambda, gamma, psi, ktype)

g_kernel = cv2.getGaborKernel((31,31), 4, deginrad(0), 5, 0.5, 0, ktype=cv2.CV_32F)

結果是-

在此處輸入圖片說明

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM