我想在MATLAB
中绘制高斯波函数的2D表示。我希望2D绘图是一种颜色(绿色),它远离高斯的中心变得透明。
当我使用imagesc
时(如下一个代码中所示),我在黑色方块上得到高斯(如下图所示)。
我不想要黑色背景,我希望高斯是一种颜色,但远离中心透明,这样我就不会得到黑色正方形,只有绿色圆圈(白色)背景)圆圈远离其中心透明。
我该怎么做?
close all;clc
figure
xlim_min=-4;
xlim_max=4;
ylim_min=-4;
ylim_max=4;
ylim([ylim_min ylim_max])
xlim([xlim_min xlim_max])
x=-1:0.001:1;
y=-1:0.001:1;
[X,Y]=meshgrid(x,y);
c1=10;
c1_new=c1*0.3;
x_offset=0;
y_offset=0;
w_function=0.5*0.25*exp(-c1_new*((X+x_offset).^2+...
(Y+y_offset).^2));
imagesc(x,y,w_function);
ylim([ylim_min ylim_max])
xlim([xlim_min xlim_max])
答案 0 :(得分:2)
要获得透明度,请使用图片的AlphaData
and AlphaDataMapping
properties。在下文中,我明确地将透明度(alpha
)计算为数据值的仿射函数,以指定最小和最大透明度值;并且我将AlphaDataMapping
设置为none
,因此无需任何修改即可使用这些值。
所以,替换你的行
imagesc(x,y,w_function);
通过
min_alpha = .2; % desired minimum alpha
max_alpha = 1; % desired maximum alpha
alpha = min_alpha + (max_alpha-min_alpha)/max(w_function(:))*w_function; % compute alpha
imagesc(x,y,w_function,'AlphaData',alpha,'AlphaDataMapping','none'); % image with alpha
注意蓝色部分比黄色部分更透明(更小alpha
)。
要使颜色混合与外部区域平滑,请设置alpha
的最小0
并在更大的网格上定义函数。如果需要,您还可以更改色彩映射。由于透明度已经变化,您可能希望色彩映射中的颜色恒定。
close all;clc
figure
xlim_min=-4;
xlim_max=4;
ylim_min=-4;
ylim_max=4;
ylim([ylim_min ylim_max])
xlim([xlim_min xlim_max])
x=-2:0.001:2; % large enough that the function approximately ...
y=-2:0.001:2; % ... reaches 0 within this rectangle
[X,Y]=meshgrid(x,y);
c1=10;
c1_new=c1*0.3;
x_offset=0;
y_offset=0;
w_function=0.5*0.25*exp(-c1_new*((X+x_offset).^2+...
(Y+y_offset).^2));
min_alpha = 0; % desired minimum alpha: set to 0
max_alpha = 1; % desired maximum alpha
alpha = min_alpha + (max_alpha-min_alpha)/max(w_function(:))*w_function; % compute alpha
imagesc(x,y,w_function,'AlphaData',alpha,'AlphaDataMapping','none'); % image with alpha
cm = [0 .7 0]; % define colormap: single color, dark green
colormap(cm) % apply colormap
ylim([ylim_min ylim_max])
xlim([xlim_min xlim_max])