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
效果圖
轉載本文請聯系原作者獲取授權,同時請注明本文來自徐磊科學網博客。
鏈接地址:http://blog.sciencenet.cn/blog-3503-768443.html
上一篇:年輕學生現實一點并不是件太壞的事情
下一篇:西方媒體讓我更愛國
總結
以上是生活随笔為你收集整理的matlab中如何随机排列,科学网—对图片进行拆分并随机排列的快速算法(MATLAB) - 徐磊的博文...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 利用matlab命令画出以下信号的波形,
- 下一篇: oracle服务器的操作系统,Oracl