how to calculate gradient between the currently processed point (x,y) and its neighboring point in one of eight compass direction.

2 ビュー (過去 30 日間)
Dear All,
i'm working for make iterative threshold technique. This technique is first modified with calculating gradient between currently proccessed point (x,y) and its neighboring point in one of eight compass direction that can determined by this equation :
Gd(x,y) = |I(x,y)-I(xd,yd)|
where :
(xd,yd) neighbors to (x,y) in direction d, and I(x,y) and I(xd,yd) denote the gray-level values at locations (x,y) and I(xd,yd). Here d is a value denoting one of eight compass direction.
The value of eight compass direction is
north = [2,10,-6];
north_east = [1,9,-7];
east = [0,8,-8];
south_east = [7,15,-1];
south = [6,14,-2];
south_west = [5,13,-3];
west = [4,12,-4];
nort_west = [3,11,-5];
My problem is how to determined d to take a value of eight compass direction, so i can determined the neighbors point?? i'm really new in gradient based eight direction. Can anyone help me, please?? ^_^
  2 件のコメント
Walter Roberson
Walter Roberson 2012 年 1 月 21 日
The first number in each of your triples starts at 0 for east and increases by 1 for each multiple of 45 degrees counter-clockwise from east. But I have no idea what the second and third value in each of your triples are intended to represent or how they are to be used.
Elsya Nurul Aini
Elsya Nurul Aini 2012 年 1 月 22 日
thanks for the comment Walter.
actually, i have no idea too about it, and that's why did i ask. =D
So, is there any reference code about eight compass direction that can solve my problem??
thanks before ^_^

サインインしてコメントする。

採用された回答

Walter Roberson
Walter Roberson 2012 年 1 月 22 日
[nrow, ncol] = size(I);
for x = 1 : ncol
for y = 1 : nrow
if y < nrow; G0(x,y) = abs(I(x,y) - I(x,y+1)); end %E
if x ~= 1 && y < nrow; G1(x,y) = abs(I(x,y) - I(x-1,y+1)); end %NE
if x ~= 1; G2(x,y) = abs(I(x,y) - I(x-1,y)); end %N
[...]
if x < ncol & y < nrow; G8(x,y) = abs(I(x,y) - I(x+1,y+1)); end %SE
end
end
So now what?
  2 件のコメント
Elsya Nurul Aini
Elsya Nurul Aini 2012 年 1 月 22 日
thank you very much for the reference code ^_^
can you tell me please, why you give a decision on that looping, just like "if y < nrow", " if ~= 1", and so on.
thanks alot before =)
Walter Roberson
Walter Roberson 2012 年 1 月 22 日
If you do not use those tests then you will get matrix references that are out of range, such as trying to access I(y,0)

サインインしてコメントする。

その他の回答 (2 件)

Jan
Jan 2012 年 1 月 22 日
The question is not really clear to me, but I like to guess:
I = rand(100, 100, 3);
m = size(I, 1);
n = size(I, 2);
pre = NaN(size(I));
G_n = pre;
G_s = pre;
G_w = pre;
G_e = pre;
G_nw = pre;
G_sw = pre;
G_ne = pre;
G_se = pre;
G_n(1:m-1, :, :) = diff(I, 1, 1);
G_s(2:m, :, :) = G_n(1:m-1, :, :);
G_e(:, 1:n-1, :) = diff(I, 1, 2);
G_w(:, 2:n, :) = G_e(:, 1:n-1, :);
G_ne(2:m, 1:n-1, :) = I(1:m-1, 2:n, :) - I(2:m, 1:n-1, :);
G_nw(2:m, 2:n, :) = I(1:m-1, 1:n-1, :) - I(2:m, 2:n, :);
G_se(2:m, 1:n-1, :) = I(1:m-1, 2:n, :) - I(2:m, 1:n-1, :);
G_sw(2:m, 2:n, :) = I(1:m-1, 1:n-1, :) - I(2:m, 2:n, :);

Elsya Nurul Aini
Elsya Nurul Aini 2012 年 1 月 22 日
Thanks All,,
the reference code is very helpfull =)
but i have another problem.
I want to take the mean of Gd(x,y), so i use this coding
n = mean(G_n + G_s + G_e + G_w + G_ne + G_nw + G_se + G_sw);
but there is an error :
??? Error using ==> plus
Matrix dimensions must agree.
Error in ==> tetangga at 13
n = mean(G_n + G_s + G_e + G_w + G_ne + G_nw + G_se + G_sw);
how i can solve this error??
  11 件のコメント
Jan
Jan 2012 年 1 月 24 日
What is the current problem exactly?
If you use "G_e = zeros(size(I))" or "G_e = NaN(size(I))" does not matter the ability to be computed. The problem was, that Ge had the size [512 511], and this meand, that you have called "G_e(:, 1:n-1, :) = diff(I, 1, 2);" without the pre-allocation.
The gradient is a vector for 2D data. Building the mean of the components is not meaningful. If the value is +1 in n-s direction and -1 in w-e direction, the mean 0 is free of use.
Walter Roberson
Walter Roberson 2012 年 1 月 24 日
Jan, I think you missed the absolute value bars in the original problem statement.

サインインしてコメントする。

カテゴリ

Help Center および File ExchangeLabeling, Segmentation, and Detection についてさらに検索

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by