2015-12-22 21 views
10

Sto tentando di estrarre la firma del radon per riconoscere i modelli di abbigliamento (a righe, a quadri, irregolari e senza motivo) come fatto in 1.Elaborazione immagini - Utilizzo della trasformazione radon per il riconoscimento di modelli in MATLAB

Algoritmo da attuare:

1. Use sobel operator to compute the gradient map as f(x,y). 
2. Perform Radon transform based on maximum disk area. 
3. Compute the variance of r under all theta directions. 
4. Employ L2-norm to normalize the feature vector. 
5. Plot Radon Signature as a bar chart of var(r) for all theta values. 

Ho fatto quanto segue:

img = imread('plaid.jpg'); 
grey = rgb2gray(img); 
img2 = edge(grey, 'sobel'); 
vararray=zeros(1,size(theta,2)); 
theta = -89:90; 
for j = 1: size(theta,2) 
    [R3,xp3] = radon (img2,theta(j)); 
    vararray(j) = var(R3); 
end 
vararray = vararray/norm(vararray); 
figure(1), bar(theta,vararray),title('Radon Signature'); 

Credo che il mio errore sta nei primi 2 passi. Non sono sicuro di come eseguire il Radon solo sulla massima area del disco.

I miei risultati sono mostrati sulla destra, mentre dall'articolo (di seguito indicato) è mostrato sulla sinistra.

Results Image (Left : Article's Results, Right: My Matlab results Input Image

Tuttavia, i miei risultati dovrebbe almeno Mostra 2 picchi distinti come mostrati nei risultati del acticle, ma non lo fanno.

Qualsiasi assistenza è apprezzata.

Fonte di Algoritmo: "Assistive Abbigliamento Pattern Recognition per non vedenti o ipovedenti persone" di Xiaodong Yang, studente membro, IEEE, Shuai Yuan, e Yingli Tian, ​​Senior Member, IEEE

+0

Questa figura dall'articolo sembra più un doodle e meno una vera cifra scientifica. Sei sicuro che sia preso sul serio? Sei sicuro che la gamma theta sia la stessa? –

+0

La cosa principale da prendere dal grafico dell'articolo è i 2 picchi dominanti. Questo dovrebbe essere presente anche nei miei risultati ma non lo è. Credo che il mio errore risieda nel primo passo dell'algoritmo 1 ma non sono sicuro di come farlo in matlab – User404

+0

Non posso aiutarti con il processo di elaborazione delle immagini, ma dovresti pre-allocare vararray con 'vararray = zeros (1 , size (theta, 2)); 'prima del ciclo e usa' vararray (j) 'all'interno del ciclo, per la velocità. –

risposta

2

Area massima del disco è, come @beaker pensato, definito dal cerchio massimo riempito che si inserisce all'interno del riquadro di delimitazione dell'immagine. Che puoi osservare dalla Fig. 3 b) dell'articolo.

Un'altra cosa che hai fatto di sbagliato, è con rilevatore bordo edge(grey, 'sobel') mentre si dovrebbe usare mappa sfumatura o più entità formalmente gradiente. Ecco un codice che produce una curva vicino a quanto mostrato in Fig 3d. Come quantificarlo a sei picchi, rimane una domanda.

A = imread('Layer-5.png'); % image from the article 
A = double(rgb2gray(A)); 

% gradient magnitude 
dx = imfilter(A,fspecial('sobel')); % x, 3x3 kernel 
dy = imfilter(A,fspecial('sobel')'); % y 
gradmag = sqrt(dx.^2 + dy.^2); 

% mask by disk 
R = min(size(A)/2); % radius 
disk = insertShape(zeros(size(A)),'FilledCircle', [size(A)/2,R]); 
mask = double(rgb2gray(disk)~=0); 
gradmag = mask.*gradmag; 

% radon transform 
theta = linspace(0,180,180); 
vars = zeros(size(theta)); 
for u = 1:length(theta) 
    [rad,xp] =radon(gradmag, theta(u)); 
    indices = find(abs(xp)<R); 
    % ignore radii outside the maximum disk area 
    % so you don't sum up zeroes into variance 
    vars(u) = var(rad(indices)); 
end 
vars = vars/norm(vars); 
figure; plot(vars); 

Tenere a mente, le immagini copiate dall'articolo vengono visualizzate con artefatti jpg. Dopo una buona denoising (un po 'troppo qui), per esempio,

denoised image

si ottengono risultati molto più importanti.

+0

come hai eseguito il denoising per ottenere questo risultato? – User404