我是图像处理和计算机视觉方面的新手,我想使用具有不同比例空间的高斯拉普拉斯算法检测图像中的斑点。以下链接详细说明。 http://www.cs.utah.edu/~jfishbau/advimproc/project1/ http://www.cs.utah.edu/~manasi/coursework/cs7960/p1/project1.html 到目前为止,通过使用opencv2我已经设法获取图像,应用高斯滤波器与各种内核并应用拉普拉斯滤波器。 i乘以sigma平方整个图像以放大信号(参见链接中的描述)然后我应用阈值。下一步是检测局部最大值和最小值,这样我就可以得到斑点中心并能够绘制圆圈,但我不知道该怎么做以及到目前为止我所做的图像处理是否正确。这是我的代码:
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);
}
}
这是预期的结果
由于
答案 0 :(得分:0)
检测到轮廓后,可以使用
minEnclosingCircle()
更好的是查看本教程: