У меня есть изображение комнаты ниже, и я хочу обнаружить все края стен. Я перепробовал много разных комбинаций фильтров (двусторонний, гауссовский, лапласовский и т. д.), и лучшая комбинация выглядит следующим образом:
- Преобразование изображения в оттенки серого
- Применить двусторонний фильтр
- Запустите процесс обнаружения края 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 );