You are on page 1of 31

1/7

MatLab és alkalmazásai


5. gyakorlat
Képkezelés

Pécsi Tudományegyetem
ÁOK, TTK
Szerda
2/7

Képműveletek
2/7

Képműveletek
Néhány fontos utası́tás:
2/7

Képműveletek
Néhány fontos utası́tás:
imread: Kép beolvasása. Használata A=imread(filenev,tip)
imwrite: Kép mentése. Használata imwrite(A,filenev,tip)
image: Kép ábrázolása. Használata image(A)
2/7

Képműveletek
Néhány fontos utası́tás:
imread: Kép beolvasása. Használata A=imread(filenev,tip)
imwrite: Kép mentése. Használata imwrite(A,filenev,tip)
image: Kép ábrázolása. Használata image(A)
5.1. Feladat. Töltsük le a honlapról a pte.bmp file-t. Készı́tsünk egy m-filet,
amellyel beolvashatjuk ábrázolhatjuk a képet a középpont körül elforgatva valame-
ly megadott szöggel. A függvény bemenőadatkét várja a file nevét és a forgatás
szögét. Mielőtt kilépünk mentsük is el az elforgatott képet a filenev2.bmp file-
ba.
2/7

Képműveletek
Néhány fontos utası́tás:
imread: Kép beolvasása. Használata A=imread(filenev,tip)
imwrite: Kép mentése. Használata imwrite(A,filenev,tip)
image: Kép ábrázolása. Használata image(A)
5.1. Feladat. Töltsük le a honlapról a pte.bmp file-t. Készı́tsünk egy m-filet,
amellyel beolvashatjuk ábrázolhatjuk a képet a középpont körül elforgatva valame-
ly megadott szöggel. A függvény bemenőadatkét várja a file nevét és a forgatás
szögét. Mielőtt kilépünk mentsük is el az elforgatott képet a filenev2.bmp file-
ba.

Felmerülő problémák és megoldásuk:


2/7

Képműveletek
Néhány fontos utası́tás:
imread: Kép beolvasása. Használata A=imread(filenev,tip)
imwrite: Kép mentése. Használata imwrite(A,filenev,tip)
image: Kép ábrázolása. Használata image(A)
5.1. Feladat. Töltsük le a honlapról a pte.bmp file-t. Készı́tsünk egy m-filet,
amellyel beolvashatjuk ábrázolhatjuk a képet a középpont körül elforgatva valame-
ly megadott szöggel. A függvény bemenőadatkét várja a file nevét és a forgatás
szögét. Mielőtt kilépünk mentsük is el az elforgatott képet a filenev2.bmp file-
ba.

Felmerülő problémák és megoldásuk:


1. Forgatás az origó körül ϕ szöggel. Az x vektor elforgatottja:
 
cos ϕ − sin ϕ
x0 = ·x
sin ϕ cos ϕ
2/7

Felmerülő problémák és megoldásuk:


2. A forgatás középpontja az origó nekünk a kép középpontja körül kellene. Tran-
szformáció!
2/7

Felmerülő problémák és megoldásuk:


2. A forgatás középpontja az origó nekünk a kép középpontja körül kellene. Tran-
szformáció!
3. Ha az x vektor koordinátái egészek is az x0 vektor valószı́nűleg nem azok.
Kerekı́tés.
2/7

Felmerülő problémák és megoldásuk:


2. A forgatás középpontja az origó nekünk a kép középpontja körül kellene. Tran-
szformáció!
3. Ha az x vektor koordinátái egészek is az x0 vektor valószı́nűleg nem azok.
Kerekı́tés.
4. A kerekı́tési hibák eredményeként elképzelhető, hogy kép bizonyos pixelei üresen
maradnak. Inverz transzformáció és ősképkeresés.
2/7

Felmerülő problémák és megoldásuk:


2. A forgatás középpontja az origó nekünk a kép középpontja körül kellene. Tran-
szformáció!
3. Ha az x vektor koordinátái egészek is az x0 vektor valószı́nűleg nem azok.
Kerekı́tés.
4. A kerekı́tési hibák eredményeként elképzelhető, hogy kép bizonyos pixelei üresen
maradnak. Inverz transzformáció és ősképkeresés.
5. Azokhoz a pontokhoz melyeknek ősképei nem szerepelnek az eredeti képen előre
rögzı́tett értéket rendelünk.
2/7

01 function forgatas(filenev,szog) 24 h=length(filenev);


