5.用Matlab如何将位深度为16的图片转换为二进制文件

5.用Matlab如何将位深度为16的图片转换为二进制文件

1. 问题的提出

使用FPGA做图像处理的测试时,常常需要做一些图像的测试激励,需要将一些图片存储到FPGA中,一般来说FPGA芯片的片内ram不超过2MB,当你想要存储的图片超过2MB时怎么办呢?一种方案是将图片先存到SD卡中,当FPGA上电时再将SD卡中的数据读入FPGA。此时,存入SD卡中的数据不能直接从PC上存入,存入SD卡中的数据须为二进制文件。

2. 用Matlab将位深度为16的图片转换为二进制文件

2.1 位宽的区别

假设A=uint8(234), B=uint16(63241)。A,B转换为16进制数分别为Ahex=EA, Bhex=F709 。位宽为8的图片转换为二进制后用二进制文件阅读器检查是EA。位宽为16的图片转换为二进制后用二进制文件阅读器检查是09F7。位宽为16的文件与所想要的结果不匹配。这里我猜想Matlab可能是按照字节来转换的。所以在Matlab中需要对位深度为16的数据进行处理,将高字节与低字节进行转换。相关转化代码如下:

[m,n]= size(test_photo_cor2);
hex_array_exchange = ones(m,n);
test_photo_cor3 = double(test_photo_cor2);
 for row = 1:m
     for colum = 1 : n
         qianliangwei = fix(test_photo_cor3(row,colum)/256);
         houliangwei = rem(test_photo_cor3(row,colum),256);
         final = houliangwei * 256 + qianliangwei;
         hex_array_exchange(row,colum) = final;
     end
 end
hex_array_exchange_image = uint16(hex_array_exchange) ;

2.2 matlab的转换机理

以下代码可以直接将一张图片转换为二进制文件,但是要想得到想要的格式,还需要注意一下matlab的转换机理:matlab对于图片的处理,是以矩阵的形式进行的,以一个8x8的矩阵为例,A[8,8],matlab会先将图片最左侧的数据转换为二进制文件,然后从最左侧起,按列依次将图片转换为二进制文件。也就是转换的顺序是A[1,1], A[1,2], A[1,3] …A[2,1], A[2,2]…为了得到想要的数据,有时需要对图片矩阵进行转置。

clc; clear;
pic = imread('F:/EMCCD_data/fin_photos/lena_4k_test.png');
fid1 = fopen('F:/EMCCD_data/fin_photos/lena_4k_test.bin','wb');
    fwrite(fid1,pic,'uint16');
fclose(fid1);
imshow(pic);

你可能感兴趣的:(Matlab,matlab)