2013-04-04 10 views
5

Pytanie

Mam sekwencję obrazów reprezentujących informacje o głębi, które chciałbym wyczyścić. Istnieje kilka wartości odstających (wartości o intensywności poniżej 25, dla zakresu 0-255), które chciałbym wypełnić z dopuszczalną alternatywą (średnia wartość zlokalizowana w tym konkretnym obszarze może być dobrym domysłem).Usuwanie wartości odstających z obrazu w skali szarości

Czy ktoś może zobaczyć prosty sposób na zrobienie tego? Próbowałem użyć filtru medianowego (wielkość filtra 10), zastępując niepożądane wartości NaN, ale pogorszyło to sytuację, która poprawia zamiast tego, zastępując je ogólną średnią wartością.

Basic trial

PS: Ktoś już zaproponował mi użyć szybki falkowej rekonstrukcję, ale ja naprawdę nie wiem od czego zacząć ...

Wdrożone rozwiązanie (do tej pory)

Rozwiązanie I wdrożone (przed przeczytaniem o inpaint_nans zasugerował przez tmpearce) jest:

  1. duplikowanie oryginalnego obrazu;
  2. wypełnianie nieprawidłowych pikseli ogólną wartością średnią;
  3. użyj okrągłej tarczy promienia 10, aby ją zamazać;
  4. zastąpienie nieprawidłowych wartości w oryginalnym obrazie, co dostałem od punktu 3.
  5. prowadzony mediana filtr o rozmiarze 10.
img2 = img;          
img2(img < .005) = mean(img(:));     
H = fspecial('disk',10);       
img3 = imfilter(img2,H,'symmetric');    
img4 = img;          
img4(img < .3) = img3(img < .3);     
filterSize = 10;         
padopt = {'zeros','indexed','symmetric'};   
IMG = medfilt2(img4, [1 1]*filterSize, padopt{p}); 

Second trial

Odpowiedz

7

Polecam inpaint_nans wkład MATLAB File Exchange - zacznij jak już zrobiłeś, zastępując wartości odstające za pomocą NaN i użyj linku, aby przejść z tego miejsca.

Z opisu funkcji:

interpolować NaN elementów w tablicy 2-d z wykorzystaniem elementów spoza NaN. Czy również ekstrapolować, ponieważ nie używa triangulacji danych. Inpaint_nans oferuje kilka różnych podejść do interpolacji, , które zapewniają kompromis w zakresie dokładności w porównaniu do wymaganej szybkości i pamięci. Wszystkie metody znajdujące się obecnie w inpaint_nans są oparte na rzadkiej liniowej algebrze i dyskretyzacji PDE. W istocie, PDE jest rozwiązane tak, aby było zgodne z dostarczoną informacją.

Brawo za kod wielokrotnego użytku!

+5

moje myśli dokładnie, zaledwie 20 sekund za późno. +1 – bla

4

Użyj funkcji o nazwie roifill. Musisz trochę z tym pogodzić. Musiałem użyć imdilate, ponieważ interpoluje on z granicy.

Kod:

testimage = imread('BAPz5.png'); 
testimage = double(rgb2gray(testimage)); 
testimage_filt = roifill(testimage,imdilate(testimage<100,true(4))); 
figure(1); 
subplot(1,2,1); 
imshow(testimage,[]); 
subplot(1,2,2); 
imshow(testimage_filt,[]); 

wyjściowa:

enter image description here

1

Post zostanie odebrane, ale tylko dla przypomnienia, w [1], autor opiera się na podstawowej zasadzie naturalnych kształtach, tzn. obiekty zachowują gładkość drugiego rzędu, sugeruje on metodę malowania, która minimalizuje skrzywienie w sensie najmniejszych kwadratów. Oferuje także code. Powodzenia.

[1] Α Categoty-Level 3-D Database obiektu: Umieszczenie Utworu kineckto (ICCV)

enter image description here

+0

Należy pamiętać, że [odradzane są tylko odpowiedzi z linkami] (http://meta.stackoverflow.com/tags/link-only-answers/info), odpowiedzi SO powinny być punktem końcowym wyszukiwania rozwiązania (vs. kolejny przystanek odniesień, które z czasem stają się nieaktualne). Proszę rozważyć dodanie samodzielnego streszczenia tutaj, zachowując odnośnik jako odniesienie. – kleopatra

+0

To jest niesamowite! Dzięki ** Darkmoor ** za twoją notatkę! Zawsze miło jest uzyskać opinię kogoś innego, popartą gazetą! – Atcold

Powiązane problemy