02 clf; 25 s=strcat(filenev(1:h-4),’2.bmp’);
03 A=imread(filenev,’bmp’); 26 B=1/256*B;
04 image(A) 27 imwrite(B,s,’bmp’);
05 axis off 28 C=imread(s,’bmp’);
06 axis image 29 pause();
07 n=length(A); 30 clf;
08 B=zeros(n,n,3); 31 image(C)
09 R=[cosd(szog),sind(szog);-sind(szog),cosd(szog)]; 32 axis off
10 for k=1:n 33 axis image
11 for m=1:n
12 y=-k+(n-1)/2+1;
13 x=m-(n-1)/2-1;
14 t=R*[x;y];
15 x1=round(t(1)+(n-1)/2+1);
16 y1=round(-t(2)+(n-1)/2+1);
17 if x1>0 & x1<n+1 & y1>0 & y1<n+1
18 for l=1:3
19 B(k,m,l)=A(y1,x1,l);
20 end
21 end
22 end
23 end
2/7

Sztereografikus projekció

1
Az egység sugarú kört az R = 2
sugarú gömbre vetı́tjük.
3/7

5.2. Feladat. Töltsük le a honlapról az lfc02.bmp filet. Vetı́tsük a képet egy gömbre!
3/7

5.2. Feladat. Töltsük le a honlapról az lfc02.bmp filet. Vetı́tsük a képet egy gömbre!

Szükséges információk:
3/7

5.2. Feladat. Töltsük le a honlapról az lfc02.bmp filet. Vetı́tsük a képet egy gömbre!

Szükséges információk:
1. Gömb és egyenes döféspontjára van szükségünk.
Ehhez a gömb egyenlete: (x − u2 ) + (y − v)2 + (z − w)2 = R2
x = x0 + tA
A v = (A, B, C) irányvektorú P = (x0 , y0 , z0 ) ponton átmenő egyenes egyenletrendszere y = y0 + tB
z = z0 + tC
3/7

5.2. Feladat. Töltsük le a honlapról az lfc02.bmp filet. Vetı́tsük a képet egy gömbre!

Szükséges információk:
1. Gömb és egyenes döféspontjára van szükségünk.
Ehhez a gömb egyenlete: (x − u2 ) + (y − v)2 + (z − w)2 = R2
x = x0 + tA
A v = (A, B, C) irányvektorú P = (x0 , y0 , z0 ) ponton átmenő egyenes egyenletrendszere y = y0 + tB
z = z0 + tC
2. A döféspont meghatározásához a solve utası́tást használjuk. (Már ha van. Próbáljuk ki!)
solve használata: S=solve(’eq1’,’eq2’,...). Ekkor a megoldásokS.valtnev változókban lesznek
3/7

5.2. Feladat. Töltsük le a honlapról az lfc02.bmp filet. Vetı́tsük a képet egy gömbre!

Szükséges információk:
1. Gömb és egyenes döféspontjára van szükségünk.
Ehhez a gömb egyenlete: (x − u2 ) + (y − v)2 + (z − w)2 = R2
x = x0 + tA
A v = (A, B, C) irányvektorú P = (x0 , y0 , z0 ) ponton átmenő egyenes egyenletrendszere y = y0 + tB
z = z0 + tC
2. A döféspont meghatározásához a solve utası́tást használjuk. (Már ha van. Próbáljuk ki!)
solve használata: S=solve(’eq1’,’eq2’,...). Ekkor a megoldásokS.valtnev változókban lesznek
3. Figyelem a solve visszatérési értéke sym (szimbolikus) elemekből álló vektor. Konvertáláshoz a double
parancs használható.
3/7

5.2. Feladat. Töltsük le a honlapról az lfc02.bmp filet. Vetı́tsük a képet egy gömbre!

Szükséges információk:
1. Gömb és egyenes döféspontjára van szükségünk.
Ehhez a gömb egyenlete: (x − u2 ) + (y − v)2 + (z − w)2 = R2
x = x0 + tA
A v = (A, B, C) irányvektorú P = (x0 , y0 , z0 ) ponton átmenő egyenes egyenletrendszere y = y0 + tB
z = z0 + tC
2. A döféspont meghatározásához a solve utası́tást használjuk. (Már ha van. Próbáljuk ki!)
solve használata: S=solve(’eq1’,’eq2’,...). Ekkor a megoldásokS.valtnev változókban lesznek
3. Figyelem a solve visszatérési értéke sym (szimbolikus) elemekből álló vektor. Konvertáláshoz a double
parancs használható.
4. Mindig két döféspont lesz, de az egyik mindig az Északi pólus (N ). Ki kell szűrni!
3/7

5.2. Feladat. Töltsük le a honlapról az lfc02.bmp filet. Vetı́tsük a képet egy gömbre!

