2013-06-28 18 views

Odpowiedz

10

Jeśli używasz imfilter(I,fil,'same','conv'), to są one takie same.

Różnica polega na tym, że imfilter używa korelacji domyślnie do filtrowania obrazów, co ma pewne niewielkie różnice - zasadniczo splot rozpoczyna się od jednej strony obrazu, podczas gdy korelacja rozpoczyna się od drugiej, więc w filtrze występują niewielkie różnice wydajność. Jeśli najpierw odwrócisz obraz, otrzymasz takie samo wyjście:

out4=fliplr(flipud(imfilter(fliplr(flipud(I)),fil,'same'))); 

To jest dokładnie równe out2.

+0

Dzięki @Hugh Nolan. Myślę, że powinieneś zamienić "zapisz" na "to samo". i jedno pytanie powstało. Widzisz w [to pytanie] (http://stackoverflow.com/questions/10672184/implementing-imfilter-in-matlab) [petrichor] (http://stackoverflow.com/users/198428/petrichor) nie użył 'conv', ale jego odpowiedź została zaakceptowana przez osobę pytającą !!! – sepideh

+0

Jeśli jesteś zaznajomiony z przetwarzaniem obrazu, będziesz wiedział, że przestrzenne filtry liniowe są w rzeczywistości maskami splotowymi. Jednak domyślną funkcją matlab dla funkcji, która stosuje liniowe filtry przestrzenne, jest korelacja. Studiowałem to teraz w dokumentacji !!!!!!!!!!!!! – sepideh

+1

Dzięki, poprawiono literówkę. W opublikowanym linku użyty filtr jest symetryczny, więc dane wyjściowe będą takie same. Możesz także przerzucić filtr zamiast obrazu, jak wspomniano w tej odpowiedzi. –

3

Twoja odpowiedź leży w wyjaśnieniu czwartego argumentu wejściowego do imfilter.

  • korelacji i splatanie
'corr'  imfilter performs multidimensional filtering using 
       correlation, which is the same way that FILTER2 
       performs filtering. When no correlation or 
       convolution option is specified, imfilter uses 
       correlation. 

    'conv'  imfilter performs multidimensional filtering using 
       convolution. 

Spróbuj out3=imfilter(I,fil,'same','conv'); a dostaniesz identyczne wyniki do conv2.

Powiązane problemy