Создайте диаграмму Вороного с помощью openCv и C++.

У меня небольшая проблема. Мне нужно создать диаграмму Вороного изображения BW с помощью openCV и C++. У меня должно получиться что-то вроде вывода функции Matlab voronoin.

Цель состоит в том, чтобы создать маску для каждой области диаграммы.

Это пример, который я сделал в Matlab:

диаграмма Вороного в Matlab

Итак, для каждого региона я должен создать маску или иметь свой цвет. Я попробовал функцию openCV DistanceTransform, чтобы получить метки voronoi.

Mat bwCoresGoodInv = 255 - bwCoresGood;
distanceTransform(bwCoresGoodInv, distTr,voronoiLabels, CV_DIST_L2, CV_DIST_MASK_PRECISE, DIST_LABEL_PIXEL);

namedWindow( "voronoiDistLab", CV_WINDOW_AUTOSIZE );
voronoiLabels = voronoiLabels*5;
imshow( "voronoiDistLab", voronoiLabels );

в результате получается следующее изображение: вороные метки openCV

как вы можете видеть в каждом регионе есть разные цвета(в частности есть что-то в соответствии с ячейкой), есть ли способ иметь только цвет? заранее спасибо


person user2190201    schedule 20.03.2013    source источник


Ответы (1)


Если вы спрашиваете, как получить цвета, отличные от значений шкалы серого, предоставляемых при отображении меток, один из подходов (вероятно, не самый эффективный) состоит в том, чтобы запустить cv::findContours на изображении с обнаруженным краем изображения метки, а затем выполнить итерацию по каждому контуру. найти и нарисовать его на новом изображении, его можно заполнить или обвести контуром. Это не очень точно и может оставлять пробелы, может потребоваться некоторое расширение краевого изображения.

Было бы очень хорошо, если бы DistanceTransform возвращал структуру данных, которая сопоставляла бы диапазон значений интенсивности в изображении метки с каждым пикселем, имеющим это значение, возможно, с вектором двоичных изображений, где n-е изображение в векторе является двоичной маской с изолированная область n-й метки, но я думаю, что сейчас это должен сделать пользователь.

person Lucas W    schedule 09.04.2014