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);

Podobne dokumenty