在学习数字图像处理的过程中学习到图像分割的知识,图像分割包含边缘检测和区域生成。
把一幅彩色图转换成这种图,可以得知,边界都明显的显示出来,也就是通过边缘检测的方式可以实现该功能。这里我用到的是LoG算子法实现此功能。
边缘检测原理是什么呢,在一个物体内部具有相似性,在边界的地方具有明显的差异。边缘是目标与目标之间,目标与背景之间的界限,图像的局部特性不连续。比如说灰度的突变、纹理结构的突变、颜色的突变。如何将变换方大,让变化明显。在数学中我们可以根据求导就扩大这种变化。但是求导在工程中存在的问题就是求导增大了噪声的影响,所以在进行求导之前加入高斯滤波器进行去噪。Laplacian算子相当于对图像进行求偏导,也就实现了增大这种变化。
cv::Mat image_RGB = cv::imread("C1.jpg", cv::IMREAD_COLOR); //read picture
if(image.empty())
qDebug()<<"init photo is empty";
cv::Mat face_WB;
cvtColor(image_RGB,face_WB,COLOR_BGR2GRAY);
const int MEDIAN_BLUR_FILTER_SIZE = 5;
medianBlur(face_WB,face_WB,MEDIAN_BLUR_FILTER_SIZE);
Mat edges;
Laplacian(face_WB,edges,CV_8U,5);
Mat maskk;
threshold(edges,maskk,100,255,THRESH_BINARY_INV);
resize(maskk,printImg,Size(600,800));
cv::imshow("9",printImg);
最终效果图为
由于是边缘点检测,我们可以看到,对于线条的检测不够好,出现了许多斑点状。