1、
for j=1:4
I0=A+B*cos(2*pi*f*X+phi+d*z/l+2*pi*(j-1)/4);
I1=A+B*cos(2*pi*f*X+phi+2*pi*(j-1)/4);
I2=A+B*cos(2*pi*f*X+phi-d*10/l+2*pi*(j-1)/4);
filename0=['D:\新桌面\每隔一段时间整理一次\997wyh散斑\实验照片整理\zizhi\',['O',num2str(j)],'.bmp'];
imwrite(I0,filename0,'bmp');
filename1=['D:\新桌面\每隔一段时间整理一次\997wyh散斑\实验照片整理\zizhi\',num2str(j),'.bmp'];
imwrite(I1,filename1,'bmp');
filename2=['D:\新桌面\每隔一段时间整理一次\997wyh散斑\实验照片整理\zizhi\',num2str(j+4),'.bmp'];
imwrite(I2,filename2,'bmp');
end
bGrey = I0(b,:);%b行的灰度值
figure;
plot(bGrey);title('x轴方向的相位分布');
希望通过上述代码保存图片,x轴方向的相位分布显示如下图在0-2之间
然后准备在另一程序中读取,却变成了0-255,且缺少上部分
参考文章https://blog.csdn.net/zhb123GGGGGG/article/details/45409337?utm_source=blogxgwz8可知
imwrite() 中, 如果参数为uint8类型, 那么期待的参数像素值范围为0-255, 如果参数矩阵为double类型, 那么期待的像素值范围为0-255.
在imwrite中, 如果你将读取的图像转换为double类型, 直接用imwrite保存图像, 会出现全是白色的图像的情况 , 因为在转化图像类型的时候, 图像的像素值虽然变为double数据类型, 但是取值范围仍然是0-255, imwrite处理double类型的时候期待的数据范围是0-1, 会把大于1的值当作1处理, 这样几乎所有的像素都变成了白色。
遂将上述程序中的A、B改成0.5,但它们的相位值还是不一样
2、对图像进行滤波后imwrite
直接对phi,imwrite的话,是一幅几乎全是白色的图
先mat2gray(phi),再imwrite的话,是一幅和imshow一样的图
mat2gray是一个计算机函数,功能是实现图像矩阵的归一化操作。 所谓”归一化”就是使矩阵的每个元素的值都在0和1之间。该函数在数字图像处理中经常用到。
phi1 = mat2gray(phi);
imshow(phi,[]);
title('未解包phi的相位图');
filename2=[PathName,'new\未解包phi的相位图.bmp'];
imwrite(phi1,filename2,'bmp');
matlab中imshow(a,[])用法及其内部计算公式
参考链接:https://blog.csdn.net/lihe4151021/article/details/100690699
疑惑:matlab的mat2gray在c++中如何实现