2013-02-20 112 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