对灰度图像进行霍夫曼编码,用Matlab怎么实现

2024-05-12

1. 对灰度图像进行霍夫曼编码,用Matlab怎么实现

给你一段程序,自己研究下吧!\x0d\x0a\x0d\x0aclc\x0d\x0aclear\x0d\x0acloseall;\x0d\x0a%定义HufData/Len为全局变量的结构体\x0d\x0aglobalHufData;\x0d\x0aglobalLen\x0d\x0adisp('计算机正在准备输出哈夫曼编码结果,请耐心等待??');\x0d\x0a%原始码字的灰度\x0d\x0aa=imread('kids.tif');\x0d\x0a\x0d\x0a%分区画出原始图像和灰度直方图\x0d\x0afigure;\x0d\x0asubplot(1,2,1)\x0d\x0aimshow(a);\x0d\x0a%取消坐标轴和边框\x0d\x0aaxisoff\x0d\x0aboxoff\x0d\x0atitle('MATLAB自带图像','fontsize',13);\x0d\x0asubplot(1,2,2);\x0d\x0aaxisoff\x0d\x0aboxoff\x0d\x0aimhist(a);\x0d\x0atitle('图像灰度直方图','fontsize',13);\x0d\x0a%图像的灰度统计\x0d\x0aGrayStatistics=imhist(a);\x0d\x0aGrayStatistics=GrayStatistics';\x0d\x0aGrayRatioo=GrayStatistics/sum(GrayStatistics);\x0d\x0aGrayRatioNO=find(GrayRatioo~=0);\x0d\x0aLen=length(GrayRatioNO);\x0d\x0a%初始化灰度集,防止系统随即赋予其垃圾值\x0d\x0aGrayRatio=ones(1,Len);\x0d\x0a\x0d\x0afori=1:Len\x0d\x0aGrayRatio(i)=GrayRatioo(i);\x0d\x0aend\x0d\x0a\x0d\x0aGrayRatio=abs(sort(-GrayRatio));\x0d\x0a%将图像灰度概率赋予结构体\x0d\x0afori=1:Len\x0d\x0aHufData(i).value=GrayRatio(i);\x0d\x0aend\x0d\x0a\x0d\x0a%哈夫曼编码/霍夫曼编码\x0d\x0aHuffmanCode(Len);\x0d\x0a%输出码字\x0d\x0a\x0d\x0azippedHuffman=1;\x0d\x0afori=1:Len\x0d\x0atmpData=HufData(i).code;\x0d\x0astr='';\x0d\x0aforj=1:length(tmpData)\x0d\x0astr=strcat(str,num2str(tmpData(j)));\x0d\x0azippedHuffman=zippedHuffman+1;\x0d\x0aend\x0d\x0adisp(strcat('a',num2str(i),'=',str))\x0d\x0aend\x0d\x0ai;\x0d\x0a%计算计算机一共输出多少个哈夫曼编码/霍夫曼编码\x0d\x0azippedHuffman;\x0d\x0a%计算在删去0灰度级压缩之前的原始图像字节容量\x0d\x0aunzipped_delete=i*8;\x0d\x0a\x0d\x0a%计算压缩比率\x0d\x0aratio_delete=zippedHuffman/unzipped_delete;\x0d\x0a\x0d\x0a%计算图像的压缩比率\x0d\x0aad=num2str(ratio_delete*100);\x0d\x0astr2=strcat(ad,'%');\x0d\x0adisp(strcat('哈夫曼编码压缩比率','=',str2))\x0d\x0a\x0d\x0a%子程序:哈夫曼编码/霍夫曼编码函数HuffmanCode.m\x0d\x0afunctionHuffmanCode(OriginSize)\x0d\x0aglobalHufData;\x0d\x0aglobalLen\x0d\x0afori=1:Len\x0d\x0a%%霍夫曼编码树左边纪录为1\x0d\x0aHufData(i).left=1;\x0d\x0a%%霍夫曼编码树右边纪录为0\x0d\x0aHufData(i).right=0;\x0d\x0a%%输出码初始化为0\x0d\x0aHufData(i).code=[];\x0d\x0a%%排序列表初始化\x0d\x0aSortList(i).symbol=i;\x0d\x0aSortList(i).value=HufData(i).value;\x0d\x0aend\x0d\x0a%初始化原始消息数目\x0d\x0anewsymbol=OriginSize;\x0d\x0aforn=OriginSize:-1:2\x0d\x0a%将N个消息进行排序\x0d\x0aSortList=sortdata(SortList,n);\x0d\x0a%将最后两个出现概率最小的消息合成一个消息\x0d\x0anewsymbol=newsymbol+1;\x0d\x0aHufData(newsymbol).value=SortList(n-1).value+SortList(n).value;\x0d\x0aHufData(newsymbol).left=SortList(n-1).symbol;\x0d\x0aHufData(newsymbol).right=SortList(n).symbol;\x0d\x0a%将消息添加到列队的最后,为N-1个消息重新排序作好准备\x0d\x0aSortList(n-1).symbol=newsymbol;\x0d\x0aSortList(n-1).value=HufData(newsymbol).value;\x0d\x0aend\x0d\x0a%遍历霍夫曼树,获得霍夫曼编码/哈夫曼编码\x0d\x0avisit(newsymbol,Len,[]);\x0d\x0aend\x0d\x0a\x0d\x0a%子程序:冒泡排序法函数sortdata.m\x0d\x0afunctionreData=sortdata(SortList,n)\x0d\x0a%根据消息概率进行排序\x0d\x0afork=n:-1:2\x0d\x0aforj=1:k-1\x0d\x0amin=SortList(j).value;\x0d\x0asbl=SortList(j).symbol;\x0d\x0aif(min0)\x0d\x0a%遍历右分支接点输出0,这里采用子函数嵌套调用\x0d\x0aocode2=[ocode0];\x0d\x0avisit(HufData(node).right,n,ocode2);\x0d\x0aend\x0d\x0aend\x0d\x0aend

