Блочное вращение изображения в matlab
Я работаю над оценкой частоты гребня, для которой мне нужно получить блочно ориентированное изображение. Я разработал код, но не могу удалить ошибку.
процесс идет так. Входное изображение G(m,n)
а также theta(m,n)
это изображение, содержащее тета. Входное изображение G
это разделить на w*w
блок (w = 17
) и для каждого блока с центром в pixel(i,j)
вычислить ориентированное окно размера l*w (33*17)
, Для каждого блока мы должны вычислить x
подпись как
x[0],x[1],x[2].....x[l-1]...
x[k] = 1/w * summation(d=0 to w-1)G(u,v)
u = i+ (d-(w/2))cos(theta(i,j))+(k-(l/2))sin(theta(i,j))
v = i+ (d-(w/2))sin(theta(i,j))+((l/2)-k)cos(theta(i,j))
вот мой код
% To compute ridge frequency
theta_image; theta image as input
im = imread('cameraman.tif');
[m,n] = size(im);
l = (2*w-1);
w = 17;
ww = floor(w/2);
for i1 = 9:w:m
for j1 = 9:w:n
G = im(i1-ww:i1+ww,j1-ww:j1+ww);
O = theta(i1-ww:i1+ww,j1-ww:j1+ww);
G = padarray(G,[10 10],'both'); not sure its correct?
for k = 0:l-1
for d = 0:w-1
cnst_1 = (d-floor(w/2));
cnst_2 = (k-floor(l/2));
cnst_3 = (floor((l/2)-k);
u = i1+(cnst_1.*cos(O(i1,j1)) + cnst_2.*sin(O(i1,j1)));
v = j1+(cnst_1.*sin(O(i1,j1)) + cnst_3.*cos(O(i1,j1)));
u = fix(u);
v = fix(v);
store(k,d) = G(u,v);
x(k) = (sum(G(u,v)))/w; not sure will it be stored block-wise?
end;
end;
end;
end;
ошибка
Attempted to access G(22,0); index must be a positive integer or logical.
Error in ridge_frequency (line 76)
store(k,d) = G(u,v);