Komputerowa analiza obrazu
Transkrypt
Komputerowa analiza obrazu
Komputerowa analiza obrazu Laboratorium 3 Przykład 1 Dodanie stałej wartości do obrazu monochromatycznego(zwiększenie jasności): L1=imread('portret.jpg'); figure; imshow(L1); L2 = uint8(double(L1) + 50); figure; imshow(L2) lub: L1=imread('portret.jpg'); L1=double(L1)/255; figure; imshow(L1); L2=(L1)+0.3; figure; imshow(L2) Jak w prosty sposób uzyskać negatyw zdjęcia? Przykład 2 Część informacji utracona po rozjaśnieniu obrazu metodą z nasyceniem: L1=imread('portret.jpg'); L1=double(L1)/255; figure; imshow(L1); L2=(L1)+0.5; figure; imshow(L2); L3=((L2>1)-0.5); figure; imshow(L3) Przykład 3 Logarytmowanie obrazu: Do wykonania operacji logarytmowania obrazu należy użyć funkcji "log". Proszę pamiętać o dodaniu wartości 1 (ze względu na nieokreśloność funkcji w 0). L1=imread('portret.jpg'); figure; imshow(L1); L1=double(L1); L2=log([L1+1]); figure; imshow(L2,[]) Zadanie 1 Proszę wykonać następujące przekształcenia obrazu: • odejmowanie stałej wartości od każdego z pikseli obrazu (na obrazie monochromatycznym oraz barwnym), • pierwiastkowanie, • potęgowanie (obydwa na obrazie "portret.jpg"). Uwagi: Podczas potęgowania posłużmy się operatorem kropkowym, by operację wykonać zgodnie z zasadami rachunku tablicowego. Przykład 4 Trójkątna charakterystyka luminancji obrazu (jasność rośnie w przedziale od 0 do 128, następnie maleje) powoduje tzw. efekt solaryzacji. L1=imread('portret.jpg'); figure; imshow(L1); map=[gray(128); flipud(gray(128))]; figure; imshow(L1, map); Przykład 5 Histogram obrazu o niskim kontraście: L1=imread('portret.jpg'); figure; imshow(L1); [y,x]=imhist(L1); figure; bar(x,y) Zadanie 2 Proszę rozjaśnić obraz „portret.jpg”, a następnie go przyciemnić. Porównać histogramy obrazów po przekształceniu. Uwaga! Wykonaj zadanie używając reprezentacji obrazu za pomocą double oraz uint8. Jakie są różnice i z czego wynikają? Przykład 6 Normalizacja jasności w obrazie monochromatycznym: L1=imread('portret.jpg'); figure; imshow(L1); L2=imadjust(L1,stretchlim(L1),[]); figure; imshow(L2) IMADJUST Adjust image intensity values or colormap. J = IMADJUST(I,[LOW_IN HIGH_IN],[LOW_OUT HIGH_OUT],GAMMA) maps the values in intensity image I to new values in J such that values between LOW_IN and HIGH_IN map to values between LOW_OUT and HIGH_OUT. Values below LOW_IN and above HIGH_IN are clipped; that is, values below LOW_IN map to LOW_OUT, and those above HIGH_IN map to HIGH_OUT. You can use an empty matrix ([]) for [LOW_IN HIGH_IN] or for [LOW_OUT HIGH_OUT] to specify the default of [0 1]. GAMMA specifies the shape of the curve describing the relationship between the values in I and J. If GAMMA is less than 1, the mapping is weighted toward higher (brighter) output values. If GAMMA is greater than 1, the mapping is weighted toward lower (darker) output values. If you omit the argument, GAMMA defaults to 1 (linear mapping). STRETCHLIM Find limits to contrast stretch an image. LOW_HIGH = STRETCHLIM(I,TOL) returns a pair of intensities that can be used by IMADJUST to increase the contrast of an image. Zadanie 3 Proszę wyświetlić histogram obrazu po przeprowadzeniu normalizacji i porównać go z histogramem obrazu źródłowego Zadanie 4 Na podstawie analizy histogramów dokonać korekcji obrazów „3.jpg” oraz „4.jpg”. UWAGA: Sprawdź efekty po wykonaniu L2=imadjust(L1,stretchlim(L1),[0.5 1]); oraz L2=imadjust(L1,stretchlim(L1),[0 0.5]); Przykład 7 Normalizacja jasności obrazu ze zmiennym współczynnikiem gamma modulacji (γ=0.6 oraz 2.2). Obraz źródłowy charakteryzował się słabym kontrastem. Poziomy szarości zawierały się w granicach [in_low, in_high]=[0.3 0.7]. L1=imread('rtg.jpg'); figure; imshow(L1); [y,x]=imhist(L1); figure; bar(x,y); L2a=imadjust(L1,[0.3 0.7],[],0.6); figure; imshow(L2a); [y,x]=imhist(L2a); figure; bar(x,y); L2a=imadjust(L1,[0.3 0.7],[],2.2); figure; imshow(L2a); [y,x]=imhist(L2a); figure; bar(x,y); Zadanie 5 Wypróbować tę operację na obrazie „portret.jpg” ustalając zakres jasności wykorzystany w obrazie źródłowym na podstawie histogramu. Przykład 8 Wyrównanie (spłaszczenie, linearyzacja) histogramu rzeczywistego obrazu monochromatycznego: L1=imread('portret.jpg'); figure; imshow(L1); figure; set(gcf,'Color',([1 1 1])); imhist(L1); L2=histeq(L1); figure; imshow(L2); figure; set(gcf,'Color',([1 1 1])); imhist(L2) Przykład 9 Wyrównanie histogramu obrazu barwnego z wyświetleniem histogramów kanału czerwonego przed i po wyrównaniu: [L1,map1]=imread('Victoire.tif'); L1=ind2rgb(L1,map1); figure; imshow(L1); L1r=L1(:,:,1); L1g=L1(:,:,2); L1b=L1(:,:,3); figure; [x,y]=hist(L1r(:)); bar(y,x,1/255); xlabel('Nasycenie koloru czerwonego','FontSize',15,'FontName','Arial CE'); ylabel('Ilość pikseli[/]','FontSize',15,'FontName','Arial CE'); L2r=histeq(L1r); L2g=histeq(L1g); L2b=histeq(L1b); figure; imshow(cat(3,L2r,L2g,L2b)); figure; [x,y]=imhist(L2r(:)); bar(y,x,1/255); xlabel('Nasycenie koloru czerwonego','FontSize',15,'FontName','Arial CE'); ylabel('Ilość pikseli[/]','FontSize',15,'FontName','Arial CE'); Zadanie 6 Proszę zaobserwować różnice na innych kanałach barw. Przykład 10 Tworzenie maski binarnej fragmentu obrazu. Fragment został wybrany za pomocą prostokąta, dla którego współrzędne wierzchołków (x,y) wskazano dzięki funkcji "roipoly". Współrzędne są wprowadzane kolejno, począwszy od prawego górnego narożnika. L1=imread('las.bmp'); figure; imshow(L1); x=[150 300 300 150]; y=[400 400 200 200]; L2=roipoly(L1,x,y); figure; imshow(L2) Zadanie 7 Proszę wyciąć z obrazu fragment o kształcie dowolnego wielokąta. Przykład 11 Wycięcie fragmentu wskazanego za pomocą myszki i skopiowanie go do nowego okna: [L1,map]=imread('las.bmp'); L1=ind2gray(L1,map); figure; imshow(L1); L2=imcrop(L1); figure; imshow(L2)