对灰度图像进行霍夫曼编码,用Matlab怎么实现

2. 霍夫曼编码在Matlab中如何实现?

代码:
function CODE = huffman(p)
%HUFFMAN Builds a variable-length Huffman code for a symbol source.
%   CODE = HUFFMAN(P) returns a Huffman code as binary strings in
%   cell array CODE for input symbol probability vector P. Each word
%   in CODE corresponds to a symbol whose probability is at the
%   corresponding index of P. 
%
%   Based on huffman5 by Sean Danaher, University of Northumbria,
%   Newcastle UK. Available at the MATLAB Central File Exchange:
%   Category General DSP in Signal Processing and Communications. 
%   Copyright 2002-2004 R. C. Gonzalez, R. E. Woods, & S. L. Eddins
%   Digital Image Processing Using MATLAB, Prentice-Hall, 2004
%   $Revision: 1.5 $  $Date: 2003/10/26 18:37:16 $
% Check the input arguments for reasonableness.
error(nargchk(1, 1, nargin));
if (ndims(p) ~= 2) | (min(size(p)) > 1) | ~isreal(p) | ~isnumeric(p)
   error('P must be a real numeric vector.');     
end
   
% Global variable surviving all recursions of function 'makecode'
global CODE
CODE = cell(length(p), 1);  % Init the global cell array
                            
if length(p) > 1            % When more than one symbol ...
   p = p / sum(p);          % Normalize the input probabilities
   s = reduce(p);           % Do Huffman source symbol reductions
   makecode(s, []);         % Recursively generate the code
else  
   CODE = {'1'};            % Else, trivial one symbol case!
end;   
%-------------------------------------------------------------------%
function s = reduce(p);
% Create a Huffman source reduction tree in a MATLAB cell structure
% by performing source symbol reductions until there are only two
% reduced symbols remaining
s = cell(length(p), 1);
% Generate a starting tree with symbol nodes 1, 2, 3, ... to 
% reference the symbol probabilities.
for i = 1:length(p)
   s{i} = i; 
end
while numel(s) > 2
   [p, i] = sort(p);    % Sort the symbol probabilities
   p(2) = p(1) + p(2);  % Merge the 2 lowest probabilities
   p(1) = [];           % and prune the lowest one
   
   s = s(i);            % Reorder tree for new probabilities
   s{2} = {s{1}, s{2}}; % and merge & prune its nodes
   s(1) = [];           % to match the probabilities