Szükséges információk:
1. Gömb és egyenes döféspontjára van szükségünk.
Ehhez a gömb egyenlete: (x − u2 ) + (y − v)2 + (z − w)2 = R2
x = x0 + tA
A v = (A, B, C) irányvektorú P = (x0 , y0 , z0 ) ponton átmenő egyenes egyenletrendszere y = y0 + tB
z = z0 + tC
2. A döféspont meghatározásához a solve utası́tást használjuk. (Már ha van. Próbáljuk ki!)
solve használata: S=solve(’eq1’,’eq2’,...). Ekkor a megoldásokS.valtnev változókban lesznek
3. Figyelem a solve visszatérési értéke sym (szimbolikus) elemekből álló vektor. Konvertáláshoz a double
parancs használható.
4. Mindig két döféspont lesz, de az egyik mindig az Északi pólus (N ). Ki kell szűrni!
5. Ábrázolás pontonkét történjen, a szinkódot RGB koordinátákkal is megadhatjuk:
plot(x,y,’o’,’MarkerFaceColor’,[R G B],’MarkerEdgeColor’,[R G B])
4/7
function sztepro(filenev,R)
tic
clf; daspect=[1,1,1]; view(3); hold on;
A=imread(filenev,’bmp’);
n=length(A); %N=[0,0,2*R]
for k=1:n
for m=1:n
y=-k+(n-1)/2+1;
x=m-(n-1)/2-1;
x1=x/(n-1)*4*R;
y1=y/(n-1)*4*R;
if x1^2+y1^2<4*R^2
s=num2str(x1);
s1=strcat(’x1=’,s);
s=num2str(y1);
s2=strcat(’y1=’,s);
s=num2str(R);
s3=strcat(’R=’,s);
S=solve(’x^2+y^2+(z-R)^2=R^2’,’x=x1+t*(0-x1)’,’y=y1+t*(0-y1)’,’z=0+t*(2*R-0)’,s1,s2,s3);
x2=double(S.x); y2=double(S.y); z2=double(S.z);
c=1/256*[A(k,m,1),A(k,m,2),A(k,m,3)];
plot3(x2,y2,z2,’.’,’MarkerFaceColor’,c,’MarkerEdgeColor’,c)
drawnow
end
end
end
toc
4/7
function sztepro(filenev,R)
tic
clf; daspect=[1,1,1]; view(3); hold on;
A=imread(filenev,’bmp’);
n=length(A); %N=[0,0,2*R]
for k=1:n
for m=1:n
y=-k+(n-1)/2+1;
x=m-(n-1)/2-1;
x1=x/(n-1)*4*R;
y1=y/(n-1)*4*R;
if x1^2+y1^2<4*R^2
s=num2str(x1);
s1=strcat(’x1=’,s);
s=num2str(y1);
s2=strcat(’y1=’,s);
s=num2str(R);
s3=strcat(’R=’,s);
S=solve(’x^2+y^2+(z-R)^2=R^2’,’x=x1+t*(0-x1)’,’y=y1+t*(0-y1)’,’z=0+t*(2*R-0)’,s1,s2,s3);
x2=double(S.x); y2=double(S.y); z2=double(S.z);
c=1/256*[A(k,m,1),A(k,m,2),A(k,m,3)];
plot3(x2,y2,z2,’.’,’MarkerFaceColor’,c,’MarkerEdgeColor’,c)
drawnow
end
end
end
toc
4/7
function sztepro(filenev,R)
tic
clf; daspect=[1,1,1]; view(3); hold on;
A=imread(filenev,’bmp’);
n=length(A); %N=[0,0,2*R]
for k=1:n
for m=1:n
y=-k+(n-1)/2+1;
x=m-(n-1)/2-1;
x1=x/(n-1)*4*R;
y1=y/(n-1)*4*R;
if x1^2+y1^2<4*R^2
s=num2str(x1);
s1=strcat(’x1=’,s);
s=num2str(y1);
s2=strcat(’y1=’,s);
s=num2str(R);
s3=strcat(’R=’,s);
S=solve(’x^2+y^2+(z-R)^2=R^2’,’x=x1+t*(0-x1)’,’y=y1+t*(0-y1)’,’z=0+t*(2*R-0)’,s1,s2,s3);
x2=double(S.x); y2=double(S.y); z2=double(S.z);
c=1/256*[A(k,m,1),A(k,m,2),A(k,m,3)];
plot3(x2,y2,z2,’.’,’MarkerFaceColor’,c,’MarkerEdgeColor’,c)
drawnow
end
end
end
toc
4/7
function sztepro(filenev,R)
tic
clf; daspect=[1,1,1]; view(3); hold on;
A=imread(filenev,’bmp’);
n=length(A); %N=[0,0,2*R]
for k=1:n
for m=1:n
y=-k+(n-1)/2+1;
x=m-(n-1)/2-1;
x1=x/(n-1)*4*R;
y1=y/(n-1)*4*R;
if x1^2+y1^2<4*R^2
s=num2str(x1);
s1=strcat(’x1=’,s);
s=num2str(y1);
s2=strcat(’y1=’,s);
s=num2str(R);
s3=strcat(’R=’,s);
S=solve(’x^2+y^2+(z-R)^2=R^2’,’x=x1+t*(0-x1)’,’y=y1+t*(0-y1)’,’z=0+t*(2*R-0)’,s1,s2,s3);
x2=double(S.x); y2=double(S.y); z2=double(S.z);
c=1/256*[A(k,m,1),A(k,m,2),A(k,m,3)];
plot3(x2,y2,z2,’.’,’MarkerFaceColor’,c,’MarkerEdgeColor’,c)
drawnow
end
end
end
toc
4/7
function sztepro(filenev,R)
tic
clf; daspect=[1,1,1]; view(3); hold on;
A=imread(filenev,’bmp’);
n=length(A); %N=[0,0,2*R]
for k=1:n
for m=1:n
y=-k+(n-1)/2+1;
x=m-(n-1)/2-1;
x1=x/(n-1)*4*R;
y1=y/(n-1)*4*R;
if x1^2+y1^2<4*R^2
s=num2str(x1);
s1=strcat(’x1=’,s);
s=num2str(y1);
s2=strcat(’y1=’,s);
s=num2str(R);
s3=strcat(’R=’,s);
S=solve(’x^2+y^2+(z-R)^2=R^2’,’x=x1+t*(0-x1)’,’y=y1+t*(0-y1)’,’z=0+t*(2*R-0)’,s1,s2,s3);
x2=double(S.x); y2=double(S.y); z2=double(S.z);
c=1/256*[A(k,m,1),A(k,m,2),A(k,m,3)];
plot3(x2,y2,z2,’.’,’MarkerFaceColor’,c,’MarkerEdgeColor’,c)
drawnow
end
end
end
toc
5/7
function sztepro6(filenev,R,res)
tic
daspect=[1,1,1]; view(3); hold on;
A=imread(filenev,’bmp’);
n=length(A); %N=[0,0,2*R]
for k=-0.7:R/res:R
for m=-R:R/res:R
if k^2+m^2<R^2
k
m
t=2*R/(sqrt(R^2-k^2-m^2)-2*R);
x=-m*t;
y=-k*t;
x1=round((n-1)/4/R*x+(n+1)/2);
y1=round((1-n)/4/R*y+(n+1)/2);
c=1/256*[A(y1,x1,1),A(y1,x1,2),A(y1,x1,3)];
plot3([m,-m],[k,-k],sqrt(R^2-k^2-m^2)*[1 -1],’.’,’MarkerFaceColor’,c,’MarkerEdgeColor’,c)
drawnow
end
end
end
toc
6/7

