matlab 梯度图像,在matlab中快速计算图像的梯度
感謝您的所有答案和有用的建議.我接受了pseudoDust,Hugues,Dima和High Performance Mark的建議并編寫了我自己的代碼.我的代碼如下:
clc;clear all;close all;
x=32;
I = imread('coins.png');
I = imresize(I,[x x]);
I = double(I(:,:,1));
tic
[dx dy] = gradient(I);
toc
tic
[m,n]=size(I);
A = [I(:,2:end) zeros(m,1)];
B = [zeros(m,1) I(:,1:end-1)];
dx1 = [I(:,2)-I(:,1) (A(:,2:end-1)-B(:,2:end-1))./2 I(:,end)-I(:,end-1)];
A = [I(2:end,:) ; zeros(1,n)];
B = [zeros(1,n) ; I(1:end-1,:)];
dy1 = [I(2,:)-I(1,:) ; (A(2:end-1,:)-B(2:end-1,:))./2 ; I(end,:)-I(end-1,:)];
toc
nnz(dx-dx1)
nnz(dy-dy1)
我的基本想法是:漸變平均2個相鄰位置(左和右或頂部和底部),除了它取值和相鄰位置之間的差異的邊緣.然后,我用matlab梯度函數(dx,dy)生成的矩陣檢查了我生成的矩陣(dx1,dy1).
Elapsed time is 0.010232 seconds.
Elapsed time is 0.000066 seconds.
ans =
0
ans =
0
所以我相信我的代碼是正確的.至少可以說,時間結果令人驚訝.然后我用matlab計算我的代碼,用于不同大小的圖像.
我得到了這個結果:
%x=16
Elapsed time is 0.010790 seconds.
Elapsed time is 0.000057 seconds.
%x=32
Elapsed time is 0.010564 seconds.
Elapsed time is 0.000069 seconds.
%x=64
Elapsed time is 0.010627 seconds.
Elapsed time is 0.000152 seconds.
%x=128
Elapsed time is 0.011346 seconds.
Elapsed time is 0.000669 seconds.
%x=256
Elapsed time is 0.017311 seconds.
Elapsed time is 0.004468 seconds.
%x=512
Elapsed time is 0.044148 seconds.
Elapsed time is 0.030435 seconds.
%x=1024
Elapsed time is 0.093386 seconds.
Elapsed time is 0.093029 seconds.
%x=2048
Elapsed time is 0.345423 seconds.
Elapsed time is 0.387762 seconds.
所以我的結論是這樣的:對于高達1024X1024的圖像大小,我的代碼比matlab中內置的漸變命令更快.
編輯:我更新了我的答案并添加了此圖表:
它清楚地表明,對于較小的數組大小,我的代碼明顯快于matlab梯度函數.
我的代碼是否正確?伙計們請仔細檢查并檢查.請提供反饋.我實際上是matlab的新手,我對這個結果非常驚訝.請檢查我在做什么是否正確?
總結
以上是生活随笔為你收集整理的matlab 梯度图像,在matlab中快速计算图像的梯度的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 整形数据之间的强制转换
- 下一篇: paip.中国银联接口错误码总结