2016-03-09 8 views
5

私は私の質問は、勾配法は、最初に何をグラジエントとイングラデーションの違いは何ですか?

  1. で使用されている私は

    [Gx, Gy] = gradient(I); 
    g = sqrt(Gx.^2+Gy.^2); 
    

    [g,~] = imgradient(I, 'sobel'); 
    

    ある2つのオプションがあり、画像Iの勾配を計算したいと思いますオプション?

  2. ソーベル法を使用してグラジエントを見つけるのは何ですか?

はありがとうございすべて

これは私がうるさいが、画像に付加されている場合、異なるがより明確になります

I=zeros([128 128]); 
I(50:100,50:100)=100; 
[Gx, Gy] = gradient(I); 
g1 = sqrt(Gx.^2+Gy.^2); 
[g2,~] = imgradient(I, 'sobel'); 
subplot(121);imshow(g1,[]);title('First option') 
subplot(122);imshow(g2,[]);title('Second option') 

enter image description here

を試みたものです

I=zeros([128 128]); 
I(50:100,50:100)=100; 
%% Add noise image; 
noiseStd=5; 
I_noise = I + (noiseStd * randn([128, 128])); 
[Gx, Gy] = gradient(I_noise); 
g1 = sqrt(Gx.^2+Gy.^2); 
[g2,~] = imgradient(I_noise, 'sobel'); 
subplot(121);imshow(g1,[]);title('First option') 
subplot(122);imshow(g2,[]);title('Second option') 

enter image description here

は、視覚化されるように、第2のオプションは、より輝度値

+1

比較しましたか?違いは、画像用のツールボックスには1つあり、任意のサーフェス用には他のものがあります。 –

+0

はい。私はそれを更新しました。更新された質問 – Jame

+0

をご覧ください。こんにちは!有効な答えを受け入れることを検討してください –

答えて

8

差が実際に「ソーベル」演算子であるを提供しました。ソベル演算子は、その方向勾配を計算するために画像と畳み込まれた行列です。

ソーベル演算子は(ウィキペディアから)次のように定義される。

enter image description here

gradientが行うことだけ方向差です。あなたは1つがイメージを持っているとき、それは、連続領域の離散化であることを知っているので、この差はある

Gx=[ 0 0 0;    Gx=[ 0 -1 0; 
    -1 0 1;   and   0 0 0; 
    0 0 0]      0 1 0]; 

をやっ勾配としてこれを解釈することができます。 Sobel演算子は、与えられたピクセルの「周り」で発生する事柄を考慮に入れるのに役立ちます。

+0

私は上記のコードとしてその方向がない唯一の勾配を考える場合。これらの2つの勾配の違いは何ですか? – Jame

+0

@ user8430 'imgradient'は出力として' sqrt(Gx^2 + Gy^2) 'を与え、' gradient'はあなたを別々に与えます。それだけ。 –

+0

私の結果から、中央差分法はソーベル法よりも騒音が高いことを示しています。従って、中央差分法と比較して、ソーベル法は、設計された係数を有する異なるカーネルを使用して、より良好なノイズ除去を達成する。私に賛成してくれますか? – Jame

8

gradientは、とを中心に、を中心に使用しています。 'central'、またはデフォルトの'sobel'があります。最初のオプションimgradientを使用すると、gradientと同じように見えます:imgradientについては

I=zeros([128 128]); 
I(50:100,50:100)=100; 
%% Add noise image; 
noiseStd=5; 
I_noise = I + (noiseStd * randn([128, 128])); 
[Gx, Gy] = gradient(I_noise); 
g1 = sqrt(Gx.^2+Gy.^2); 
[g2,~] = imgradient(I_noise, 'sobel'); 
[g3,~] = imgradient(I_noise, 'central'); 
subplot(131);imshow(g1,[]);title('gradient') 
subplot(132);imshow(g2,[]);title('imgradient sobel') 
subplot(133);imshow(g3,[]);title('imgradient central') 

enter image description here


を利用できる5つのオプションがあります:

  • 'ソーベル' ソーベル勾配演算子(デフォルト)
  • は、
  • 'prewitt' Prewitt勾配演算子
  • '中間'中間差勾配:中間/中間中間勾配:dI/dx = I(x + 1)/ 2
  • - I(X)
  • 「ロバーツ」ロバーツ勾配演算子

ドキュメントはexplaines中:

列挙さ 勾配方法のそれぞれについてimgradientで取らアルゴリズムアプローチは、第一の計算指向であります勾配、GxおよびGy, である。 x軸は の列が右に行くに従って定義され、y軸は下に行く行に沿って定義されます。 次に、勾配の大きさおよび方向は、 の直交成分GxおよびGyから計算されます。

+0

あなたの中心的な違いの例をありがとう。 sobelオペレータのbefinetは何ですか?ピグレットはより滑らかなイメージを提供すると述べた。 – Jame

+0

@ user8430答えは、StackOverflowの範囲の背後にあるだろう、と私は実際にそれを知らない。あなたは単一のアルゴリズムに関するいくつかの研究を行う必要があります。 – thewaywewalk

関連する問題