matlab 梯度图像,快速计算matlab中图像的梯度
感謝您的所有答案和有用的建議。我采納了pseudoDust的建議,Hugues,Dima和高性能標記并寫我自己的代碼。下面我的代碼中給出:
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.
所以,我的結論是這樣的:圖像尺寸1024×1024高達我的代碼比在MATLAB梯度命令內置更快。
編輯:我更新了我的答案,并將此圖:
它清楚地表明,對于小數組大小我的代碼比MATLAB的梯度功能顯著更快。
是我的代碼是否正確?伙計們請通過它來檢查。請提供您的反饋。我真的是matlab的新手,對這個結果非常驚訝。請檢查我所做的是否正確?
總結
以上是生活随笔為你收集整理的matlab 梯度图像,快速计算matlab中图像的梯度的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 洛谷刷题笔记 鸡尾酒疗法
- 下一篇: 计算机二级正确ip地址,计算机二级题中的