opencv — генерирует HeatMap из блобов разных размеров, используя переполнение стека

Я хочу получить карту тепла из прикрепленного изображения. Большие капли будут иметь более темные (красные) области и затем постепенно исчезать до более светлых синих оттенков. Меньшие капли будут иметь более легкие вариации. Но имейте в виду, что центр большей капли должен быть самым горячим регионом.
Я думаю, что сгустки можно сделать более пышными, используя размытие по Гауссу и установив их пороговое значение.

Я использовал метод opencvs, например, используя преобразование расстояний, а затем применил цветовую карту. Но это больше похоже на перевернутые круги, похожие на скелеты (истончение) капель. Я хочу лучшую карту градиента тепла.

введите описание изображения здесь

Я хочу, чтобы это было больше похоже введите описание изображения здесь

не так от opencvвведите описание изображения здесь

4

Решение

Вы можете просто переключаться между отдельными блобами, чтобы найти карту цветов отдельного блоба. Вот пример реализации. Вы можете использовать все, что угодно Цветная карта как вам нравится. Надеюсь это поможет!

Mat mSource_Gray,mBlobHeatMap,mHeatMap;
mSource_Gray= imread(FileName_S.c_str(),0);

//Just making sure everything is binary
threshold(mSource_Gray,mSource_Gray,254,255,THRESH_BINARY);
imshow("Source Image",mSource_Gray);

введите описание изображения здесь

//Finding Distance Transform
Mat mDist,mBlobDist;
distanceTransform(mSource_Gray, mDist, CV_DIST_L2, 3);
normalize(mDist, mDist, 0, 1., cv::NORM_MINMAX);
mDist.convertTo(mDist,CV_8UC1,255,0);
imshow("mDist",mDist);

введите описание изображения здесь

vector<vector<Point> > contours;
vector<Vec4i> hierarchy;
/// Find contours to Mask out the Individual Contours
findContours( mSource_Gray, contours, hierarchy, RETR_TREE, CHAIN_APPROX_SIMPLE, Point(0, 0) );
/// Draw contours (Mask)
Mat mBlobMask = Mat::zeros( mSource_Gray.size(), CV_8UC1 );
for( size_t i = 0; i< contours.size(); i++ )
{
drawContours( mBlobMask, contours, (int)i, Scalar(255), -1);
mDist.copyTo(mBlobDist,mBlobMask);
applyColorMap(mBlobDist,mBlobHeatMap,COLORMAP_JET);
GaussianBlur(mBlobHeatMap,mBlobHeatMap,Size(21,21),0,0);
mBlobHeatMap.copyTo(mHeatMap,mBlobMask);
}

imshow("mHeatMap",mHeatMap);

введите описание изображения здесь

8

Другие решения


По вопросам рекламы [email protected]