Я хочу получить карту тепла из прикрепленного изображения. Большие капли будут иметь более темные (красные) области и затем постепенно исчезать до более светлых синих оттенков. Меньшие капли будут иметь более легкие вариации. Но имейте в виду, что центр большей капли должен быть самым горячим регионом.
Я думаю, что сгустки можно сделать более пышными, используя размытие по Гауссу и установив их пороговое значение.
Я использовал метод opencvs, например, используя преобразование расстояний, а затем применил цветовую карту. Но это больше похоже на перевернутые круги, похожие на скелеты (истончение) капель. Я хочу лучшую карту градиента тепла.
Вы можете просто переключаться между отдельными блобами, чтобы найти карту цветов отдельного блоба. Вот пример реализации. Вы можете использовать все, что угодно Цветная карта как вам нравится. Надеюсь это поможет!
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);