我有一张房间的图片,想要检测所有的墙壁边缘。我尝试了许多不同的滤波器组合(双边、高斯、拉普拉斯等),最好的组合似乎是以下步骤:
- 将图像转换为灰度
- 应用双边滤波器
- 运行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 );