5.3. Feladat. Az A ∈ Z20×20 mátrix tartalmazzon 1 és 500 közötti véletlen egész
számokat! Ábrázoljuk az adatainkat 64-szı́nű,,hőtérképen”!
6/7

5.3. Feladat. Az A ∈ Z20×20 mátrix tartalmazzon 1 és 500 közötti véletlen egész
számokat! Ábrázoljuk az adatainkat 64-szı́nű,,hőtérképen”!

A=round(500.*rand(20,20));
6/7

5.3. Feladat. Az A ∈ Z20×20 mátrix tartalmazzon 1 és 500 közötti véletlen egész
számokat! Ábrázoljuk az adatainkat 64-szı́nű,,hőtérképen”!

A=round(500.*rand(20,20));
maxi=max(max(A));
mini=min(min(A));
B=floor(64/(maxi-mini)*A);
image(B);
7/7

5.4. Feladat. Készı́tsünk az előző mátrixban tárolt adatainkhoz szürkeárnyalatos


,,hőtérképet”!
7/7

5.4. Feladat. Készı́tsünk az előző mátrixban tárolt adatainkhoz szürkeárnyalatos


,,hőtérképet”!

maxi=max(max(A));
C=zeros([size(A),3]);
for k=1:3
C(:,:,k)=C(:,:,k)+1/maxi*A(:,:);
end
image(C/3);

You might also like