end
%-------------------------------------------------------------------%
function makecode(sc, codeword)
% Scan the nodes of a Huffman source reduction tree recursively to
% generate the indicated variable length code words.
% Global variable surviving all recursive calls
global CODE                           
if isa(sc, 'cell')                   % For cell array nodes,
   makecode(sc{1}, [codeword 0]);    % add a 0 if the 1st element
   makecode(sc{2}, [codeword 1]);    % or a 1 if the 2nd
else                                 % For leaf (numeric) nodes,
   CODE{sc} = char('0' + codeword);  % create a char code string
end


将上述代码保存为huffman.m,调用实例:
>> p = [0.1875 0.5 0.125 0.1875];
>> c = huffman(p)
c = 
    '011'
    '1'
    '010'
    '00'

c就是霍夫曼编码结果。

3. 急求助 用matlab对一幅图像进行算数编码 RLE编码 霍夫曼编码 香农编码编程 急求

2 JPEG基本原理
JPEG对灰度图像的压缩处理过程如图1所示。JPEG对灰度图像的压缩处理过程主要包括:图像分割,离散余弦变换(DCT),量化(Quantization),“z”形排序(Zigzag Scan),差分脉冲编码调制(Differential Pulse CodeModulation,DPCM)对直流系数(Dc),行程长度编码(Run—kngth Encoding,RLE)对交流系数(Ac),霍夫曼(Hufman)编码等。
图像压缩过程如图1所示。
JPEG标准的特点是离散余弦变换,它可以将8×8图像的空间表达式转换为频率域,经二维DCT变换后,第零行零列是低频分量,其余为高频分量。
3.1 JPEG压缩模块设计
按照压缩流程,JPEG压缩实现可以划分为三个模块:DCT变换模块,主控模块,编码输出模块。压缩模块组成如图3所示:DCT变换模块:把输入其中的像素值进行DCT变换。主控模块:控制数据的读写并送入DCT变换模块,对变换后的数据进行量化,量化完后进行z扫描。编码输出模块:对经过扫描和量化的数据进行编码并输出。
3 压缩系统的构成和实现
图像压缩的过程:首先把图像分为8×8的块,然后进行二维DCT变换,变换之后的数据高频和低频分开;接着开始z扫描,z扫描是一个排序过程,它可以让高频和低频分量按照编码的需要排列;Z扫描之后的数据需要量化后才能编码,量化是使数据量减少达到压缩目的重要环节(量化表见表1);最后对扫描后的数据编码,低频分量用差分脉冲编码和低频霍夫曼编码,高频分量用行程长度编码。图像压缩系统的结构图如2所示,由数据流控制模块、外部存储器接口模块、存储待压缩数据RAM、JPEG压缩模块、压缩数据接收模块、数据发送模块组成:
1)数据流控制模块:控制数据流的方向。
2)外部存储器接口模块:提供SRAM的读写控制时序。
3)接收压缩数据模块:接收压缩模块发送来的数据并且通过读写SRAM控制模块存储到SRAM里面。
4)数据发送模块:产生和数传约定的时序并把压缩数据发出。
3.1 JPEG压缩模块设计
按照压缩流程,JPEG压缩实现可以划分为三个模块:DCT变换模块,主控模块,编码输出模块。压缩模块组成如图3所示:DCT变换模块:把输入其中的像素值进行DCT变换。主控模块:控制数据的读写并送入DCT变换模块,对变换后的数据进行量化,量化完后进行z扫描。编码输出模块:对经过扫描和量化的数据进行编码并输出。
3.2 编码模块实现细节
下面举例分别介绍对直流分量和交流分量不同的编码规则。
假设DC值为一l5,它的霍夫曼码字由AB两部分组成,A为其长度的霍夫曼编码,B为其数值的幅度。首先通过查找表查找其绝对值范围为4,即其值可以用一个四位的二进制数来表示;然后用查到的4在直流霍夫曼码表中查找相应的霍夫曼编码,其对应的霍夫曼编码为一个三位的二进制数101,那么这个DC系的编码为它值的长度对应的霍夫曼编码再加上其幅度。对于一15幅度为0000(最高位为符号位,0为负,1为正)。计算幅值的过程:在长度为4的范围有16个值,即从一l5到15,用4位二进制补码来表示为0001、0010、0011、0100、0101、0110、0111、1000、1000、1001、1010、1011、1100、1101、1110、1111。负数的幅值就是其绝对值的4位二进制表示的反码,反码等于补码减1,0000,0001,0010,0011,0100,0101,0110,0111,0111,1000,1001,1010,1011,1100,1101,1110,1111。这样DC值为一15的编码即为1010000。交流系数和直流系数相比多了零行程编码。零行程编码的步骤:按照扫描之后的顺序逐个检测交流系数,并用变量来记录零系数的个数,遇到非零系数时首先观察它和前一个非零系数之间有多少个零系数,如果超过了16个则对前16个零单独编码,在霍夫曼码表中有单独的ZRL代码对它编码,然后观察剩余零的个数是否超过16个,如果超过仍然执行上一步操作,如果小于16则把剩余零的个数和非零交流系作为参数对应霍夫曼码表进行编码。



