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