【发布时间】:2016-06-25 15:55:12
【问题描述】:
我有一张下面房间的图像,我想检测所有墙壁边缘。我尝试了很多不同的过滤器组合(双边、高斯、拉普拉斯等),最好的组合似乎如下,
- 将图像转换为灰度
- 应用双边过滤器
- 运行 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 );
【问题讨论】:
-
应该实时处理吗?或者你可以花(几?)秒?
-
试试饱和度或蓝色通道。
-
@Miki - 不必实时完成,几秒钟是可以接受的。
-
@Piglet - 我已经尝试增加饱和度,但变化不大,我会尝试增加蓝色通道,看看结果如何。
-
@WagglyWonga 增加饱和度和蓝色是什么意思?创建灰色图像时会丢失信息。因此尝试在单独的通道中进行边缘检测并结合结果。除了JPG,你能得到别的东西吗?我看了那张图片,在色调通道中有一些非常难看的压缩伪影
标签: opencv computer-vision canny-operator