急求助 用matlab对一幅图像进行算数编码 RLE编码 霍夫曼编码 香农编码编程 急求

4. 请问一下MATLAB的高手们,如何使用MATLAB实现对数字图像的算术编码。谢谢

给你一段程序,自己研究下吧!

clc
clear
close all;
%定义HufData/Len为全局变量的结构体
global HufData;
global Len
disp('计算机正在准备输出哈夫曼编码结果,请耐心等待……');
%原始码字的灰度
a=imread('kids.tif');
 
%分区画出原始图像和灰度直方图
figure;
subplot(1,2,1)
imshow(a);
%取消坐标轴和边框
axis off
box off
title('MATLAB自带图像','fontsize',13);
subplot(1,2,2);
axis off
box off
imhist(a);
title('图像灰度直方图','fontsize',13);
%图像的灰度统计
GrayStatistics=imhist(a);
GrayStatistics=GrayStatistics';
GrayRatioo=GrayStatistics/sum(GrayStatistics);
GrayRatioNO=find(GrayRatioo~=0);
Len=length(GrayRatioNO);
%初始化灰度集,防止系统随即赋予其垃圾值
GrayRatio=ones(1,Len);
 
for i=1:Len
GrayRatio(i)=GrayRatioo(i);  
end
 
GrayRatio=abs(sort(-GrayRatio));
%将图像灰度概率赋予结构体
for i=1:Len
    HufData(i).value=GrayRatio(i);
end
 
% 哈夫曼编码/霍夫曼编码
HuffmanCode(Len);
%输出码字
 
zippedHuffman=1;
for i=1:Len
    tmpData=HufData(i).code;
    str='';
    for j=1:length(tmpData)
        str=strcat(str,num2str(tmpData(j)));
        zippedHuffman=zippedHuffman+1;
    end
    disp(strcat('a',num2str(i),'= ',str))
end
i;
%计算计算机一共输出多少个哈夫曼编码/霍夫曼编码
zippedHuffman;
%计算在删去0灰度级压缩之前的原始图像字节容量
unzipped_delete=i*8;
 
%计算压缩比率
ratio_delete=zippedHuffman/unzipped_delete;
 
%计算图像的压缩比率
ad=num2str(ratio_delete*100);
str2=strcat(ad,'%');
disp(strcat('哈夫曼编码压缩比率','= ',str2))

 

%子程序:哈夫曼编码/霍夫曼编码函数HuffmanCode.m
function HuffmanCode(OriginSize)
global HufData;
global Len
for i=1:Len
    %%霍夫曼编码树左边纪录为1
    HufData(i).left=1;
    %%霍夫曼编码树右边纪录为0
    HufData(i).right=0;
    %%输出码初始化为0
    HufData(i).code=[];
    %%排序列表初始化
    SortList(i).symbol=i;
    SortList(i).value=HufData(i).value;
end
%初始化原始消息数目
newsymbol=OriginSize;
for n=OriginSize:-1:2
%将N个消息进行排序   
SortList=sortdata(SortList,n);
%将最后两个出现概率最小的消息合成一个消息
newsymbol=newsymbol+1;
HufData(newsymbol).value=SortList(n-1).value+SortList(n).value;
HufData(newsymbol).left=SortList(n-1).symbol;
HufData(newsymbol).right=SortList(n).symbol;
%将消息添加到列队的最后,为N-1个消息重新排序作好准备
SortList(n-1).symbol=newsymbol;
SortList(n-1).value=HufData(newsymbol).value;
end
%遍历霍夫曼树,获得霍夫曼编码/哈夫曼编码
visit(newsymbol,Len,[]);
end

 

