| Author |
Message
|
27101985 Poziom 7

Joined: 25 Nov 2005 Posts: 23 Location: Rydułtowy
|
|
| Back to top |
|
 |
marianes Poziom 9

Joined: 07 Mar 2007 Posts: 32 Location: Warszawa
|
#2
15 Mar 2010 22:49 Re: [MATLAB] PSNR obrazków - jak wczytac kod |
|
|
|
Jeżeli masz wczytane obrazki, np. I1 i I2 to musisz je przeskalować, żeby wartości reprezentujących je macierzy zawierały się w przedziale [0 1]. Najprościej zrobić to tak:
| Code: |
I1=double(I1)/255;
I2=double(I2)/255; |
Następnie wywołujesz funkcję:
i dostajesz gotowy wynik w dB.
Standardowo funkcja operuje na jednej warstwie więc jeśli wczytujesz kolorowy obraz to w pamięci jest on reprezentowany przez 3-wymiarowa macierz i próba takiego porównania da błąd.
|
|
| Back to top |
|
 |
Google

|
#
15 Mar 2010 22:49 |
|
|
|
|
|
| Back to top |
|
 |
27101985 Poziom 7

Joined: 25 Nov 2005 Posts: 23 Location: Rydułtowy
|
#3
16 Mar 2010 09:22 Re: [MATLAB] PSNR obrazków - jak wczytac kod |
|
|
|
Ale jak się wczytuje ten kod. Każdy plik po kolei czy to można jakoś razem? Wcale nie miałem styczności z tym programem
|
|
| Back to top |
|
 |
marianes Poziom 9

Joined: 07 Mar 2007 Posts: 32 Location: Warszawa
|
#4
16 Mar 2010 23:32 Re: [MATLAB] PSNR obrazków - jak wczytac kod |
|
|
|
Wczytujesz obraz np. tak:
| Code: |
| I1=imread('obraz1.tif'); |
oczywiście plik musi się znajdować w bieżącym folderze, inaczej musisz podać pełną ścieżkę. Podobnie aby wywołać funkcję PSNR musisz przejść do katalogu w którym znajduje się plik PSNR.m lub skopiować ten plik do dowolnej ze ścieżek wyświetlonych poleceniem path.
|
|
| Back to top |
|
 |
Google

|
#
16 Mar 2010 23:32 |
|
|
|
|
|
| Back to top |
|
 |
27101985 Poziom 7

Joined: 25 Nov 2005 Posts: 23 Location: Rydułtowy
|
#5
17 Mar 2010 23:38 Re: [MATLAB] PSNR obrazków - jak wczytac kod |
|
|
|
Wpisałem tak i pojawił się błąd
| Quote: |
>> z1=imread('c:\z1.bmp');
>> z2=imread('c:\z1.jpg');
>> z1=double(z1)/255;
>> z2=double(z2)/255;
>> PSNR(z1,z2)
??? Operands to the || and && operators must be convertible to logical scalar values.
Error in ==> PSNR at 73
if max2_A > 1 || max2_B > 1 || min2_A < 0 || min2_B < 0
|
|
|
| Back to top |
|
 |
marianes Poziom 9

Joined: 07 Mar 2007 Posts: 32 Location: Warszawa
|
#6
19 Mar 2010 22:42 Re: [MATLAB] PSNR obrazków - jak wczytac kod |
|
|
|
Tak jak pisałem wcześniej - pewnie pliki są reprezentowane przez macierze 3D bo są kolorowe. Powinno działać jeśli miałbyś obrazy jako odcienie szarości. W takim przypadku możesz porównać np. warstwy dla składowej czerwonej:
| Code: |
| PSNR(z1(:,:,1),z2(:,:,1)) |
|
|
| Back to top |
|
 |
27101985 Poziom 7

Joined: 25 Nov 2005 Posts: 23 Location: Rydułtowy
|
#7
20 Mar 2010 14:43 Re: [MATLAB] PSNR obrazków - jak wczytac kod |
|
|
|
OK udało sie. A możesz mi powiedzie co oznacza to w nawiasach
Wczytałem 2 razy ten sam obrazek. Co oznacza ten błąd?
| Code: |
z1=imread('c:\z1.bmp');
z2=imread('c:\z1.bmp');
z1=double(z1)/255;
z2=double(z2)/255;
PSNR(z1(:,:,1),z2(:,:,1))
??? Error using ==> PSNR at 65
Images are identical: PSNR has infinite value
|
|
|
| Back to top |
|
 |
Google

|
#
20 Mar 2010 14:43 |
|
|
|
|
|
| Back to top |
|
 |
marianes Poziom 9

Joined: 07 Mar 2007 Posts: 32 Location: Warszawa
|
#8
20 Mar 2010 20:26 Re: [MATLAB] PSNR obrazków - jak wczytac kod |
|
|
|
1) dane z obrazów reprezentowane są przez matrycę trójwymiarową, pierwsze dwa wymiary to współrzędne x, y piksela, trzeci wymiar to numer składowej systemu kolorów np. standardowo RGB - 3 składowe, czyli dla danych x i y (jeden piksel) mamy:
obraz(x,y,1) - wartość składowej czerwonej (R)
obraz(x,y,2) - wartość składowej zielonej (G)
obraz(x,y,3) - wartość składowej niebieskiej (B)
które to składowe dają nam w efekcie dany kolor, użycie:
obraz(:,:,1) oznacza całą płaszczyznę (wszystkie x i y) w tym wypadku dla składowej R.
2) obrazy są identyczne: PSNR ma nieskończoną wartość
|
|
| Back to top |
|
 |
27101985 Poziom 7

Joined: 25 Nov 2005 Posts: 23 Location: Rydułtowy
|
#9
21 Mar 2010 10:17 Re: [MATLAB] PSNR obrazków - jak wczytac kod |
|
|
|
Kolego a różnica całościowa to będzie ?
| Code: |
| PSNR(z1(:,:,:),z2(:,:,:)) |
Dodano po 8 [minuty]:
A ta linijka zamienia wartości RGB od 0 do 1 czy coś innego robi?
|
|
| Back to top |
|
 |
marianes Poziom 9

Joined: 07 Mar 2007 Posts: 32 Location: Warszawa
|
#10
21 Mar 2010 13:22 Re: [MATLAB] PSNR obrazków - jak wczytac kod |
|
|
|
1) kod który napisałeś jest równoważny
więc otrzymasz błąd taki jak na początku
2) tak, to ma dokładnie takie zadanie gdyż funkcja PSNR wymaga wartości z przedziału [0,1]
|
|
| Back to top |
|
 |