matlab数组随机排序,科学网—对图片进行拆分并随机排列的快速算法(MATLAB) - 徐磊的博文...

我手头快完成的一个改进荧光显微镜图像处理的研究项目需要用到拆分一个图片,并对其进行随机排列的功能。之前我写的程序虽然能够得到想要的结果,但是运行太慢,非常耗时。原方法是计算图片被拆分成的各个方格的位置,然后随机地挑选一个小方格,再随机挑选另外一个方格,并对两者进行替换,再使用循环语句将所有的方格都依次替换一遍。图片如果很大的话,这个替换就变得极其耗时。最近我想出来一个可以将运行速度数倍提高的方法,这个新方法采取的思路是先把代表图像的矩阵转换成所需大小的元胞数组(cell),之后随机生成一个打乱了顺序的,代表各个元胞数组的序列,再按照新的序列将元胞数组重新转换成矩阵即可。我写的这个函数,如果有需要的话也可以按照自定义的顺序进行排列,否则默认的情况(在不给出第三个参数的情况下),是进行随机排布。

秉着共享原则,我把我写好的MATLAB函数分享给大家,希望对需要用到这个功能的人有帮助.

function [xre] = imrand(x,bsize,bid)

%imrand function is used to break original matrix into a number of blocks

%and re-position the blocks.

%   x is the original image. bsize specifies the size of a block, which is

%   a two-element vector. "imrand" is similar to "imScramble" and the

%   difference is that in this function, the randomization is done by first

%   break down the original matrix representing the image to smaller cells

%   of size "bsize" and randomize the index of each cell. Then the cells

%   are transformed to a matrix. "bid" is a vector with a length of the

%   total number of divided blocks, and it contains information regarding

%   the ordering of each cell.

[nr,nc]=size(x);

xs = mat2cell(x,bsize(1)*ones(1,nr/bsize(1)),bsize(2)*ones(1,nc/bsize(2)));

nb = nr*nc/bsize(1)/bsize(2);

if nargin <3

bid = randperm(nb);

end

xre = xs;

for i=1:nb

xre{i}=xs{bid(i)};

end

xre = cell2mat(xre);

end

效果图

9acadfaf9eefe1391558dab25933b995.png

转载本文请联系原作者获取授权,同时请注明本文来自徐磊科学网博客。

链接地址:http://blog.sciencenet.cn/blog-3503-768443.html

上一篇:年轻学生现实一点并不是件太坏的事情

下一篇:西方媒体让我更爱国

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值