%子程序:冒泡排序法函数sortdata.m    
function reData=sortdata(SortList,n)
%根据消息概率进行排序
for k=n:-1:2
    for j=1:k-1
        min=SortList(j).value;
        sbl=SortList(j).symbol;
        if(min<SortList(j+1).value)
            SortList(j).value=SortList(j+1).value;
            SortList(j+1).value=min;
            SortList(j).symbol=SortList(j+1).symbol;
            SortList(j+1).symbol=sbl;
        end
    end
end
reData=SortList;
end


%子程序:遍历哈夫曼编码/霍夫曼编码树搜索函数visit.m
function visit(node,n,ocode)
global HufData
if node<=n
    %如果没有哈夫曼编码/霍夫曼编码树的子接点直接输出原始码,这里为空码([])
    HufData(node).code=ocode;
else
    if(HufData(node).left>0)
    %遍历左分支接点输出1,这里采用子函数嵌套调用  
        ocode1=[ocode 1];
        visit(HufData(node).left,n,ocode1);
    end
    if(HufData(node).right>0)
    %遍历右分支接点输出0,这里采用子函数嵌套调用    
        ocode2=[ocode 0];
        visit(HufData(node).right,n,ocode2);
    end
end
end

5. 霍夫曼编码 matlab 文字编码:输入一段字符串(由小写英文字母组成),通过调用函数实现对 字符串的编解码

没用过,但查了一下,matlab 自带huffmancoding 的程序,基本上是你需要
1. 把测试图像的灰度(sig)找出来,
2, 然后统计灰度的分布(p),
3. 然后生成一个字典(dict),
4. 然后直接就可以用huffmanenco进行编码,
5. 再用huffmandeco进行恢复。
奇怪的是 huffman coding不是无损压缩么,为什么会有损失? 等待大牛回答

sig = repmat([3 3 1 3 3 3 3 3 2 3],1,50); % Data to encode
symbols = [1 2 3]; % Distinct data symbols appearing in sig
p = [0.1 0.1 0.8]; % Probability of each data symbol
dict = huffmandict(symbols,p); % Create the dictionary.
hcode = huffmanenco(sig,dict); % Encode the data.
dhsig = huffmandeco(hcode,dict); % Decode the code.

霍夫曼编码 matlab 文字编码:输入一段字符串(由小写英文字母组成),通过调用函数实现对 字符串的编解码

6. 对灰度图像进行霍夫曼编码,用Matlab怎么操作?

