6

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

  • 将图像转换为灰度
  • 应用双边过滤器
  • 运行 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 );

在此处输入图像描述

在此处输入图像描述

4

1 回答 1

1

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

更新:1)灰度值 在此处输入图像描述

2) 组队 在此处输入图像描述

3) 精明的 在此处输入图像描述

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

于 2016-03-11T13:08:45.373 回答