realkate1

导航

matlab blkproc

有关blkproc 命令的使用

 (2011-07-31 09:52:57)
标签: 

杂谈

分类: matlab使用

如果你让matlab帮你计算最好的块大小,用bestblk函数,
[MB,NB] = BESTBLK([M N],K) 可以得到分块之后的行数和列数,
乘一下就是块数


命令:blkproc   从matlab2009开始用 blockproc
功能:对图像进行分块处理
函数调用形式: 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 2 3 4 5 6 7 8 ;
9 10 11 12 13 14 15 16;
17 18 19 20 21 22 23 24;
25 26 27 28 29 30 31 32]

要每4元素求和,比如
[1 + 2 + 9 +10 3+4+11+12 5+6+13+14 7+8+15+16 ;
17+18+25+26 19+20+27+28 21+22+29+30 23+24+31+32]
得出一新的矩阵。

采用blkproc命令,按块执行某函数。
首先你需要自己新建一个函数sum2.m(2维求和函数)
其内容是
function y=sum2(x)
y=sum(sum(x));

然后就可以利用blkproc命令完成你的任务。
B=blkproc(A,[2 2], 'sum2')

fun=@sum2; fun='sum2';
B=blkproc(A,[2 2], fun)
 
得到
B =

22 30 38 46
86 94 102 110

 

(1)打马赛克程序:

I = imread('rice.png');
fun = @(x) std2(x)*ones(size(x));      %此处的x表示被处理的那个矩阵
I2 = blkproc(I,[32 32],fun);
imshow(I), figure, imshow(I2,'DisplayRange',[])
 
(2)分块取阈值程序:

I = imread('rice.png');
fun = @(x)im2bw(x,graythresh(x));
I2 = blkproc(I,[32 32],fun);
imshow(I), figure, imshow(I2,'DisplayRange',[])

 

 

posted on 2015-08-13 20:16  realkate1  阅读(922)  评论(0编辑  收藏  举报