使用Matlab创建灰度掩模,并将其写入灰度图像。
我正在制作一个灰度模式,加载到我的SLM(空间光调制器)上。图案为1920x1080像素。我有255个灰度值。我试用了这段代码来创建一个灰度蒙版。当我在Matlab中打开时,我可以看到它是灰度级的,但是当我将图像作为bmp文件写入时,它就变成了二进制文件。我怎样才能解决这个问题。下面是我的代码使用Matlab创建灰度掩模,并将其写入灰度图像。,matlab,image-processing,matlab-figure,Matlab,Image Processing,Matlab Figure,我正在制作一个灰度模式,加载到我的SLM(空间光调制器)上。图案为1920x1080像素。我有255个灰度值。我试用了这段代码来创建一个灰度蒙版。当我在Matlab中打开时,我可以看到它是灰度级的,但是当我将图像作为bmp文件写入时,它就变成了二进制文件。我怎样才能解决这个问题。下面是我的代码 clear all close all mask=zeros(1080,1920); % imshow(mask,[]) for k=1:500 for i=1:1080 mask(i,k)=randp
clear all
close all
mask=zeros(1080,1920);
% imshow(mask,[])
for k=1:500
for i=1:1080
mask(i,k)=randperm(256,1);
end
end
% mask3=Fit_GrayLevel_To_SLM_Vector(mask);
imshow(mask,[])
imwrite(mask,'mymask4.bmp')
imshow
对输入图像动态进行的假设与imwrite
不同。更准确地说,从imwrite
的文档中:
如果A是双精度或单精度数据类型的灰度或RGB彩色图像,则imwrite假设动态范围为[0,1],并在将数据作为8位值写入文件之前自动将其缩放255
因此,在写入文件之前,将数据存储在uint8数组中,或者将像素值除以255。
imshow
与输入图像上的imwrite
的假设不同。更准确地说,从imwrite
的文档中:
如果A是双精度或单精度数据类型的灰度或RGB彩色图像,则imwrite假设动态范围为[0,1],并在将数据作为8位值写入文件之前自动将其缩放255
因此,将数据存储在uint8数组中,或者在写入文件之前将像素值除以255。灰度值应为0到255。您的
randperm
接受向量的排列[1:256]
。说到这里,你为什么用randperm
而不是randi
。我怀疑从长远来看,randperm
的速度会慢一些,当然也不那么直观。灰度值应该是0到255。您的randperm
接受向量的排列[1:256]
。说到这里,你为什么用randperm
而不是randi
。我怀疑从长远来看,randperm
的速度会慢一些,而且它肯定不那么直观。