Komputerowa analiza obrazu Laboratorium 4 Przykład 1 Palety barw w programie Matlab: Wykreślenie wartości nasycenia składowych RGB dla palety HSV. ('Color','w'); rgbplot (hsv (256)); axis([0 256 0 1]); grid; colormap (hsv (256)); colorbar ('horiz'); ylabel('intensywność składowych RGB', 'FontSize', 15, 'FontName', 'Arial CE'); title('hsv','fontsize',15) Zadanie 1 Proszę utworzyć wykresy dla co najmniej 3 innych palet koloru (jet, hot, cool, gray, bone, copper, pink, pism, flag). Tworzenie własnej mapy kolorów. Mapa kolorów to zwykła macierz o trzech kolumnach i wartościach z przedziału [0, 1]. Więcej na ten temat -> help colormap. Przykład 1b [L1 m]=imread('portret.jpg'); isindx = isind(l1) disp('losowe mapy kolorow:') for i = 1:5 colormap( rand(25,3) ) disp('nacisnij cos..') pause end disp('inne, ciekawe mapy kolorow:') imshow(l1(:,:,1)) map = zeros(256, 3); map(:,2) = 1 - [0:(1/255):1]'; map(:,2) = 1 - [0:(1/255):1]'; map(:,2) = ([0:(1/255):1]').^5;
map(:,2) = 1 - [0:(1/255):1]'; map(:,2) = (1 + sin(5*([0:(1/255):1]')))/2; map(:,2) = (1 + cos(10*(1 - [0:(1/255):1]')))/2; map(:,3) = [0:(1/255):1]'; map(:,2) = (1 + cos(10*(1 - [0:(1/255):1]')))/2; map(:,3) = 1 - [0:(1/255):1]'; map(:,1) = ([0:(1/255):1]').^3; map(:,2) = ([0:(1/255):1]').^0.3; map(:,3) = sqrt(1 - [0:(1/255):1]'); close all; Zadanie 2 Utworzyć dowolną macierz obrazu w kolorze indeksowanym o rozmiarze 3 x piksele (wpisując wartości z klawiatury). Wyświetlić go w sztucznej palecie barw, a następnie przeprowadzić konwersję do skali szarości. Przykładowo: L1=[124, 65, 180; 104, 11, 32; 145, 234, 117] imshow (L1, hot (256), 'notruesize') L2 = ind2gray (L1, hot) imshow (L2, 'notruesize') Przykład 2 Sztuczny obraz RGB+gray: zielony niebieski szary (nasycenie 50%) czerwony L1 = zeros(2,2,3) L1(1,1,2) = 1 L1(1,2,3) = 1 L1(2,1,:) = 0.5 L1(2,2,1) = 1 imshow(l1,'notruesize')
Zadanie 3 Proszę utworzyć sztuczny obraz o rozdzielczości 2 x 2 piksele o następujących kolorach: yellow cyjan czarny magenta Sztuczny obraz CMYK: L(1,1,2) = 1 L(1,1,1) = 1 L(1,2,3) = 1 L(1,2,2) = 1 L(2,1,:) = 0 L(2,2,1) = 1 L(2,2,3) = 1 imshow(l,'notruesize') Przykład 3 Zamiana trybu koloru obrazu rzeczywistego na Grayscale i zmniejszenie 2, 4, 8, 16 i 32 krotne rozdzielczości przestrzennej obrazu metodą najbliższego sąsiada [L1,map]=imread('Arch.bmp') L1=ind2gray(L1,map) imshow(l1,'notruesize') [L2a]=imresize(L1,size(L1)/2,'nearest') [L2a]=imresize(L1,size(L1)/4,'nearest') [L2a]=imresize(L1,size(L1)/8,'nearest') [L2a]=imresize(L1,size(L1)/16,'nearest') [L2a]=imresize(L1,size(L1)/32,'nearest') close all; Zadanie 4 Funkcje rgb2ind, ind2gray, rgb2hsv służą do zmiany trybu koloru. Proszę wypróbować ich działanie na wybranych obrazach. Tryb koloru danego obrazu sprawdzamy za pomocą funkcji isrgb (Czy to jest RGB?), isind, isgray, isbw. Zwracana jest wartość 1, jeżeli warunek jest spełniony.
Przykład 4 Zmiana rozdzielczości barwnej sztucznego obrazu z 256 na 4 odcienie szarości: L1=uint8 ((0:254)'*ones ([1 40]))' ; imshow(l1,gray (256)); [L2a,map2a]=imapprox(L1,gray (256),4); ; imshow(l2a,map2a); delta=256/4 L2b=uint8 (round ((double (L1)-(delta/2-1))/delta)*delta+(delta/2-1)) ; imshow(l2b) Zadanie 5 Dla tego samego obrazu proszę zmienić rozdzielczość barwną do 8 i 16 odcieni szarości. Przykład 5 Zmiana rozdzielczości barwnej obrazu rzeczywistego: [L1,map]=imread('Arch.bmp') imshow(l1,map) ind2gray(l1,map) [L2a,map2a]=imapprox(L1,map,2^8) imshow(l2a,map2a) [L2b,map2b]=imapprox(L1,map,2^4) imshow(l2b,map2b) [L2c,map2c]=imapprox(L1,map,2^2) imshow(l2c,map2c) [L2d,map2d]=imapprox(L1,map,2^1) imshow(l2d,map2d) Przykład 6 Przekrój ukazujący poziom jasności obrazu: [L1]=imread('portret.jpg'); ; ; [mm,nn]=size(l1); c=improfile(l1,[1 nn],[82 82]); line([1 nn],[82 82],'Color',[1 1 1],'LineWidth',3); ; plot(c(:,:,1),'k'); xlabel('n','fontsize',15,'fontname','arial CE'); ylabel('l(82,n)','fontsize',15,'fontname','arial CE') UWAGA! improfile można użyć interaktywnie. Napisz p = improfile w konsoli Matlaba, mając wyświelony obraz w oknie.
Przykład 7 Przekroje ukazujące nasycenie barwą RGB: [L1]=imread('e0102.bmp'); ; ; [mm,nn]=size(l1); c=improfile(l1,[110 110],[1 mm]); line([110 110],[1 mm],'color',[1 1 1],'LineWidth',3); ; plot(c(:,:,1),'k'); xlabel('n','fontsize',15,'fontname','arial CE'); ylabel('l(m,110)','fontsize',15,'fontname','arial CE')
Przykład 7b Przedstawienie intensywności koloru pikseli w 3D (patrz rysunki powyżej). [L1 m]=imread('portret.jpg'); [r c] = size(l1) [x,y] = meshgrid(0:c-1,0:r-1); z = double(l1) size(x) size(y) size(z) surfc(x,y,z); axis([0 c 0 r 0 255]) L2 = imresize(l1,size(l1)/8,'nearest') [r c] = size(l2) [x,y] = meshgrid(0:c-1,0:r-1); z = double(l2) size(x) size(y) size(z) surfc(x,y,z); axis([0 c 0 r 0 255]) close all; Przykład 7c Przekroje RGB tworzone interaktywnie naciśnij lewy przycisk myszki na obrazie i wybierz linie do przekroju. Prawy przycisk myszki kończy wybieranie linii. close all [L1]=imread('e0102.bmp'); ; ; p = improfile size(p) ; plot(p(:,:,1),'r') title('red') ; plot(p(:,:,2),'g') title('green') ; plot(p(:,:,3),'b') title('blue')
Przykład 8 Wartości nasycenia składowymi RGB we wskazanych punktach obrazu: [L1]=imread('e0102.bmp') x=[12 146 300] y=[104 156 129] piksel=impixel(l1,x,y) text(x(1),y(1),'*','fontsize',45,'fontname','arial CE','Color',([1 1 1])) text(x(2),y(2),'*','fontsize',45,'fontname','arial CE','Color',([1 1 1])) text(x(3),y(3),'*','fontsize',45,'fontname','arial CE','Color',([1 1 1])) set(gcf,'color',([1 1 1])) piksel while true piksel = impixel end Zadanie 6 Na dowolnych obrazach proszę dokonać różnych konwersji trybu koloru, każdorazowo sprawdzając wartości w wybranych punktach.