OpenCV C++ Как удалить ребра с низкой кривизной?

У меня проблемы с удалением ложных (не совсем ложных, но ненужных) краев из изображения.

Изображение, которое я хочу удалить края

Так как это изображение человеческого уха, я не хочу использовать края, вызванные другими вещами, кроме уха.

Края, которые я хочу удалить

Это код на C++, который я использую, чтобы показать этот вид изображения Edge:

#include "opencv2\opencv.hpp"
#include "SkinSegmentator.h"
#include "AutoCannyDetector.h"


Mat referentImage, queryImage;    
loadByFilename(imageType, queryImage, IDstring);

int erosion_size = 6;
    Mat element = getStructuringElement(cv::MORPH_CROSS,
        cv::Size(2 * erosion_size + 1, 2 * erosion_size + 1),
        cv::Point(erosion_size, erosion_size));
//Dilating and eroding to eliminate very small edges
dilate(queryImage, queryImage, element);
erode(queryImage, queryImage, element);
skinSegmentator.segmentSkin(queryImage, false);
equalizeHist(queryImage, queryImage);
Mat queryEdge;
GaussianBlur(queryImage, queryEdge, Size(11, 11), 3);
autoCanny.detect(queryEdge);
namedWindow("Query Edge Map", WINDOW_AUTOSIZE);
imshow("Query Edge Map", queryEdge);

Как я могу добиться этого удаления для любого вида изображения уха? Если я не ошибаюсь, это будет достижимо, если я смогу обнаружить и удалить ребра с низкой кривизной, но я не могу найти способ сделать это.

Вот исходное изображение и сегментация кожи: Исходное изображение Сегментация кожи

0 ответов

Другие вопросы по тегам