给你一段程序,自己研究下吧!\x0d\x0a\x0d\x0aclc\x0d\x0aclear\x0d\x0acloseall;\x0d\x0a%定义HufData/Len为全局变量的结构体\x0d\x0aglobalHufData;\x0d\x0aglobalLen\x0d\x0adisp('计算机正在准备输出哈夫曼编码结果,请耐心等待??');\x0d\x0a%原始码字的灰度\x0d\x0aa=imread('kids.tif');\x0d\x0a\x0d\x0a%分区画出原始图像和灰度直方图\x0d\x0afigure;\x0d\x0asubplot(1,2,1)\x0d\x0aimshow(a);\x0d\x0a%取消坐标轴和边框\x0d\x0aaxisoff\x0d\x0aboxoff\x0d\x0atitle('MATLAB自带图像','fontsize',13);\x0d\x0asubplot(1,2,2);\x0d\x0aaxisoff\x0d\x0aboxoff\x0d\x0aimhist(a);\x0d\x0atitle('图像灰度直方图','fontsize',13);\x0d\x0a%图像的灰度统计\x0d\x0aGrayStatistics=imhist(a);\x0d\x0aGrayStatistics=GrayStatistics';\x0d\x0aGrayRatioo=GrayStatistics/sum(GrayStatistics);\x0d\x0aGrayRatioNO=find(GrayRatioo~=0);\x0d\x0aLen=length(GrayRatioNO);\x0d\x0a%初始化灰度集,防止系统随即赋予其垃圾值\x0d\x0aGrayRatio=ones(1,Len);\x0d\x0a\x0d\x0afori=1:Len\x0d\x0aGrayRatio(i)=GrayRatioo(i);\x0d\x0aend\x0d\x0a\x0d\x0aGrayRatio=abs(sort(-GrayRatio));\x0d\x0a%将图像灰度概率赋予结构体\x0d\x0afori=1:Len\x0d\x0aHufData(i).value=GrayRatio(i);\x0d\x0aend\x0d\x0a\x0d\x0a%哈夫曼编码/霍夫曼编码\x0d\x0aHuffmanCode(Len);\x0d\x0a%输出码字\x0d\x0a\x0d\x0azippedHuffman=1;\x0d\x0afori=1:Len\x0d\x0atmpData=HufData(i).code;\x0d\x0astr='';\x0d\x0aforj=1:length(tmpData)\x0d\x0astr=strcat(str,num2str(tmpData(j)));\x0d\x0azippedHuffman=zippedHuffman+1;\x0d\x0aend\x0d\x0adisp(strcat('a',num2str(i),'=',str))\x0d\x0aend\x0d\x0ai;\x0d\x0a%计算计算机一共输出多少个哈夫曼编码/霍夫曼编码\x0d\x0azippedHuffman;\x0d\x0a%计算在删去0灰度级压缩之前的原始图像字节容量\x0d\x0aunzipped_delete=i*8;\x0d\x0a\x0d\x0a%计算压缩比率\x0d\x0aratio_delete=zippedHuffman/unzipped_delete;\x0d\x0a\x0d\x0a%计算图像的压缩比率\x0d\x0aad=num2str(ratio_delete*100);\x0d\x0astr2=strcat(ad,'%');\x0d\x0adisp(strcat('哈夫曼编码压缩比率','=',str2))\x0d\x0a\x0d\x0a%子程序:哈夫曼编码/霍夫曼编码函数HuffmanCode.m\x0d\x0afunctionHuffmanCode(OriginSize)\x0d\x0aglobalHufData;\x0d\x0aglobalLen\x0d\x0afori=1:Len\x0d\x0a%%霍夫曼编码树左边纪录为1\x0d\x0aHufData(i).left=1;\x0d\x0a%%霍夫曼编码树右边纪录为0\x0d\x0aHufData(i).right=0;\x0d\x0a%%输出码初始化为0\x0d\x0aHufData(i).code=[];\x0d\x0a%%排序列表初始化\x0d\x0aSortList(i).symbol=i;\x0d\x0aSortList(i).value=HufData(i).value;\x0d\x0aend\x0d\x0a%初始化原始消息数目\x0d\x0anewsymbol=OriginSize;\x0d\x0aforn=OriginSize:-1:2\x0d\x0a%将N个消息进行排序\x0d\x0aSortList=sortdata(SortList,n);\x0d\x0a%将最后两个出现概率最小的消息合成一个消息\x0d\x0anewsymbol=newsymbol+1;\x0d\x0aHufData(newsymbol).value=SortList(n-1).value+SortList(n).value;\x0d\x0aHufData(newsymbol).left=SortList(n-1).symbol;\x0d\x0aHufData(newsymbol).right=SortList(n).symbol;\x0d\x0a%将消息添加到列队的最后,为N-1个消息重新排序作好准备\x0d\x0aSortList(n-1).symbol=newsymbol;\x0d\x0aSortList(n-1).value=HufData(newsymbol).value;\x0d\x0aend\x0d\x0a%遍历霍夫曼树,获得霍夫曼编码/哈夫曼编码\x0d\x0avisit(newsymbol,Len,[]);\x0d\x0aend\x0d\x0a\x0d\x0a%子程序:冒泡排序法函数sortdata.m\x0d\x0afunctionreData=sortdata(SortList,n)\x0d\x0a%根据消息概率进行排序\x0d\x0afork=n:-1:2\x0d\x0aforj=1:k-1\x0d\x0amin=SortList(j).value;\x0d\x0asbl=SortList(j).symbol;\x0d\x0aif(min0)\x0d\x0a%遍历右分支接点输出0,这里采用子函数嵌套调用\x0d\x0aocode2=[ocode0];\x0d\x0avisit(HufData(node).right,n,ocode2);\x0d\x0aend\x0d\x0aend\x0d\x0aend

7. 在吗 MATLAB实现图像的霍夫曼编码解码求助你

1234

在吗 MATLAB实现图像的霍夫曼编码解码求助你

8. 图像灰度矩阵怎么用matlab实现?

你是指怎么读入图像吗?
可以用imread

X=imread('your_image.tif')

图像就按照灰度存储在X矩阵了。