matlab中图像太大,图像处理:算法在MATLAB中耗时太长
您可以使用im2col *將圖片轉(zhuǎn)換為列格式,以便每個(gè)塊形成[64 * 4096]矩陣的列。然后對(duì)每列應(yīng)用轉(zhuǎn)換,并使用bsxfun來向量化錯(cuò)誤計(jì)算。
DomainImage=rand(512);
RangeImage=rand(512);
DomainImage_col = im2col(DomainImage,[8 8],'distinct');
R = im2col(RangeImage,[8 8],'distinct');
[x y]=ndgrid(1:8);
function [x_dash, y_dash] = ApplyTransformation(x,y)
x_dash = x;
y_dash = y;
end
[x_dash, y_dash] = ApplyTransformation(x,y);
idx = sub2ind([8 8],x_dash, y_dash);
D_trans = DomainImage_col(idx,:); %transformation is reduced to matrix indexing
Error = 0;
for mn = 1:64
Error = Error + bsxfun(@minus,R(mn,:),D_trans(mn,:).').^2;
end
[minerror ,min_ij]= min(Error,[],2); % linear index of minimum of each block;
[min_i min_j]=ind2sub([64 64],min_ij); % convert linear index to subscript
解釋:
我們的目標(biāo)是盡可能減少循環(huán)次數(shù)。為此,我們應(yīng)該避免矩陣索引,而應(yīng)該使用矢量化。嵌套循環(huán)應(yīng)轉(zhuǎn)換為一個(gè)循環(huán)。作為第一步,我們可以創(chuàng)建一個(gè)更優(yōu)化的循環(huán):
min_ij = zeros(4096,1);
for kl = 1:4096 %%% => 1:size(D_trans,2)
minerror = 9999;
min_ij(kl) = 0;
for ij = 1:4096 %%% => 1:size(R,2)
Error = 0;
for mn = 1:64
Error = Error + (R(mn,kl) - D_trans(mn,ij)).^2;
end
if(Error < minerror)
minerror = Error;
min_ij(kl) = ij;
end
end
end
我們可以重新安排循環(huán),我們可以將最內(nèi)部的循環(huán)作為外部循環(huán),并將最小值的計(jì)算與錯(cuò)誤的計(jì)算分開。
% Computation of the error
Error = zeros(4096,4096);
for mn = 1:64
for kl = 1:4096
for ij = 1:4096
Error(kl,ij) = Error(kl,ij) + (R(mn,kl) - D_trans(mn,ij)).^2;
end
end
end
% Computation of the min
min_ij = zeros(4096,1);
for kl = 1:4096
minerror = 9999;
min_ij(kl) = 0;
for ij = 1:4096
if(Error(kl,ij) < minerror)
minerror = Error(kl,ij);
min_ij(kl) = ij;
end
end
end
現(xiàn)在代碼的排列方式可以最好地進(jìn)行矢量化:
Error = 0;
for mn = 1:64
Error = Error + bsxfun(@minus,R(mn,:),D_trans(mn,:).').^2;
end
[minerror ,min_ij] = min(Error, [], 2);
[min_i ,min_j] = ind2sub([64 64], min_ij);
*如果您沒有圖像處理工具箱,可以找到更有效的im2col實(shí)施{。{3}}。
*整個(gè)計(jì)算只需不到一分鐘。
總結(jié)
以上是生活随笔為你收集整理的matlab中图像太大,图像处理:算法在MATLAB中耗时太长的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java json 教程,【简明教程】J
- 下一篇: 循环神经网络的数据预处理