matlab中如何随机排列,科学网—对图片进行拆分并随机排列的快速算法(MATLAB) - 徐磊的博文...
我手頭快完成的一個(gè)改進(jìn)熒光顯微鏡圖像處理的研究項(xiàng)目需要用到拆分一個(gè)圖片,并對(duì)其進(jìn)行隨機(jī)排列的功能。之前我寫(xiě)的程序雖然能夠得到想要的結(jié)果,但是運(yùn)行太慢,非常耗時(shí)。原方法是計(jì)算圖片被拆分成的各個(gè)方格的位置,然后隨機(jī)地挑選一個(gè)小方格,再隨機(jī)挑選另外一個(gè)方格,并對(duì)兩者進(jìn)行替換,再使用循環(huán)語(yǔ)句將所有的方格都依次替換一遍。圖片如果很大的話,這個(gè)替換就變得極其耗時(shí)。最近我想出來(lái)一個(gè)可以將運(yùn)行速度數(shù)倍提高的方法,這個(gè)新方法采取的思路是先把代表圖像的矩陣轉(zhuǎn)換成所需大小的元胞數(shù)組(cell),之后隨機(jī)生成一個(gè)打亂了順序的,代表各個(gè)元胞數(shù)組的序列,再按照新的序列將元胞數(shù)組重新轉(zhuǎn)換成矩陣即可。我寫(xiě)的這個(gè)函數(shù),如果有需要的話也可以按照自定義的順序進(jìn)行排列,否則默認(rèn)的情況(在不給出第三個(gè)參數(shù)的情況下),是進(jìn)行隨機(jī)排布。
秉著共享原則,我把我寫(xiě)好的MATLAB函數(shù)分享給大家,希望對(duì)需要用到這個(gè)功能的人有幫助.
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
效果圖
轉(zhuǎn)載本文請(qǐng)聯(lián)系原作者獲取授權(quán),同時(shí)請(qǐng)注明本文來(lái)自徐磊科學(xué)網(wǎng)博客。
鏈接地址:http://blog.sciencenet.cn/blog-3503-768443.html
上一篇:年輕學(xué)生現(xiàn)實(shí)一點(diǎn)并不是件太壞的事情
下一篇:西方媒體讓我更愛(ài)國(guó)
總結(jié)
以上是生活随笔為你收集整理的matlab中如何随机排列,科学网—对图片进行拆分并随机排列的快速算法(MATLAB) - 徐磊的博文...的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 利用matlab命令画出以下信号的波形,
- 下一篇: matlab人脸追踪,求大神帮助我这个菜