簡體   English   中英

如何在opencv中將gabor過濾器應用於圖像?

[英]How to apply gabor filter to images in opencv?

我有一些帶有gabor過濾器代碼的小波,就像這樣...... 小波

但我不知道如何在我的圖像上使用它? 我知道matlab有一些方法,即matlab方式 但是我正在使用opencv ,而且我對這個領域和matlab很新,我不知道如何用matlab代碼編寫opencv代碼,所以,我應該用opencv來做這個嗎? 非常感謝!

**** ****更新
我試過@ berak的方式,這是原始圖像

這是在我應用過濾器之后 在此輸入圖像描述 只是所有的白色,沒有留下,下面是我的參數,

int kernel_size = 31;
double sig = 1, th = 0, lm = 1.0, gm = 0.02, ps = 0;
cv::Mat kernel = cv::getGaborKernel(cv::Size(kernel_size, kernel_size), sig, th, lm, gm, ps);
cv::filter2D(src_f, dest, CV_32F, kernel);

我的設置有什么問題嗎?

基本上,你將img轉換為float,

然后構造一個內核:

cv::Mat kernel = cv::getGaborKernel(cv::Size(kernel_size,kernel_size), sig, th, lm, gm, ps);

並將其應用於filter2D:

cv::filter2D(src_f, dest, CV_32F, kernel);

[編輯]

**我不確定,但你可能需要一個1通道圖像作為輸入。

** imshow看到,你的圖像是浮動的,只是使超過1.0的任何東西飽和,所以你得到一個全白的圖像。

(這只是一個可視化問題,需要一點轉換/縮放來治愈它)

Mat in = imread("XfNal.jpg",0);          // load grayscale
Mat dest;
Mat src_f;
in.convertTo(src_f,CV_32F);

int kernel_size = 31;
double sig = 1, th = 0, lm = 1.0, gm = 0.02, ps = 0;
cv::Mat kernel = cv::getGaborKernel(cv::Size(kernel_size,kernel_size), sig, th, lm, gm, ps);
cv::filter2D(src_f, dest, CV_32F, kernel);

cerr << dest(Rect(30,30,10,10)) << endl; // peek into the data

Mat viz;
dest.convertTo(viz,CV_8U,1.0/255.0);     // move to proper[0..255] range to show it
imshow("k",kernel);
imshow("d",viz);
waitKey();

clip_gabor

改變sigma = 3 lambda = 36 theta = 116 psi = 274

暫無
暫無

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

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