创建正弦波的bmp图像

时间:2014-01-09 09:41:02

标签: matlab bitmap sine

我想为任何正弦光栅创建位图。我怎么能做到这一点。

我这样做:

n = 64;

[X,Y] = meshgrid(linspace(-2*pi,2*pi,n));

sinewave2D=sin(5*X);

plot(sinewave2D(1,:)) 

imagesc(sinewave2D) 
imwrite(sinewave2D,'sine.bmp') 
imshow('sine.bmp')

但是“sinewave2D”具有负值,bmp接受0-255之间的值,所以我怎样才能实现这一点并拥有我需要的光栅。

1 个答案:

答案 0 :(得分:2)

听起来好像问题是如何处理负数。

作为程序员,这是您的选择!

一种方法是将正弦波标准化以适应输出范围,如下所示:

% shift digital counts so the minimum is at zero
sinewave2D = sinewave2D - min(sinewave2D(:);

% scale digital counts so the maximum is at 255
sinewave2D = sinewave2D / max(sinewave2D(:) * 255;

% then, write the image
imwrite(uint8(sindwave2D), 'sine.bmp');

这种方法的问题当然是,如果正弦波的动态范围发生变化,这些变化将不会反映在输出图像中!它还以非零数字计数为零,因此零位将在位图中显示为灰色。

相关问题