有关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‘)
或
[email protected]; 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‘,[])