Io sono l'attuazione di un rilevatore di angolo di Harris per scopi didattici, ma mi sono bloccato in parte risposta harris. Fondamentalmente, quello che sto facendo, è:L'implementazione di un rilevatore di angolo Harris
- Calcola gradienti di intensità dell'immagine in xey direzione uscita
- sfocatura di (1) risposta
- Calcola Harris oltre uscita (2)
- Sopprimere i valori non massimi in uscita di (3) in un 3x3-soglia e uscita di soglia
1 e 2 sembrano funzionare correttamente; tuttavia, ottengo valori molto piccoli come la risposta Harris, e nessun punto raggiungere la soglia. Ingresso è una fotografia outdoor standard.
[...]
[Ix, Iy] = intensityGradients(img);
g = fspecial('gaussian');
Ix = imfilter(Ix, g);
Iy = imfilter(Iy, g);
H = harrisResponse(Ix, Iy);
[...]
function K = harrisResponse(Ix, Iy)
max = 0;
[sy, sx] = size(Ix);
K = zeros(sy, sx);
for i = 1:sx,
for j = 1:sy,
H = [Ix(j,i) * Ix(j,i), Ix(j,i) * Iy(j,i)
Ix(j,i) * Iy(j,i), Iy(j,i) * Iy(j,i)];
K(j,i) = det(H)/trace(H);
if K(j,i) > max,
max = K(j,i);
end
end
end
max
end
Per l'immagine del campione, max finisce per essere 6.4163e-018 che sembra troppo bassa.
Non sono più stato in grado di filtrare Ix2 etc, quindi nella copia su StackOverflow ci sono stati alcuni errori. – Etan
Il problema era che non ho riassunto tutti i pixel nel quadrato 3x3 per scoprire l'Ix2 ecc; invece, ho appena usato il pixel corrispondente. Dopo aver cambiato H in un modo che riassume tutti i Ix2, Ixy e Iy2 per tutti i 9 pixel, sembra molto bello. – Etan
det (H)/trace (H) è un'approssimazione spesso usata nel caso in cui non si abbia una lambda. – Etan