Przykład 2
Transkrypt
Przykład 2
Komputerowe przetwarzanie obrazu Laboratorium 5 Przykład 1 Histogram obrazu a dobór progu binaryzacji. Na podstawie charakterystyki histogramu wybrano dwa różne progi binaryzacji (120 oraz 180). Proszę ocenić rezultaty wykonanych operacji. L1=imread('portret.jpg') figure imshow(L1) set(gcf,'Color',([1 1 1]));figure; grid; imhist(L1); ylabel('Ilość pikseli', 'FontSize',15,'FontName','Arial CE') L2a=L1>120; figure; imshow(L2a); L2b=L1>180; figure; imshow(L2b) Przykład 2 Wyznaczenie progu za pomocą algorytmu Otsu. L1=imread('portret.jpg') figure imshow(L1) set(gcf,'Color',([1 1 1]));figure; grid; imhist(L1); ylabel('Ilość pikseli', 'FontSize',15,'FontName','Arial CE') level = graythresh(L1); L2 = im2bw(L1,level); imshow(L2) GRAYTHRESH Compute global image threshold using Otsu's method. LEVEL = GRAYTHRESH(I) computes a global threshold (LEVEL) that can be used to convert an intensity image to a binary image with IM2BW. LEVEL is a normalized intensity value that lies in the range [0, 1]. GRAYTHRESH uses Otsu's method, which chooses the threshold to minimize the intraclass variance of the thresholded black and white pixels. Zadanie 1 Proszę wybrać dowolny obraz i na podstawie analizy histogramu spróbować dobrać optymalny próg binaryzacji. Czy dla każdego obrazu jest to możliwe? Następnie dobrać próg przy zastosowaniu algorytmu Otsu. Zadanie 2 Na podstawie analizy histogramu obrazu "cells1.bmp" proszę spróbować wybrać dwa progi (górny i dolny) tak, aby wyróżnić kontury komórek. Ćwiczenie należy wykonać metodą "prób i błędów". Przykład 3 Dodawanie dwóch obrazów monochromatycznych o takiej samej rozdzielczości [L1a,map1a] = imread('gory.bmp'); figure; imshow(L1a,map1a); figure; imshow(ind2gray(L1a,map1a)); L1a=double(ind2gray(L1a,map1a))/255; [L1b,map1b] = imread('drzewo.bmp'); figure;imshow(L1b,map1b) figure; imshow(ind2gray(L1b,map1b)); L1b=double(ind2gray(L1b,map1b))/255; L2a=L1a+L1b; figure; imshow(mat2gray(L2a)) MAT2GRAY Convert matrix to intensity image. I = MAT2GRAY(A,[AMIN AMAX]) converts the matrix A to the intensity image I. The returned matrix I contains values in the range 0.0 (black) to 1.0 (full intensity or white). AMIN and AMAX are the values in A that correspond to 0.0 and 1.0 in I. Values less than AMIN become 0.0, and values greater than AMAX become 1.0. I = MAT2GRAY(A) sets the values of AMIN and AMAX to the minimum and maximum values in A. Przykład 4 Dodawanie dwóch obrazów o różnej rozdzielczości: [L1a,map1a] = imread('Beaux.bmp'); L1a=ind2gray(L1a,map1a); figure; imshow(L1a); L1a=L1a(201:650,101:700); %wycięcie odpowiedniego fragmentu obrazu figure; imshow(L1a); [L1b,map1b] = imread('drzewo.bmp'); L1b=ind2gray(L1b,map1b); figure;imshow(L1b) L2a=L1a+L1b; figure; imshow(mat2gray(L2a)) Uwaga: Jeżeli obrazy różnią się rozmiarami, należy z większego obrazu wyciąć odpowiedni fragment. Przykład 5 Sposób 1 Mieszanie obrazów z różną wagą: [L1a,map1a] = imread('Beaux.bmp'); L1a=ind2gray(L1a,map1a); L1a=L1a(201:650,101:700); figure; imshow(L1a); [L1b,map1b] = imread('drzewo.bmp'); L1b=ind2gray(L1b,map1b); figure;imshow(L1b) L2a=imlincomb(0.3,L1a,0.7,L1b); % suma wag dodawanych obrazów musi być równa 1 figure; imshow(L2a) Sposób 2 Mieszanie dwóch obrazów z różną wagą (wagi zmieniają się co 1 sekundę: [L1a,map1a] = imread('Beaux.bmp'); L1a=ind2gray(L1a,map1a); L1a=L1a(201:650,101:700); figure; imshow(L1a); [L1b,map1b] = imread('drzewo.bmp'); L1b=ind2gray(L1b,map1b); figure;imshow(L1b); figure for i=0:0.05:1 L2=imlincomb(i,L1a,1-i,L1b); imshow(L2); title(['L1a',mat2str(i*100),'%',' + L1b',mat2str((1i)*100),'%']); pause(1) end Przykład 6 Funkcja "imadd" pozwala dodać stałą wartość do obrazu lub dodać dwa obrazy do siebie. Dodawanie wartości 80 do obrazu: L1 = imread('portret.jpg'); figure; imshow(L1); L2 = imadd(L1,80); figure; imshow(L2); Zadanie 3 Proszę dodać dwa dowolne obrazy za pomocą o warunku zgodności wymiarów macierzy. funkcji "imadd", pamiętając Przykład 7 Odejmowanie dwóch obrazów monochromatycznych (obraz ukryty): [L1a,map1a] = imread('Beaux.bmp'); L1a=ind2gray(L1a,map1a); L1a=L1a(201:650,101:700)>128; figure; imshow(L1a); [L1b,map1b] = imread('drzewo.bmp'); L1b=ind2gray(L1b,map1b); figure;imshow(L1b); L1c=0.05*double(L1a)/255+0.95*double(L1b)/255; figure; imshow(L1c); L2=mat2gray(L1c-0.95*double(L1b)/255); figure; imshow(L2); Zadanie 4 Proszę wykonać odejmowanie dwóch obrazów przy użyciu funkcji "imabsdiff". Następnie zmienić kolejność obrazów źródłowych i zaobserwować czy jest różnica w obrazie wynikowym. Zadanie 5 Proszę wypróbować odejmowanie dwóch obrazów przy "imsubtract". Czy zmiana kolejności obrazów źródłowych różnicę w obrazie wynikowym? użyciu pociąga funkcji za sobą Przykład 8 Mnożenie i dzielenie różnych obrazów ma niewielkie zastosowanie praktyczne. Operacje tego typu mogą być przydatne do odfiltrowywania zbędnej informacji (np: szumu). W fotografii krajobrazowej dalsze plany tracą wyrazistość ze względu na mgłę, która jest widoczna w kanale niebieskim. Mnożenie kanałów zielonego i czerwonego (za pomocą funkcji "immultiply") pozwoli na wyodrębnienie zieleni. L1=imread('gory.jpg'); figure;imshow(L1); L1r=double(L1(:,:,1))/255; figure;imshow(L1r); L1g=double(L1(:,:,2))/255; figure;imshow(L1g); L1b=double(L1(:,:,3))/255; figure;imshow(L1b); L2=immultiply(L1g,L1r); figure;imshow(L2,[]); Zadanie 6 Proszę zastosować dzielenie funkcji "imdivide". kanału zielonego przez niebieski za pomocą Przykład 9 Wyznaczanie minimum i maksimum z dwóch obrazów dla każdego z pikseli w odpowiadającym sobie położeniu: L1=imread('gory.jpg'); figure;imshow(L1); L1r=double(L1(:,:,1))/255; figure;imshow(L1r); L1g=double(L1(:,:,2))/255; figure;imshow(L1g); L1b=double(L1(:,:,3))/255; figure;imshow(L1b); L2a=max(L1g,L1b); L2b=min(L1g,L1b); figure; imshow(L2a); figure; imshow(L2b); Przykład 10 Sposób 1 Operacja logiczna NOT dla obrazu binarnego oraz monochromatycznego: [L1a,map1a] = imread('Beaux.bmp'); L1=ind2gray(L1a,map1a); figure;imshow(L1); L1a=L1>0.5; figure; imshow(L1a); L2a=~(L1a); figure;imshow(L2a); figure;imshow(bitcmp(uint8(L1*255),8)); Sposób 2 Dopełnienie obrazu uzyskane przy zastosowaniu funkcji "imcomplement": [L1a,map1a] = imread('Beaux.bmp'); L1=ind2gray(L1a,map1a); figure; imshow(L1); L2=imcomplement(L1); figure;imshow(L2); Sposób 3 Identyczny obraz wynikowy uzyskany przez odwrócenie palety "Grayscale": [L1a,map1a] = imread('Beaux.bmp'); L1=ind2gray(L1a,map1a); figure('Color', 'w'); imshow(L1); colormap(gray(256)); colorbar; figure('Color', 'w'); imshow(L1); colormap(flipud(gray(256))); colorbar; Przykład 11 Sposób 1 Iloczyn logiczny obrazów binarnych: L1a=imread('wykr_10.tif'); figure;imshow(L1a); L1b=imread('wykr_14.tif'); figure;imshow(L1b); L2=L1a&L1b; figure; imshow(L2); Sposób 2 L1a=imread('wykr_10.tif'); figure;imshow(L1a); L1b=imread('wykr_14.tif'); figure;imshow(L1b); L2=bitand(L1a,L1b); figure; imshow(L2); Zadanie 7 Bazując na powyższym przykładzie proszę wykonać operacje OR, XOR, SUB. Przykład 12 Iloczyn logiczny obrazów monochromatycznych: L1=imread('gory.jpg'); figure;imshow(L1); L1r=L1(:,:,1); figure;imshow(L1r); L1g=L1(:,:,2); figure;imshow(L1g); L1b=L1(:,:,3); figure;imshow(L1b); L2=bitand(L1r,L1g); figure; imshow(L2);