155GIT1 / 10. cvičení: Porovnání verzí
(Není zobrazeno 43 mezilehlých verzí od 2 dalších uživatelů.) | |||
Řádek 1: | Řádek 1: | ||
{{Geoinformatika}} | {{Geoinformatika}} | ||
{{Cvičení|155GIT1| | {{Cvičení|155GIT1|10|Obrazová data}} | ||
== Náplň cvičení == | == Náplň cvičení == | ||
# načtení | # načtení obrazových dat <code>imread(), imshow()</code> | ||
# základní informace <code>imfinfo()</code> | # základní informace <code>imfinfo()</code> | ||
# binary, indexed, | # binary, indexed, grayscale a truecolor | ||
# příkazy <code>image()</code>, <code>imagesc()</code>, [http://geo.fsv.cvut.cz/user/gin/git1/matlab/matlab.pdf# | # příkazy <code>image()</code>, <code>imagesc()</code>, [http://geo.fsv.cvut.cz/user/gin/git1/matlab/matlab.pdf#page=127 barevné schéma] <code>colormap()</code> | ||
# převod do odstínů šedi <code>rgb2ind -> ind2gray</code> | # převod do odstínů šedi <code>rgb2ind -> ind2gray</code> | ||
# rozklad obrázku na jednotlivé vrstvy [http://upload.wikimedia.org/wikipedia/commons/3/33/Beyoglu_4671_tricolor.png RGB] | # rozklad obrázku na jednotlivé vrstvy [http://upload.wikimedia.org/wikipedia/commons/3/33/Beyoglu_4671_tricolor.png RGB] | ||
Řádek 15: | Řádek 14: | ||
=== Načtení obrázku do matice === | === Načtení obrázku do matice === | ||
Data: https://upload.wikimedia.org/wikipedia/commons/a/ae/Aristotle_Altemps_Inv8575.jpg | |||
<source lang=octave> | <source lang=octave> | ||
% načtení z URL | % načtení z URL | ||
jmeno1 = 'Aristotle_Altemps_Inv8575.jpg'; | |||
size( | obr1 = imread(jmeno1); | ||
size(obr1) | |||
% zobrazení obrázku v grafickém okně | % zobrazení obrázku v grafickém okně | ||
imshow( | imshow(obr1) | ||
% zobrazení metadat | % zobrazení metadat | ||
imfinfo(' | imfinfo(jmeno1) | ||
</source> | |||
''Poznámka:'' Matlab i novější verze Octave umí číst data i přes protokol HTTP/HTTPS: | |||
<source lang=octave> | |||
url1 = 'https://upload.wikimedia.org/wikipedia/commons/a/ae/Aristotle_Altemps_Inv8575.jpg'; | |||
obr1 = imread(url1); | |||
</source> | </source> | ||
Řádek 29: | Řádek 38: | ||
<source lang="octave"> | <source lang="octave"> | ||
obr2 = rand(100, 100) * 255; | |||
image( | image(obr2) | ||
% škálovat data, | colormap('gray') | ||
% škálovat data tak, aby bylo využito celé barevné schéma | |||
figure() | figure() | ||
imagesc( | imagesc(obr2) | ||
colormap('gray') | colormap('gray') | ||
figure() | |||
imagesc([0 50], [0 50], obr2) | |||
colormap('gray') | |||
</source> | </source> | ||
=== Typy obrazových dat === | === Typy obrazových dat === | ||
Jednotlivé obrázky ke stažení do pracovního adresáře z následujících url: | |||
* obrázek ve stupních šedi: [http://upload.wikimedia.org/wikipedia/commons/f/fa/Grayscale_8bits_palette_sample_image.png příklad] | |||
* indexovaný obrázek: [http://upload.wikimedia.org/wikipedia/commons/7/7c/Adaptative_8bits_palette_sample_image.png příklad] | |||
* RGB-obrázek: [https://upload.wikimedia.org/wikipedia/commons/b/bc/Parrot.red.macaw.1.arp.750pix.jpg příklad] | |||
<source lang=octave> | <source lang=octave> | ||
% binární rastr | % binární rastr | ||
obr3 = round(rand(25, 25)); | |||
ob = imagesc( | ob = imagesc(obr3) % vs. image(), viz níže | ||
% obr3_1 = 255 * round(rand(25, 25)); | |||
% image(obr3) | |||
% image(obr3_1) | |||
colormap('gray') | colormap('gray') | ||
% rastr v odstínech šedi | % rastr v odstínech šedi | ||
jmeno4 = 'Grayscale_8bits_palette_sample_image.png'; | |||
size( | obr4 = imread(jmeno4); | ||
% indexovaný | size(obr4) | ||
% indexovaný rastr | |||
size( | jmeno5 = 'Adaptative_8bits_palette_sample_image.png'; | ||
[ | obr5 = imread(jmeno5); | ||
size( | size(obr5) | ||
imshow( | [obr5, cmap5] = imread(jmeno5); | ||
imshow( | size(cmap5) | ||
imshow(obr5) | |||
imshow(obr5, cmap5) | |||
% true color (RGB) | % true color (RGB) | ||
jmeno6 = 'Parrot.red.macaw.1.arp.750pix.jpg'; | |||
size( | obr6 = imread(jmeno6); | ||
size(obr6) | |||
imshow(obr6) | |||
</source> | </source> | ||
Řádek 63: | Řádek 88: | ||
<source lang=octave> | <source lang=octave> | ||
% indexovaný na odstíny šedi | % RGB na indexovaný rastr | ||
% Matlab | |||
imshow( | [obr6_i, cmap6] = rgb2ind(obr6, 256); | ||
% Octave | |||
[obr6_i, cmap6] = rgb2ind(obr6); | |||
size(obr6) | |||
size(obr6_i) | |||
size(cmap6) | |||
% indexovaný rastr na odstíny šedi | |||
obr5_g = ind2gray(obr5, cmap5); | |||
imshow(obr5, cmap5) | |||
figure() | |||
imshow(obr5_g) | |||
% formalne existuji i funkce pro opacny prevod, napr. | |||
% odstíny šedi na indexovaný rastr | |||
[obr5_i, cmap5_i] = gray2ind(obr5_g); | |||
figure() | figure() | ||
imshow( | imshow(obr5_i, cmap5_i) | ||
</source> | </source> | ||
Řádek 78: | Řádek 111: | ||
<source lang=octave> | <source lang=octave> | ||
size( | size(obr6) | ||
R = | R = obr6; | ||
G = | G = obr6; | ||
B = | B = obr6; | ||
size(R) | size(R) | ||
% vynulování | % vynulování | ||
Řádek 105: | Řádek 138: | ||
imshow(mat2gray(R(:,:,1), [0, 255])) | imshow(mat2gray(R(:,:,1), [0, 255])) | ||
subplot(3,1,2) | subplot(3,1,2) | ||
imshow(mat2gray(G(:,:, | imshow(mat2gray(G(:,:,2), [0, 255])) | ||
subplot(3,1,3) | subplot(3,1,3) | ||
imshow(mat2gray(B(:,:, | imshow(mat2gray(B(:,:,3), [0, 255])) | ||
</source> | </source> | ||
''Poznámka pro Octave:'' Funkce <tt>mat2gray</tt> je součástí balíčku "image", který lze doinstalovat příkazem: <tt>pkg install image</tt>. |
Verze z 24. 4. 2019, 08:17
Obrazová data
Náplň cvičení
- načtení obrazových dat
imread(), imshow()
- základní informace
imfinfo()
- binary, indexed, grayscale a truecolor
- příkazy
image()
,imagesc()
, barevné schémacolormap()
- převod do odstínů šedi
rgb2ind -> ind2gray
- rozklad obrázku na jednotlivé vrstvy RGB
Ukázky
Načtení obrázku do matice
Data: https://upload.wikimedia.org/wikipedia/commons/a/ae/Aristotle_Altemps_Inv8575.jpg
% načtení z URL
jmeno1 = 'Aristotle_Altemps_Inv8575.jpg';
obr1 = imread(jmeno1);
size(obr1)
% zobrazení obrázku v grafickém okně
imshow(obr1)
% zobrazení metadat
imfinfo(jmeno1)
Poznámka: Matlab i novější verze Octave umí číst data i přes protokol HTTP/HTTPS:
url1 = 'https://upload.wikimedia.org/wikipedia/commons/a/ae/Aristotle_Altemps_Inv8575.jpg';
obr1 = imread(url1);
Zobrazení matice jako obrázku
obr2 = rand(100, 100) * 255;
image(obr2)
colormap('gray')
% škálovat data tak, aby bylo využito celé barevné schéma
figure()
imagesc(obr2)
colormap('gray')
figure()
imagesc([0 50], [0 50], obr2)
colormap('gray')
Typy obrazových dat
Jednotlivé obrázky ke stažení do pracovního adresáře z následujících url:
% binární rastr
obr3 = round(rand(25, 25));
ob = imagesc(obr3) % vs. image(), viz níže
% obr3_1 = 255 * round(rand(25, 25));
% image(obr3)
% image(obr3_1)
colormap('gray')
% rastr v odstínech šedi
jmeno4 = 'Grayscale_8bits_palette_sample_image.png';
obr4 = imread(jmeno4);
size(obr4)
% indexovaný rastr
jmeno5 = 'Adaptative_8bits_palette_sample_image.png';
obr5 = imread(jmeno5);
size(obr5)
[obr5, cmap5] = imread(jmeno5);
size(cmap5)
imshow(obr5)
imshow(obr5, cmap5)
% true color (RGB)
jmeno6 = 'Parrot.red.macaw.1.arp.750pix.jpg';
obr6 = imread(jmeno6);
size(obr6)
imshow(obr6)
Konverze typů obrazových dat
% RGB na indexovaný rastr
% Matlab
[obr6_i, cmap6] = rgb2ind(obr6, 256);
% Octave
[obr6_i, cmap6] = rgb2ind(obr6);
size(obr6)
size(obr6_i)
size(cmap6)
% indexovaný rastr na odstíny šedi
obr5_g = ind2gray(obr5, cmap5);
imshow(obr5, cmap5)
figure()
imshow(obr5_g)
% formalne existuji i funkce pro opacny prevod, napr.
% odstíny šedi na indexovaný rastr
[obr5_i, cmap5_i] = gray2ind(obr5_g);
figure()
imshow(obr5_i, cmap5_i)
Rozklad na vrstvy RGB
size(obr6)
R = obr6;
G = obr6;
B = obr6;
size(R)
% vynulování
R(:,:,[2 3]) = 0;
G(:,:,[1 3]) = 0;
B(:,:,[1 2]) = 0;
% test
size(R)
R(1,:,1)
R(1,:,2)
R(1,:,3)
% vykreslení vrstev RGB
figure()
subplot(3,1,1)
imshow(R)
subplot(3,1,2)
imshow(G)
subplot(3,1,3)
imshow(B)
% převod do stupňů šedi
figure()
subplot(3,1,1)
imshow(mat2gray(R(:,:,1), [0, 255]))
subplot(3,1,2)
imshow(mat2gray(G(:,:,2), [0, 255]))
subplot(3,1,3)
imshow(mat2gray(B(:,:,3), [0, 255]))
Poznámka pro Octave: Funkce mat2gray je součástí balíčku "image", který lze doinstalovat příkazem: pkg install image.