有关blkproc 命令的使用

一生一叶扁舟的博客

http://blog.sina.com.cn/s/blog_5dd2e9270100wle1.html


如果你让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',[])

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值