仅高亮显示掌纹图像中的折痕(主线和皱纹)

时间:2013-05-09 06:43:32

标签: c++ opencv image-processing

我使用墨水和纸张拍摄的掌纹图像如下所示(a)。enter image description here我需要的是突出它的折痕,保留它们的宽度和方向,见图(b)。 Ink and paper palm print imge

我尝试使用具有不同阈值的Canny,Laplacian和Sobel算子等边缘检测器,但不能像(b)中那样提出清晰的折痕图。但是当使用上述边缘检测器时,所有黑线都被检测为边缘。我想要的只是突出图像的较粗白线(a)。我正在使用OpenCV 2.4.5。有人可以帮忙吗?谢谢。

2 个答案:

答案 0 :(得分:2)

这是我提出的方法:

cv::Mat im;    //Already loaded
cv::Mat grey;
cv::cvtColor(im, grey, CV_BGR2GRAY);

cv::Mat binary;
cv::threshold(grey, binary, 0, 255, cv::THRESH_OTSU);

//Create a mask of the hand region
cv::Mat mask;
cv::Mat kern = cv::getStructuringElement(cv::MORPH_RECT, cv::Size(20,20));  //Large kernel to remove all interior detail
cv::morphologyEx(binary, mask, cv::MORPH_OPEN, kern);
cv::threshold(mask, mask, 128, 255, cv::THRESH_BINARY_INV);     //Invert colors

cv::imshow("", mask);

//Remove thin lines
cv::Mat blurred;
cv::GaussianBlur(grey, blurred, cv::Size(9,9), 0);  
cv::threshold(blurred, binary, 0, 255, cv::THRESH_OTSU);
cv::morphologyEx(binary, binary, cv::MORPH_OPEN, cv::noArray());

cv::Mat result;
binary.copyTo(result, mask);

结果如下:Palm lines result

掩码边缘有一些伪影,可以通过使用更复杂的掩蔽方法来解决。模糊和形态操作的内核大小显然可以针对不同的细节水平进行修改。

答案 1 :(得分:1)

首先,您可以使用阈值将图像转换为二进制。

然后你可以应用一些形态操作,如侵蚀,这样可以过滤细线,openCV中有一个内置的方法用于此操作。

最后,您可以使用您提到的其中一个边缘检测器。