[英]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();
改變sigma = 3 lambda = 36 theta = 116 psi = 274
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.