为什么MATLAB冲浪功能不适用于单精度数据?

时间:2012-03-06 22:40:54

标签: matlab precision color-mapping

我有一个单值类型的矩阵,我想将其绘制为曲面。当我尝试在MATLAB中使用surf函数时,我收到一个错误,指出我需要使用uint8或double:

x=peaks; %# Initialize x to a matrix of doubles
surf(x); %# No problem when x is of type double

现在我会尝试单打:

x=single(peaks);
surf(x); 

给出以下错误:

Warning: CData must be double or uint8. 
Warning: CData must be double or uint8. 

那很不幸。我想我必须增加色彩图的双倍精度:

x=single(peaks);
surf(x,double(x));

工作得很好。但是只是为了踢,我们也试试uint8:

x=single(peaks);
surf(x,uint8(x));

产生以下内容:

Warning: CData must be double or single unless it is used only as a texture data 
Warning: CData must be double or single unless it is used only as a texture data 

什么是MATLAB?下定决心!那么为什么我必须以双精度的形式使用额外的内存来表示surf函数的颜色映射?即使MATLAB错误文本告诉我,我可以使用uint8 单,取决于我没有使用的哪一个?

1 个答案:

答案 0 :(得分:1)

喜欢这个问题。

不确定您是否看过this,但它至少解决了同样的厌恶。听起来迈克尔对uint8算法中的表现感到失望,因为他描述了它似乎为自己创造了更多的计算工作,其中的情节不符合他的审美需求。我用peaks样本尝试了这个,这就是我得到的:

Raw Peaks Data

然后我添加了一个偏移来获得所有的情节。

Offset Peaks Data

呃,我觉得很好。这是代码,希望这有用。

% Test code from Matlab Central
a=256*rand(5);
b=uint8(a);
figure;
surf(b,'facecolor','texturemap')

% get the example peaks data
% and plot without any scaling
x = peaks;
figure;
surf(uint8(x),'facecolor','texturemap')

% get the offset to keep all the data positive
% not pretty but functional
xp = x-min(min(x))+1;
figure;
surf(uint8(xp),'facecolor','texturemap')