基于MATLAB的图像散射叠加

基于MATLAB的图像散射叠加,matlab,Matlab,我有一个RGB图像,img,我想生成一个新的图像,img2,上面有一个叠加散点图 如果X Y Z分别是X-coord、Y-coord和散射“幅值”的nx1向量,那么我正在做的是: imshow(img); hold on; scatter(X,Y,3,Z,'fill'); hold off; 通过这种方式,我实际上得到了一个绘制了散射图的图像,但问题是散射图的每个点都有相同的颜色(blu),而不是我使用 figure; scatter(X,Y,3,Z,'fill'); 有什么建议吗?谢谢。尝

我有一个RGB图像,img,我想生成一个新的图像,img2,上面有一个叠加散点图

如果X Y Z分别是X-coord、Y-coord和散射“幅值”的nx1向量,那么我正在做的是:

imshow(img);
hold on;
scatter(X,Y,3,Z,'fill');
hold off;
通过这种方式,我实际上得到了一个绘制了散射图的图像,但问题是散射图的每个点都有相同的颜色(blu),而不是我使用

figure;
scatter(X,Y,3,Z,'fill');

有什么建议吗?谢谢。

尝试添加
before
imshow()

figure; % add this line before imshow()
imshow(img);
hold on;
scatter(X,Y,3,Z,'fill');
hold off;
下面是我刚刚测试的一个示例:

figure; % add this line before imshow()
imshow(img);
hold on;

load seamount
s = sqrt(-z/2);
c = z;
scatter(x,y,s,c,'fill')

hold off;

您可以看到,图像上显示的颜色与单独绘制时的颜色(大致)一致



编辑:通过设置
scatter
的颜色属性,即
MarkerEdgeColor
MarkerFaceColor
,确定,将Z值重新映射到0-255即可。以下是我的功能:

function [ Aremaped ] = remap( A,lnew,hnew )
 Aremaped = zeros(size(A));
 lold=min(A);
 hold=max(A);
 for i=1:length(A)
     newVal = lnew + (A(i)-lold)*(hnew-lnew)/(hold-lold);
     Aremaped(i) = newVal 
 end
end

希望这能有所帮助

谢谢你的回答。这对我不起作用,我不知道为什么。我尝试了不同的数据,但它确实起了作用。所以我想你的答案是可以的。我仍然无法理解为什么它在任何情况下都不起作用,谢谢。@mbPro通过设置
scatter
的颜色属性,即
MarkerEdgeColor
MarkerFaceColor
,您可以随时将颜色更改为您喜欢的任何颜色。我终于找到了问题,但没有找到解决方案。img中的颜色范围是从0到255,但在我的例子中,“幅值”的向量Z的范围是从-0.3到0.3。因此,当散射叠加到img上时,Z值被视为在0-255范围内,因此,每个点都被绘制为blu。好的,将Z值重新映射到0-255效果良好。下面是我的函数:
function[Aremaped]=remap(A,lnew,hnew)Aremaped=zero(size(A));lold=最小值(A);保持=最大值(A);对于i=1:length(A)newVal=lnew+(A(i)-lold)*(hnew-lnew)/(hold-lold);Aremaped(i)=newVal end
希望这能有所帮助