在应用Canny边缘检测之前预处理图像

时间:2016-03-10 16:58:46

标签: opencv computer-vision canny-operator

我有一个房间的图像,我想检测所有墙边。我尝试了很多不同的滤镜组合(双边,高斯,拉普拉斯等),最好的组合似乎如下,

  • 将图像转换为灰度
  • 应用双边滤镜
  • 运行Canny边缘检测过程
  • 再涂两个双边滤镜以消除噪音
  • 使用扩张过滤器“堵塞”边缘的任何孔

我遇到的问题是,无论我尝试过什么,我都无法获得穿过靠近天花板的墙壁的独特直边。我已经尝试了许多技术来试图使边缘变暗但无济于事。应用程序商店中有一个应用程序检测到这个边缘,所以我知道它可以完成,我只是不确定我需要应用哪些预处理过滤器,希望有人能指出我正确的方向。

cv::Mat edgeFrame;
cv::Mat grayImage;
cv::Mat blurFrame;
outputFrame=inputFrame.clone();

getGray(inputImage, grayImage);
cv::bilateralFilter(grayImage, blurFrame, 9,80, 80);
cv:Canny(blurFrame, edgeImage,100, 110,5);
cv::bilateralFilter(edgeImage, blurFrame, 21 , 80, 80);
cv::bilateralFilter(blurFrame, edgeImage,21, 100, 150);
int dilation_size =1;
Mat element = getStructuringElement( MORPH_ELLIPSE,
                                    Size( 2*dilation_size + 1, 2*dilation_size+1 ),
                                    Point( dilation_size, dilation_size ) );
dilate( edgeImage, outputFrame, element );

enter image description here

enter image description here

1 个答案:

答案 0 :(得分:1)

问题在于那些边缘的阴影,这是由于照明完全来自太阳透过窗户并且房间内没有光源。此外图片相对较暗,因此其直方图将集中在较低的一侧。话虽如此,我会应用直方图均衡作为第一步,在0-255的整个范围内扩展强度,然后,在canny中应用相对较大的sigma(高斯模糊)以抑制高频边缘。

更新: 1)灰色值 enter image description here

2)histeq enter image description here

3)canny enter image description here

实际上,虽然histeq增加了对比度,但它在这里无济于事,因为在门上方的区域,渐变几乎为零,正如您从第二张图片中可以看到的那样。