本文介绍了两种MATLAB图像转换方法:1) 将3D RGB图像转换为2D平铺格式,通过向量化操作将RGB通道展开为连续列,并将8位数据扩展到12位;2) 将2D平铺图像还原为3D RGB格式,通过反向操作分离通道并压缩回8位。两种方法均提供了循环和向量化两种实现方式,推荐使用更高效的向量化方法。转换过程包含16倍的缩放因子,用于8位到12位数据的相互转换。代码支持自动或手动指定图像尺寸,适用于显示驱动等硬件应用场景。
把RGB三通道图像转换为RGB平铺的2维图像,代码如下
function[output_2D_12bit]=img_3Dto2D_8Bto12B(input_3D_8bit,img_V,img_H)% 把3维RGB图像转换为显示驱动的RGB2维图像,支持1或3个输入% V1.0.0% 2025/12/13% 步达硬件ifnargin<2[img_V,img_H,~]=size(input_3D_8bit);endoutput_2D_12bit=zeros(img_V,img_H*3,'double');%%Method1:for循环赋值% for i=1:img_V% for j=1:img_H% output_2D(i,(j-1)*3+1) =input_3D(i,j,1);% output_2D(i,(j-1)*3+2) =input_3D(i,j,2);% output_2D(i,(j-1)*3+3) =input_3D(i,j,3);% end% end%Method2:向量赋值,速度快,推荐forj=1:img_Houtput_2D_12bit(:,(j-1)*3+1)=input_3D_8bit(:,j,1);output_2D_12bit(:,(j-1)*3+2)=input_3D_8bit(:,j,2);output_2D_12bit(:,(j-1)*3+3)=input_3D_8bit(:,j,3);endoutput_2D_12bit=output_2D_12bit*16;end把RGB平铺的2维图像转换为RGB三通道图像,代码如下:
function[output_3D_8bit]=img_2Dto3D_12Bto8B(input_2D_12bit,img_V,img_H)% 把显示驱动的RGB2维图像转换为3维RGB图像,支持1或3个输入% V1.0.0% 2025/12/13% 步达硬件ifnargin<2[img_V,img_H]=size(input_2D_12bit);img_H=img_H/3;endoutput_3D_8bit=zeros(img_V,img_H,3,'uint8');% % Method1:for循环赋值% for i=1:img_V% for j=1:img_H% output_3D(i,j,1) =fix(input_2D(i,(j-1)*3+1)/16);% output_3D(i,j,2) =fix(input_2D(i,(j-1)*3+2)/16);% output_3D(i,j,3) =fix(input_2D(i,(j-1)*3+3)/16);% end% end% % Method2:向量赋值,速度快,推荐forj=1:img_Houtput_3D_8bit(:,j,1)=fix(input_2D_12bit(:,(j-1)*3+1)/16);output_3D_8bit(:,j,2)=fix(input_2D_12bit(:,(j-1)*3+2)/16);output_3D_8bit(:,j,3)=fix(input_2D_12bit(:,(j-1)*3+3)/16);endend