henry

博客园 首页 新随笔 联系 订阅 管理

在DE2提供的实例中,有一张tiger彩色图,格式为bmp。利用image converter可以将该图转为其它格式的数据。其中dat格式的文件可以供control panel使用。不过我比较感兴趣的是生成的txt文档。看image converter的pdf文档说明,该txt文档为原图的二进制图像。打开该txt文档后发现里面其实是许多0~255(00~FF)之间的像素值。洋洋洒洒一大堆的数值,不知道到底是多少。怎么显示该二进制图像呢?

动用MATLAB,读取该txt文件。

fid_in=fopen('e:\tiger_BW1.txt');
[data_in,count_in]=fscanf(fid_in,'%s');

运行程序后,发现count_in=38400

用size(data_in,2)可看出data_in中共有76800个字符,每个字符若用4位二进制数表示,则总共为307200,即分辨率为640×480。

到此,思路形成:每次读取160个字符,每个字符转换成4位二进制,这样构成的一行为640个数据。循环读取480次,则可以构成一个640*480的矩阵,也就是我们要的东东。

clear;clc
H=640;
V=480;
fid_in=fopen('e:\tiger_BW1.txt');%共76800个字符,每个字符用4位二进制数表示,总共为307200,即640×480
[data_in,count_in]=fscanf(fid_in,'%s');
data_out=zeros(V,H);
%j=1;
for j=1:V
    %提取160个字符,共640位,作为1行
    data_reg=data_in(1,160*j-159:160*j);
    data_out(j,:)=Char2Matrix(data_reg);
end

 

function data_out=Char2Matrix(data_in)
%datain为字符串,长度为160
%dataout为行向量,1×640

 

data_out=zeros(1,640);
%data_out=zeros(1,12);
for i=1:160
    data_reg=Char2Bin(data_in(1,i));
    for j=1:4
        if (data_reg(1,j)=='0')
            data_out(1,4*(i-1)+j)=0;
        elseif (data_reg(1,j)=='1')
            data_out(1,4*(i-1)+j)=1;
        end
    end
end

function dataout=Char2Bin(datain)
%datain为字符量,dataout为二进制量
switch datain
    case '0'
        dataout='0000';
    case '1'
        dataout='0001';
    case '2'
        dataout='0010';
    case '3'
        dataout='0011';
    case '4'
        dataout='0100';
    case '5'
        dataout='0101';
    case '6'
        dataout='0110';
    case '7'
        dataout='0111';
    case '8'
        dataout='1000';
    case '9'
        dataout='1001';
    case 'A'
        dataout='1010';
    case 'B'
        dataout='1011';
    case 'C'
        dataout='1100';
    case 'D'
        dataout='1101';
    case 'E'
        dataout='1110';
    case 'F'
        dataout='1111';
end

利用imshow(data_out)显示出图

posted on 2010-03-31 20:12  yuhengzhou  阅读(452)  评论(0编辑  收藏  举报