使用MATLAB在图像上分散叠加

时间:2014-01-15 13:49:26

标签: matlab

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

如果X Y Z分别是x-coord的nx1向量,y-coord和我散布的“幅度”值,我正在做的是:

imshow(img);
hold on;
scatter(X,Y,3,Z,'fill');
hold off;

通过这种方式,我实际上得到了一个散射图的图像,但问题是散射的每个点都有相同的颜色(蓝色)而不是我使用时通常会发生的颜色

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

有什么建议吗?感谢。

2 个答案:

答案 0 :(得分:2)

尝试在figure;之前添加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;

enter image description here

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

enter image description here


修改:您可以随时通过设置scatter的颜色属性(即MarkerEdgeColorMarkerFaceColor将颜色更改为您喜欢的颜色。

答案 1 :(得分:1)

好的,将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

希望这可以提供帮助