Schnelle Berechnung eines Gradienten eines Bildes in Matlab

Ich habe versucht, meinen Code zu optimieren, und festgestellt, dass einer meiner Codes ein Engpass ist. Mein Code war:

function [] = one(x)
I = imread('coins.png');
I = double(I);
I = imresize(I,[x x]);
sig=.8;    % scale parameter in Gaussian kernel
G=fspecial('gaussian',15,sig); % Caussian kernel
Img_smooth=conv2(I,G,'same');  % smooth image by Gaussiin convolution
[Ix,Iy]=gradient(Img_smooth);
f=Ix.^2+Iy.^2;
g=1./(1+f);  % edge indicator function.
end

Ich habe versucht, es so zu machen: alles löschen, alles schließen;

x=4000;N=1;
tic
for i=1:N
    one(x);
end
toc

Ich fand heraus, dass die größte Menge an Zeit von der. Verbraucht wurdeGradientenoperator Aussage (ca. 60%) der Gesamtzeit. Also habe ich darüber nachgedacht, wie ich meinen Code weiter optimieren kann ...

Ich habe einige Seiten wie:Dgradient undhttp://regularize.wordpress.com/2013/06/19/how-fast-can-you-calculate-the-gradient-of-an-image-in-matlab/

Dgradient ist jedoch eine MEX-Datei und ich möchte sie nicht verwenden. Ich wollte meine eigene Verlaufsfunktion schreiben. In den Blogs habe ich gelesen, dass der Gradientenoperator in matlab deutlich langsamer ist und durch die Verwendung von shift & substract und sparsamer Matrix beschleunigt werden kann.

Ich habe keine Kenntnisse über spärliche Matrix. Ich habe es jedoch mit der Methode shift und substract versucht. jedochIch bin mir sicher, dass mein Code falsch ist. Könnte jemand klären, welche Art von Unterschied matlab für die Berechnung seiner Steigung verwendet? Und zeigen Sie mir, wie es in meinem Code geht?

clc;clear all;close all;
I = imread('coins.png');
I = double(I(:,:,1));
I = imresize(I,[4 4]);

tic
[dx dy] = gradient(I);
toc

tic
%//Doing forward difference on both directions
dx1 = [I(:,2:end) I(:,end)] - I;
dy1 = [I(2:end,:);I(end,:)] - I;
toc

Könntet ihr bitte in den Code schauen und mir vorschlagen, wie ich ihn richtig anwenden kann? Oder leiten Sie mich, wie das mit einer dünnen Matrix gemacht wird?

Antworten auf die Frage(4)

Ihre Antwort auf die Frage