Matlab图像处理函数blkproc的解释

转自:http://blog.sina.com.cn/s/blog_6b7d710b0101megz.html

功能:对图像进行分块处理
函数调用形式:B = blkproc(A,[m n],fun, parameter1, parameter2, ...)
B = blkproc(A,[m n],[mborder nborder],fun,...)
B = blkproc(A,'indexed',...)
参数解释:[m n] :图像以m*n为分块单位,对图像进行处理(如8像素*8像素)
          Fun:   应用此函数对分别对每个m*n分块的像素进行处理
          parameter1, parameter2: 要传给fun函数的参数
          mborder nborder:对每个m*n块上下进行mborder个单位的扩充,左右进行nborder个单位的扩充,扩充的像素值为0,fun函数对整个扩充后的分块进行处理。
例子:1 图像压缩
I = imread('cameraman.tif'); 
I=im2double(I);  
T=dctmtx(8);%生成一个8*8 DCT变换矩阵
B=blkproc(I,[8,8],'P1*x*P2',T,T');% x就是每一个分成的8*8大小的块,P1*x*P2相当于像素块的处理函数,p1=T p2=T’,也就是fun=p1*x*p2'=T*x*T'的功能是进行离散余弦变换
  mask = [1   1   1   1   0   0   0   0
          1   1   1   0   0   0   0   0
          1   1   0   0   0   0   0   0
          1   0   0   0   0   0   0   0
          0   0   0   0   0   0   0   0
          0   0   0   0   0   0   0   0
          0   0   0   0   0   0   0   0
          0   0   0   0   0   0   0   0];
保留左上角十个系数
B2 = blkproc(B,[8 8],'P1.*x',mask); %舍弃每个块中的高频系数,达到图像压缩的目的
I2=blkproc(B2,[8,8],'P1*x*P2',T,T');  %进行反余弦变换,得到压缩后的图象
imshow(I);   
figure;                            
imshow(I2);      
注意:如果是三维图象(如RGB)则要先将图像转换成图像变成灰度图象或者用reshape函数转换维数

你可能感兴趣的:(matlab)