2013-08-27 25 views
7

Jestem nowy w MatLab. Bawiłem się i czytałem przewodnik, ale nie mogę rozwiązać tej sytuacji.Odblokowywanie obrazu na Matlab

enter image description here

I usuwa szum przy użyciu algorytmu Gaussa. To się udało, ale nie udało mi się uzyskać tego obrazu, próbowałem użyć algorytmu Richardson-Lucy deblurring, ale to nie działa. Każdy pomysł, jak mogę to rozwiązać? Thx z góry.

Oto co zrobiłem do tej pory.

obraz size = 21KB wymiar image = 264 x 126

img = imread('car_plate.jpg') 
subplot(331); 
imshow(img), title('Original Image') 

PSF = fspecial('gaussian',15,15); 
blur = imfilter(img,PSF,'replicate'); 
subplot(332);imshow(blur);title('Filter image'); 

motion_noise = fspecial('disk', 7); 

luc1 = deconvlucy(img,motion_noise); 
subplot(333); imshow(luc1); 
title('Disk and Lucy'); 

LEN = 9; THETA = 1; 
motion_noise2 = fspecial('motion', LEN, THETA); 


luc2 = deconvlucy(blur,motion_noise2); 
subplot(334); imshow(luc2); 
title('Motion and Lucy'); 

Kiedy próbowałem za pomocą filtru mediany, mam to wyjście

Błąd przy użyciu medfilt2
oczekiwana liczba wejściowego 1, , aby być dwuwymiarowym.

Błąd medfilt2> parse_inputs (linia 106)
validateattributes (a, { 'numeryczny', 'logiczny'}, { '2d' 'prawdziwy'} mfilename, 'A', 1);

Błąd w medfilt2 (linia 48)
[a, mn, padopt] = parse_inputs (varargin {:});

Błąd w a1q21 (linia 2)
J = medfilt2 (img);

i moje obecne wyniki są następujące.

enter image description here

+0

Szum w obrazie wejściowym wygląda bardziej jak szum solno-pieprzowy. Spróbuj użyć [filtra median] (http://www.mathworks.com/help/images/ref/medfilt2.html), aby go usunąć. – Shai

+0

@shai Thnx. Spróbowałem użyć filtra medianowego. Problem polega na tym, że obraz nie jest w 2D, a mój wykładowca powiedział mi, że nie muszę w ogóle konwertować obrazu. Jedyne, co mi powiedziała to to, że powinienem użyć algorytmu Richardsona-Lucy deblurring. – Harvin

+0

co masz na myśli, że Twój "obraz nie jest 2D"? możesz odfiltrować medianę każdego kanału i ponownie je połączyć. Spróbuj porównać wyniki. – Shai

Odpowiedz

4

Używasz niewłaściwych punkt rozprzestrzeniania funkcje dla algorytmu debluring (bunkier jest to zły wybór). Aby uzyskać najlepsze wyniki, należy filtrować za pomocą filtru medianowego, aby usunąć szum S, a następnie rozjaśnić go za pomocą kernala gaussowskiego. Pominęłbym ten deblur ruchu, ponieważ obraz nie wydaje się silnie ukierunkowany. Aby uzyskać najlepsze wyniki, musisz grać z sigma filtra wyostrzania.

img = imread('car_plate.jpg') 
subplot(331); 
imshow(img), title('Original Image') 

blur = medfilt2(img,[3 3]); 
subplot(332);imshow(blur);title('Filter image'); 

deblurSigma = 10; %Adjust this to get the most visually pleasing results 
motion_noise = fspecial('gaussian', 15,deblurSigma); 
luc1 = deconvlucy(img,motion_noise); 
subplot(333); imshow(luc1); 
title('Disk and Lucy'); 
Powiązane problemy