2013-02-20 113 views
1

我是圖像處理和計算機視覺領域的新成員,我想使用不同尺度空間的高斯拉普拉斯算子檢測圖像中的斑點。以下鏈接詳細解釋。 http://www.cs.utah.edu/~jfishbau/advimproc/project1/ http://www.cs.utah.edu/~manasi/coursework/cs7960/p1/project1.html 到目前爲止,通過使用opencv2我設法得到圖像,應用與各種內核的高斯濾波器和應用拉普拉斯濾波器。我乘以西格瑪平方整個圖像放大的信號(見鏈接說明),然後我申請一個門檻。下一步是檢測局部最大值和最小值,這樣我就可以得到blob中心並能夠繪製圓圈,但我不知道如何去做,以及我迄今爲止所做的圖像處理是否正確。這裏是我的代碼:使用opencv進行尺度空間斑點檢測

int main(){ 

    image1 = imread("butterfly.jpg",0); 

    drawing1 = imread("butterfly.jpg"); 

    blobDetect(image1,drawing1); 
waitKey(); 
    return 0; 
} 

void blobDetect(Mat image, Mat drawing){ 

    int ksize = 1; 
    int n =1; 

    Mat result[10]; 
    for(int i=0; i<10; i++){ 
    cv::GaussianBlur(image,result[i],cv::Size(ksize,ksize),ksize/3,0); 
    n+=1; 
    ksize = 2*n-1; 
    } 

    ksize = 1; 
    n =1; 
    for(int i=0; i<10; i++){ 
    cv::Laplacian(result[i],result[i],CV_8U,ksize,1,0); 
    n+=1; 
     ksize = 2*n-1; 
    } 

    ksize = 1; 
    int cols = image.cols; 
    int rows = image.rows; 
    for(int a=0; a<10; a++){ 
    for(int i=0; i<rows; i++){ 
     //uchar* data = result[a].ptr<uchar>(rows); 
     for(int j=0; j<cols; j++){ 
      result[a].at<uchar>(i,j) *= (ksize/3)*(ksize/3);     
     } 
    } 
    ksize++; 
    ksize = 2*ksize-1; 
} 


for(int i=0; i<10; i++){ 
    cv::threshold(result[i], result[i], 100, 255, 0); 
} 

} 

This is the expected result

這是預期的結果

感謝

+0

首先,我覺得有必要澄清一點:不使用「不同尺度空間」,您使用的是單一的空間尺度,其在這個問題上是高斯(或線性)尺度空間。從它和基於Lindeberg的作品中,這些鏈接建議結合使用拉普拉斯濾波器來嘗試在不同尺度上查找斑點。在那裏存在許多可能性,其中之一是將兩個「相鄰」尺度上存在的區域最大值視爲一個斑點,因此可以從中推導出一個圓。那麼,你的問題與尺度空間或區域最大/最小值有關嗎? – mmgp 2013-02-20 19:46:42

回答

0

後您檢測的輪廓,可以用

minEnclosingCircle() 

更妙的是看看這個教程:

http://docs.opencv.org/doc/tutorials/imgproc/shapedescriptors/bounding_rects_circles/bounding_rects_circles.html

+0

我不能使用容易的輪廓,我必須遵循提供的鏈接中描述的某個算法。 – user1521626 2013-02-20 14:56:42

+0

當您計算/查找/獲取斑點的點時,您不必創建或使用輪廓,minEnclosingCircle()適用於點而不是輪廓,因此適用於您。 http://docs.opencv.org/modules/imgproc/doc/structural_analysis_and_shape_descriptors.html?highlight=minenclosingcircle#minenclosingcircle 基本上你給的功能「點」,它給你回最小的圓心和半徑封閉圓圈,那麼你可以很容易地繪製圓圈。 – Tyathalae 2013-02-20 15:10:32

+0

基本上我的問題是,我不知道如何找到處理圖像中斑點的中心點,我不確定我的圖像處理(高斯拉普拉斯算子)是否正確。 – user1521626 2013-02-20 16:11:24