Download as pdf or txt
Download as pdf or txt
You are on page 1of 9

27.03.

2022, 21:57 GRAFIKA KOMPUTEROWA LAB_3

GRAFIKA KOMPUTEROWA LAB_3

Contents
1. CEL ĆWICZENIA

2. ZASOBY

3. Wstęp
4. EKSPERYMENT
4.1 Przygotowanie zajęć
4.2 Realizowane zadania

Zadanie 2 i 3
4.2.a Zadanie 1a

4.2.b Zadanie 1b
4.2.d Zadanie 2 i 3
4.3 Uwagi i wnioski

Lab 3: 2D transformacje geometryczne obrazów

< Dominik Glegoła, nr albumu: 200811 >

1. CEL ĆWICZENIA
Zapoznanie się z transformacjami geometrycznymi 2D obrazów w środowisku Matlab.

2. ZASOBY
* MATLAB i odpowiednie "toolboxy".

3. Wstęp
Wybrane fragmenty instrukcji laboratoryjnej.

4. EKSPERYMENT

4.1 Przygotowanie zajęć


Zapoznanie się z wykładem oraz podstawowymi cechami Matlaba.

4.2 Realizowane zadania

clear % usunięcie wszystkich zmiennych

close all % zamknięcie wszystkich wykresów

clc % zresetowanie okna komend

% Zadanie 1

m = 10;

n = 15;

dx = 0.067;

dy = 0.067;

X = zeros(m,n);

Y = zeros(m,n);

% przekształcenie teoretycznych współrzędnych obrazu

for i = 1:m

for j = 1:n

[X(i,j), Y(i,j)] = im2real(n,m,dx,dy,i,j);

file:///E:/Dominik/Dominik/Szkoła/SEMESTR VI/GrafikaKomputerowa/Lab03/tmp/html/Lab3_Glegola_200811.html 1/9


27.03.2022, 21:57 GRAFIKA KOMPUTEROWA LAB_3
end

end

%wyniki dla punktu a

I = zeros(m,n);

J = zeros(m,n);

% Transformacja odwrotna do punktu a

for i = 1:m

for j = 1:n

[I(i,j), J(i,j)] = real2im(n,m,dx,dy,X(i,j),Y(i,j));

end

end

%wyniki dla punktu b

Zadanie 2 i 3

imOrg1 = imread('AA.bmp'); %odczyt obrazu z pliku

A = [1,1; 1,360]'; % współrzędne punktów

B = [42,100; 133,353]';

solveSimi1(imOrg1,A,B,1);

imOrg2 = imread('BB.bmp');

A = [180,177; 252,360]';

B = [223,120; 381,266]';

solveSimi1(imOrg2,A,B,2);

A = [123, 94; 308, 140; 234, 210]' + 1;

B = [185, 126; 333, 293; 379, 261]' + 1;

solveAffi(imOrg1,A,B,3);

A = [1,360; 180,177;295,108]';

B = [131, 238; 255,182; 360,185]';

solveAffi(imOrg2,A,B,4);

4.2.a Zadanie 1a
Napisz funkcję do przekształcenia teoretycznych współrzędnych obrazu we współrzędne obrazu cyfrowego, o rozdzielczości
mxn

function [x,y] = im2real(m,n,dx,dy,i,j)

T = [dx,0,-0.5*m*dx;...

0, -dy, 0.5*n*dy;...

0,0,1];

vin = [i;j;1];

vout = T*vin;

x = vout(1)/vout(3);

y = vout(2)/vout(3);

end

X =

file:///E:/Dominik/Dominik/Szkoła/SEMESTR VI/GrafikaKomputerowa/Lab03/tmp/html/Lab3_Glegola_200811.html 2/9


27.03.2022, 21:57 GRAFIKA KOMPUTEROWA LAB_3
Columns 1 through 7

-0.4355 -0.4355 -0.4355 -0.4355 -0.4355 -0.4355 -0.4355

