我有一个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');
有什么建议吗?感谢。
答案 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;
您可以看到图像上显示的颜色与单独绘制时的颜色(大致)一致。
修改:您可以随时通过设置scatter
的颜色属性(即MarkerEdgeColor
和MarkerFaceColor
将颜色更改为您喜欢的颜色。
答案 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
希望这可以提供帮助