20180606-20180623
1、预处理
针对简单无背景背景图,
(1)阈值分割 wall_thresh(Mat &src)
(2)去标尺 ReturnImgWithoutRuler(Mat& image1, Mat& imgWithoutR)
(3)腐蚀膨胀,dilate_erode(Mat&src)
(4)遍历找到行列边界
2、识别门窗的位置
(5)对原图进行LSD直线提取
Mat wall_2 = image.clone();
Ptr<LineSegmentDetector> ls = createLineSegmentDetector(LSD_REFINE_STD, 1, 0.6, 2.0, 10, 0, 0.7, 1024);
vector<Vec4i> lines_std;
ls->detect(wall_2, lines_std);
(6)通过腐蚀膨胀后的墙体图对提取出来的直线进行掩膜处理
(7)用掩膜图过滤提取的直线,保留起点和终点都在墙体内(包含门窗)的直线
(8)利用墙体二值化的图像膨胀一圈作为掩膜得到门窗线
(9)利用sobel算子锐化门窗线
Mat image_Nd_Sobel;
Mat grad_x, grad_y;
Mat grad;
Mat abs_grad_x, abs_grad_y;
Sobel(image_Nd, grad_y, CV_16S, 0, 1, 3, 1, 0, BORDER_DEFAULT);
Sobel(image_Nd, grad_x, CV_16S, 1, 0, 3, 1, 0, BORDER_DEFAULT);
convertScaleAbs(grad_x, abs_grad_x);
convertScaleAbs(grad_y, abs_grad_y);
addWeighted(abs_grad_x, 0.5, abs_grad_y, 0.5, 0, grad);