-0.3685 -0.3685 -0.3685 -0.3685 -0.3685 -0.3685 -0.3685

-0.3015 -0.3015 -0.3015 -0.3015 -0.3015 -0.3015 -0.3015

-0.2345 -0.2345 -0.2345 -0.2345 -0.2345 -0.2345 -0.2345

-0.1675 -0.1675 -0.1675 -0.1675 -0.1675 -0.1675 -0.1675

-0.1005 -0.1005 -0.1005 -0.1005 -0.1005 -0.1005 -0.1005

-0.0335 -0.0335 -0.0335 -0.0335 -0.0335 -0.0335 -0.0335

0.0335 0.0335 0.0335 0.0335 0.0335 0.0335 0.0335

0.1005 0.1005 0.1005 0.1005 0.1005 0.1005 0.1005

0.1675 0.1675 0.1675 0.1675 0.1675 0.1675 0.1675

Columns 8 through 14

-0.4355 -0.4355 -0.4355 -0.4355 -0.4355 -0.4355 -0.4355

-0.3685 -0.3685 -0.3685 -0.3685 -0.3685 -0.3685 -0.3685

-0.3015 -0.3015 -0.3015 -0.3015 -0.3015 -0.3015 -0.3015

-0.2345 -0.2345 -0.2345 -0.2345 -0.2345 -0.2345 -0.2345

-0.1675 -0.1675 -0.1675 -0.1675 -0.1675 -0.1675 -0.1675

-0.1005 -0.1005 -0.1005 -0.1005 -0.1005 -0.1005 -0.1005

-0.0335 -0.0335 -0.0335 -0.0335 -0.0335 -0.0335 -0.0335

0.0335 0.0335 0.0335 0.0335 0.0335 0.0335 0.0335

0.1005 0.1005 0.1005 0.1005 0.1005 0.1005 0.1005

0.1675 0.1675 0.1675 0.1675 0.1675 0.1675 0.1675

Column 15

-0.4355

-0.3685

-0.3015

-0.2345

-0.1675

-0.1005

-0.0335

0.0335

0.1005

0.1675

Y =

Columns 1 through 7

0.2680 0.2010 0.1340 0.0670 0 -0.0670 -0.1340

0.2680 0.2010 0.1340 0.0670 0 -0.0670 -0.1340

0.2680 0.2010 0.1340 0.0670 0 -0.0670 -0.1340

0.2680 0.2010 0.1340 0.0670 0 -0.0670 -0.1340

0.2680 0.2010 0.1340 0.0670 0 -0.0670 -0.1340

0.2680 0.2010 0.1340 0.0670 0 -0.0670 -0.1340

0.2680 0.2010 0.1340 0.0670 0 -0.0670 -0.1340

0.2680 0.2010 0.1340 0.0670 0 -0.0670 -0.1340

0.2680 0.2010 0.1340 0.0670 0 -0.0670 -0.1340

0.2680 0.2010 0.1340 0.0670 0 -0.0670 -0.1340

Columns 8 through 14

-0.2010 -0.2680 -0.3350 -0.4020 -0.4690 -0.5360 -0.6030

-0.2010 -0.2680 -0.3350 -0.4020 -0.4690 -0.5360 -0.6030

-0.2010 -0.2680 -0.3350 -0.4020 -0.4690 -0.5360 -0.6030

-0.2010 -0.2680 -0.3350 -0.4020 -0.4690 -0.5360 -0.6030

-0.2010 -0.2680 -0.3350 -0.4020 -0.4690 -0.5360 -0.6030

file:///E:/Dominik/Dominik/Szkoła/SEMESTR VI/GrafikaKomputerowa/Lab03/tmp/html/Lab3_Glegola_200811.html 3/9


27.03.2022, 21:57 GRAFIKA KOMPUTEROWA LAB_3
-0.2010 -0.2680 -0.3350 -0.4020 -0.4690 -0.5360 -0.6030

-0.2010 -0.2680 -0.3350 -0.4020 -0.4690 -0.5360 -0.6030

-0.2010 -0.2680 -0.3350 -0.4020 -0.4690 -0.5360 -0.6030

-0.2010 -0.2680 -0.3350 -0.4020 -0.4690 -0.5360 -0.6030

-0.2010 -0.2680 -0.3350 -0.4020 -0.4690 -0.5360 -0.6030

Column 15

-0.6700

-0.6700

-0.6700

-0.6700

-0.6700

-0.6700

-0.6700

-0.6700

-0.6700

-0.6700

4.2.b Zadanie 1b
Napisz funkcję dokonującej transformacji odwrotnej do punktu (a)

function [i,j] = real2im(m,n,dx,dy,x,y)

T = [1/dx,0,0.5*m;...

0, -1/dy, 0.5*n;...

0,0,1];

vin = [x;y;1];

vout = T*vin;

i = vout(1)/vout(3);

j = vout(2)/vout(3);

end

I =

Columns 1 through 7

1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000

2.0000 2.0000 2.0000 2.0000 2.0000 2.0000 2.0000

3.0000 3.0000 3.0000 3.0000 3.0000 3.0000 3.0000

4.0000 4.0000 4.0000 4.0000 4.0000 4.0000 4.0000

5.0000 5.0000 5.0000 5.0000 5.0000 5.0000 5.0000

6.0000 6.0000 6.0000 6.0000 6.0000 6.0000 6.0000

7.0000 7.0000 7.0000 7.0000 7.0000 7.0000 7.0000

8.0000 8.0000 8.0000 8.0000 8.0000 8.0000 8.0000

9.0000 9.0000 9.0000 9.0000 9.0000 9.0000 9.0000

10.0000 10.0000 10.0000 10.0000 10.0000 10.0000 10.0000

Columns 8 through 14

1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000

2.0000 2.0000 2.0000 2.0000 2.0000 2.0000 2.0000

3.0000 3.0000 3.0000 3.0000 3.0000 3.0000 3.0000

4.0000 4.0000 4.0000 4.0000 4.0000 4.0000 4.0000

5.0000 5.0000 5.0000 5.0000 5.0000 5.0000 5.0000

6.0000 6.0000 6.0000 6.0000 6.0000 6.0000 6.0000

7.0000 7.0000 7.0000 7.0000 7.0000 7.0000 7.0000

8.0000 8.0000 8.0000 8.0000 8.0000 8.0000 8.0000

file:///E:/Dominik/Dominik/Szkoła/SEMESTR VI/GrafikaKomputerowa/Lab03/tmp/html/Lab3_Glegola_200811.html 4/9


27.03.2022, 21:57 GRAFIKA KOMPUTEROWA LAB_3
9.0000 9.0000 9.0000 9.0000 9.0000 9.0000 9.0000

10.0000 10.0000 10.0000 10.0000 10.0000 10.0000 10.0000

Column 15

1.0000

2.0000

3.0000

4.0000

5.0000

6.0000

7.0000

8.0000

9.0000

10.0000

J =

Columns 1 through 7

1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000

1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000

1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000

1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000

1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000

1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000

1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000

1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000

1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000

1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000

Columns 8 through 14

8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000

8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000

8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000

8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000

8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000

8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000

8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000

8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000

8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000

8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000

Column 15

15.0000

15.0000

15.0000

15.0000

15.0000

15.0000

15.0000

15.0000

15.0000

15.0000

4.2.d Zadanie 2 i 3

file:///E:/Dominik/Dominik/Szkoła/SEMESTR VI/GrafikaKomputerowa/Lab03/tmp/html/Lab3_Glegola_200811.html 5/9


27.03.2022, 21:57 GRAFIKA KOMPUTEROWA LAB_3
Wyznaczenie parametrów przekształcenia oraz przekształcanie oryginalnego obrazu.

function H2 = solveSimi1(imOrg,A,B,i)

H = compSimi1(A,B); %policzenie macierzy transformaacji podobieństwa

disp('Macierz transformacji podobieństwa obrazu');

disp(H);

% Obraz po przekszałceniu wyliczoną macierzą transformacji

imOut = transform(imOrg,H); % przekszałcenie obrazu

figure(i); imshow(imOut);

end

function solveAffi(imOrg,A,B,i)

H = compAfii(A,B); %policzenie macierzy transformacji afinicznej

disp('Macierz transformacji afinicznej obrazu');

disp(H);

% Obraz po przekszałceniu wyliczoną macierzą transformacji

imOut = transform(imOrg,H);

figure(i); imshow(imOut);

end

function w = isInside(v,n)

w = (v >= 1) & (v <= n);

end

function H = compSimi1(A,B)

p = A(:,2) - A(:,1);

q = B(:,2) - B(:,1);

r = [p(1), -p(2); p(2), p(1)]\q;

V = [r(1), -r(2); r(2), r(1)];

tt = B(:,1) - V * A(:,1);

H= [V, tt; 0, 0, 1];

end

function H = compAfii(A,B)

v1 = [A(:, 1)',1];

v2 = [A(:, 2)',1];

v3 = [A(:, 3)' 1];

z = [0,0,0];

% utworzenie ukladu rownan i rozwiazanie go

M = [v1,z; z,v1; v2,z; z,v2; v3,z; z,v3];

x = M \ B(:);

H = [x(1:3)'; x(4:6)'; 0,0,1]; %zapis danych w macierzy cząstkowej

end

function imOut = transform(imIn,H)

[height, width] = size(imIn);

imOut = uint8(zeros(height,width));

for y = 1 : height

for x = 1: width

v = round(H * [x;y;1]);

xPost = v(1);

yPost = v(2);

if isInside(xPost,width) && isInside(yPost,height)

imOut(yPost,xPost) = imIn(y,x);

end

file:///E:/Dominik/Dominik/Szkoła/SEMESTR VI/GrafikaKomputerowa/Lab03/tmp/html/Lab3_Glegola_200811.html 6/9


27.03.2022, 21:57 GRAFIKA KOMPUTEROWA LAB_3
end

end

end

Macierz transformacji podobieństwa obrazu

0.7047 0.2535 41.0418

-0.2535 0.7047 99.5487

0 0 1.0000

Macierz transformacji podobieństwa obrazu

0.9850 0.4758 -38.5280

-0.4758 0.9850 31.3004

0 0 1.0000

Macierz transformacji afinicznej obrazu

0.5041 1.1900 10.4377

0.8048 0.3937 -10.1957

0 0 1.0000

Macierz transformacji afinicznej obrazu

1.2260 0.5216 -58.0107

0.5076 0.8025 -51.4103

0 0 1.0000

file:///E:/Dominik/Dominik/Szkoła/SEMESTR VI/GrafikaKomputerowa/Lab03/tmp/html/Lab3_Glegola_200811.html 7/9


27.03.2022, 21:57 GRAFIKA KOMPUTEROWA LAB_3

file:///E:/Dominik/Dominik/Szkoła/SEMESTR VI/GrafikaKomputerowa/Lab03/tmp/html/Lab3_Glegola_200811.html 8/9


27.03.2022, 21:57 GRAFIKA KOMPUTEROWA LAB_3

4.3 Uwagi i wnioski


Uzyskane obrazy mają czarne punkty, które spowodowane są nachodzeniem na siebie niektórych pixeli.

Published with MATLAB® R2019a


file:///E:/Dominik/Dominik/Szkoła/SEMESTR VI/GrafikaKomputerowa/Lab03/tmp/html/Lab3_Glegola_200811.html 9/9

You might also like