2

我想从与图像重叠的点坐标(灰度)构建热图。我有我的点的 x 和 y 坐标。这个想法是很容易看到注意力/密度,其中点集中(如果有重要数量的点,则为红色区域)。

我想我可以为此使用 OpenCV。下面的函数听起来很有趣:applyColorMap(src, result, cv::COLORMAP_JET);. 但我不知道如何将此地图链接到点而不是图像。

请问有人知道如何从点坐标构建热图吗?

感谢@berak 的代码,使用COLORMAP_RAINBOW而不是COLORMAP_JET这里是我得到的:在此处输入图像描述 这与我想要的结果很接近,因为它看起来太“离散”而且不够“平滑”/“模糊”。我不想出现点(特别是那些“单独”的点),我希望密度区像这里一样清晰地显示出来。正如你们中的一些人所说,我认为我“只是”需要改变我的 ROI 周围像素的强度。

请问有人有更多线索吗?

4

2 回答 2

4

这是我的想法,-应用距离变换来可视化点密度:

// generate demo data, you will just set your pixels here:
RNG &ran(theRNG());
Mat img(300,300,CV_8U,Scalar(255)); // inverted b/w scheme
for ( int i=0; i<600; i++ )
{
    int x=ran.uniform(0,300);
    int y=ran.uniform(0,300);
    img.at<uchar>(y,x) = 0;
}

Mat draw;
distanceTransform(img,draw,CV_DIST_L2,5);

// back from float to uchar, needs a heuristic scale factor here (10 works nice for the demo)
draw.convertTo(draw,CV_8U,10);    
// cerr << draw(Rect(30,30,10,10)) << endl; // peek into the data, does it look good ?

applyColorMap(draw,draw, cv::COLORMAP_JET);

imshow("jetmap",draw);
waitKey();

从 ponts 到 jetmap

于 2014-04-24T10:58:19.467 回答
1

一种简单的方法是使用单通道图像(理想情况下比通常的 8 位图像具有更多的 BPP),将其初始化为零,然后遍历所有点。然后,您将增加与每个点对应的像素,从而在许多点下降的地方产生高值,在没有点的地方产生低值。

或者,如果您想要一个相当“模糊”的地图(很难找到一个正确的术语......),您不仅可以增加有点的所有像素,还可以增加围绕点的圆圈中的所有像素。

然后,您可以通过 将地图转换为灰度图像或彩色图像applyColorMap

于 2014-04-24T10:30:25.497 回答