kÉpfeldolgozÁs - u-szeged.hupkardos/oktatas/kepfeld/dip_03.pdf · pontoperációk a kimeneti (i,...
TRANSCRIPT
KÉPFELDOLGOZÁS
3. gyakorlat:
Pontoperációk
Pontoperációk
A kimeneti (i, j) pixel értéke csak a
bemeneti (i, j) pixel(ek) értékétől függ.
IN[i, j] OUT[i, j]
i
j
i
j
Aritmetikai műveletek
• Súlyozott összeg
• Kivonás
• Maszkolás
Súlyozott összeg
Képek kombinálására („összemosás”)
+ 0.5 ×0.5 ×
Súlyozott összeg (példa)
+
dim2(2)dim2(2) - dim1(2)+1
img1 = imread('darwin_gray.jpg');
img2 = imread('zebras_gray.jpg');
dim1 = size(img1);
dim2 = size(img2);
resimg = img2;
resimg(1:dim1(1), ...
dim2(2)-dim1(2)+1:dim2(2))= ...
0.5*img1 + ...
0.5*img2(1:dim1(1), ...
dim2(2)-dim1(2)+1:dim2(2));
imshow(resimg);
dim1(1)
dim2(1)
Kivonás
Képek közötti eltérések vizsgálatához
-
Kivonás (példa)
-
img1 = imread('cam1.jpg');
img2 = imread('cam2.jpg');
diffimg = abs(double(img2)- double(img1));
imshow(uint8(diffimg));
uint8-ban a negatív értékek elvesznének
Maszkolás
Bizonyos részek kinullázása egy bináris maszkkal
-.*.*
Maszkolás (példa)
-
img1 = imread('new_york1.jpg');
img2 = imread('new_york2.jpg');
resimg = img1 .* (img2 / 255) ;
imshow(resimg);A második „kép” 0 és 255 értékeket
tartalmaz, de nekünk 0 és 1 értékek kellenek!
.*
.*
Álszínezés
Egy szürkeárnyalatos kép minden egyes
szürkeárnyalatához egy-egy színt
rendelünk hozzá.
Álszínezés (példa)img = imread('island.jpg’);
dims = size(img);
mycolormap = uint8(zeros(256, 3));
for i=1:128;
mycolormap(i,:) = [254-2*i, 2*i, 0];
mycolormap(128+i,:) = [0, 254-2*i, 2*i];
end
for r = 1:dims(1);
for c=1:dims(2);
for i=1:3;
resimg(r,c,i) = ...
mycolormap(img(r,c)+1, i);
end;
end;
end;
imshow(resimg);
kód szín
0 [254,0,0]
1 [252,2,0]
2 [250,4,0]
… …
126 [2,252,0]
127 [0,254,0]
128 [0,252,2]
… …
254 [0,2,252]
255 [0,0,254]
Intenzitás transzformációk
• Invertálás
• Logaritmikus transzformáció
• Gamma korrekció
Invertálás
iout = max – iin(max: intenzitástartomány maximuma)
Logaritmikus transzformáció
iout = c ∙log(1 + iin)
(c > 0)
c = 2
Gamma korrekció
iout = c ∙ iinγ
(c, γ > 0)
c = 2
γ = 2
Intenzitás transzformációk (példa)img = imread('cameraman.tif');
I = 255-img;
figure('Name', 'Invertálás')
imshow(I);
img = im2double(img);
L1 = log(1+img);
L2 = 2*log(1+img);
L3 = 5*log(1+img);
figure('Name', 'Logaritmus ...
transzformáció')
imshow([img,L1;L2,L3])
G1 = 2 *img .^ 0.5;
G2 = 2 *img .^ 2;
G3 = 2 * img .^ 3;
figure('Name','Gamma korrekció')
imshow([img,G1;G2,G3])
double-ra konvertál és
átskálázza az intenzitásokat
a [0,1] tartományra
Összehasonlítás
1 ha iin < T
0 különben
Küszöbölés küszöbérték felett / alatt
1 ha iin ≥ T
0 különbeniout =
iout =
T = 120
Küszöbölés intervallumon belül / kívül
1, ha Tlow ≤ iin ≤ Thigh
0 különbeniout =
iout =
Tlow = 155
Thigh = 200
1, ha iin < Tlow vagy iin > Thigh
0 különben
Vágás
Maszkolás a küszöbölt képpel.
.*
Küszöbölés és vágás (példa)img = imread('cameraman.tif');
T1A = img >= 120;
T1B = img < 120;
T2A = 155 <= img & img < 200;
T2B = 155 > img | img > 200;
C1 = img .* uint8(T1A);
C2 = img .* uint8(T2A);
subplot(2,3,1);
imshow(T1A);
title('Küszöbölés ...
küszöb felett')
subplot(2,3,2);
imshow(T1B);
title('Küszöbölés ...
küszöb alatt')
...
Vágás (példa)
Imin = min(img(:));
Imax = max(img(:));
d = Imax - Imin;
thresh = Imin + 0.2*d < img & ...
img < Imax - 0.2*d;
clip = img .* uint8(thresh);
Teljes intenzitástartomány alsó és felső 20 %-ának vágása (nullázása):
IminImax
d
0.2 ∙ d 0.2 ∙ d