Komputerowe przetwarzanie obrazu Laboratorium 2 Przykład 1 Informacja na temat obrazu: imfinfo( portret.jpg ) Przykład 2 Numeracja wierszy i kolumn macierzy obrazu: imshow (eye (4)*0.5+0.5,'notruesize') grid on xlabel('kolumny') ylabel('wiersze') hold on plot(1:4,1:4,'r','linewidth',5) (5) axis xy Przykład 3 Pomniejszenie sztucznego obrazu o rozmiarze 8 x 8 pikseli do rozmiaru 8 x 7 przy zastosowaniu trzech metod interpolacji: L1a=[1-1 1-1 1-1 1-1]; L1b=[-1;1;-1;1;-1;1;-1;1]; L1=uint8(((L1b*L1a)<0)*255); imshow(l1,'notruesize') [L2a]=imresize(L1,[7 8],'nearest') imshow(l2a, 'notruesize') [L2b]=imresize(L1,[7 8],'bilinear') imshow(l2b, 'notruesize') [L2c]=imresize(L1,[7 8],'bicubic') imshow(l2c, 'notruesize') Zadanie 4 Wzorując się na powyższym przykładzie zmienić rozdzielczość sztucznego obrazu szachownicy o pierwotnym rozmiarze 4 x 4 do rozdzielczości 8 x 8. Zadanie 5
Zmienić rozdzielczość przestrzenną obrazu portret.jpg wypróbowując wszystkie metody przy powiększeniu i pomniejszeniu obrazu. Przykład 6 Przesunięcie obrazu z powiększeniem powierzchni obrazu: m0=100 n0=160 [L1]=imread('portret.jpg') imshow(l1) [m1,n1]=size(l1) L2=[zeros([m1 n0]),l1;zeros([m0 (n0+n1)])] imshow(l2) Przykład 7 Przesunięcie obrazu z zachowaniem powierzchni wyjściowej obrazu: imshow(l1); se = translate(strel(1), [100 160]); L2 = imdilate(l1,se);, imshow(l2) Zadanie 8 Wykonać przesunięcie obrazu o inną wartość. Przykład 9 Obrót obrazu o zadany kąt z zachowaniem pola powierzchni obrazu ('crop'): imshow(l1); L2a=imrotate(L1,-60,'crop'); imshow(l2a); Zadanie 10 Proszę obrócić obraz o inny kąt (z odpowiednim powiększeniem pola obrazu) Zadanie 11 Funkcja "fliplr" (flip left-rigrh) odpowiada za obrót obrazu względem osi pionowej, "flipud" (flip up-down) względem osi poziomej obrzu źródłowego. Proszę wykonać te przekształcenia wykorzystując obraz "portret.jpg". Przykład 12 Dodawanie wierszy lub kolumn za pomocą funkcji "padarray" (powiększanie obszaru roboczego, powielanie wierszy, odbicie symetryczne skrajnych wierszy lub kolumn)
imshow (L1); L2a=padarray(L1,[30 80],128,'post'); imshow (L2a); L2b=padarray(L1,80,128,'both';) imshow (L2b); L2c=padarray(L1,[80 20],'replicate','both'); imshow (L2c); L2d=padarray(L1,30,'symmetric','pre'); imshow (L2d); L2e=padarray(L1,[60 60],'symmetric','pre'); imshow (L2e) Zniekształcenia geometryczne Przykład 13 Funkcja reshape imshow(l1, map) [r,c] = size(l1) L2 = reshape(l1, r*2, c/2); imshow(l2) L3 = reshape(l1, r/2, c*2); imshow(l3) Przykład 14 Zniekształcanie za pomocą funkcji sinus imshow(l1, map) [r,c] = size(l1) x = 0:r; y = round(15*sin(x/5)+16); L2 = L1; for i=1:r L2(i,:) = [L1(i,(c-y(i)):c), L1(i,1:(c-y(i)-1))]; end imshow(l2) Przykład 15 Przekształcania afiniczne i projekcje Przekształcenie afiniczne płaszczyzny lub przestrzeni, pokrewieństwo, powinowactwo: każde różnowartościowe przekształcenie geometryczne, które wszystkie proste zawarte w dziedzinie tego
odwzorowania przekształca na proste. Przekształcenia afiniczne płaszczyzny i przestrzeni w siebie obejmują m.in. izometrie (np. przesunięcie równoległe, obrót, symetrię osiową, symetrię płaszczyznową, symetrię z obrotem, symetrię z poślizgiem), jednokładności i powinowactwa osiowe. Własności figur geometrycznych, które nie zmieniają się przy przekształceniach afinicznych nazywa się niezmiennikami afinicznymi; przykładami niezmienników afinicznych mogą być równoległość prostych i skośne położenie prostych. Przekształcenie afiniczne płaszczyzny zachowuje również stosunek długości odcinków równoległych, a przekształcenie afiniczne przestrzeni - stosunek pól figur leżących na płaszczyznach równoległych. imshow(l1, map) tr = maketform('affine', [1 0.5; 0 1; 0 0 ]) imshow(l2) tr = maketform('projective', [1 1 0; 0 1 0.001; 0 0.01 1 ]) [L2, x, y] = imtransform(l1, tr); imshow(x,y,l2) Przykład 16 Zniekształcenia wielomianowe imshow(l1, map) xybase = reshape(randn(12,1),6,2); tr = cp2tform(xybase, xybase,'polynomial',2) tr.tdata = [0 0; 1 0; 0 1; 0 0 ;0 0; 0.003 0.003]; imshow(l2) tr.tdata = [0 0; 1 0; 0 1; 0.06 0 ;0.001 0; 0.003 0.003]; imshow(l2) Przykład 17 Sztuczne rozszerzanie połowy obrazu z zachowaniem i niezachowaniem jego pierwotnej rozdzielczości imshow(l1, map)
[m,n]=size(l1); sr = round(size(l1,2)/2); L1_l = L1(:,1:sr); L1_r = L1(:,sr+1:end); L1_rs = imresize(l1_r,[size(l1,1) sr*4]); L2 = [L1_l L1_rs]; imshow(l2,map); L2 = imresize(l2, [m n]); imshow(l2, map);