Instalacja. pip install opencv-python. run pip install opencv-contrib-python CZĘŚĆ II

Podobne dokumenty
Filtracja obrazu operacje kontekstowe

BIBLIOTEKA PROGRAMU R - BIOPS. Narzędzia Informatyczne w Badaniach Naukowych Katarzyna Bernat

Filtracja obrazu operacje kontekstowe

Operacje morfologiczne w przetwarzaniu obrazu

ANALIZA I PRZETWARZANIE OBRAZÓW

Diagnostyka obrazowa

9. OBRAZY i FILTRY BINARNE 9.1 Erozja, dylatacja, zamykanie, otwieranie

Cyfrowe przetwarzanie obrazów i sygnałów Wykład 7 AiR III

Implementacja filtru Canny ego

Diagnostyka obrazowa

Cyfrowe przetwarzanie obrazów i sygnałów Wykład 9 AiR III

Przekształcenia morfologiczne II i operacje na obrazach logicznych

Przetwarzanie obrazów rastrowych macierzą konwolucji

Analiza obrazów - sprawozdanie nr 3

Spośród licznych filtrów nieliniowych najlepszymi właściwościami odznacza się filtr medianowy prosty i skuteczny.

Grafika Komputerowa Wykład 2. Przetwarzanie obrazów. mgr inż. Michał Chwesiuk 1/38

Parametryzacja obrazu na potrzeby algorytmów decyzyjnych

Cyfrowe przetwarzanie obrazów. Dr inż. Michał Kruk

Cyfrowe przetwarzanie obrazów i sygnałów Wykład 10 AiR III

Cyfrowe przetwarzanie obrazów i sygnałów Wykład 8 AiR III

POB Odpowiedzi na pytania

Przetwarzanie obrazu

Przetwarzanie obrazów wykład 7. Adam Wojciechowski

Operacje przetwarzania obrazów monochromatycznych

Analiza obrazów. Segmentacja i indeksacja obiektów

Cyfrowe Przetwarzanie Obrazów i Sygnałów

CECHY BIOMETRYCZNE: ODCISK PALCA

PRZETWARZANIE SYGNAŁÓW

Przetwarzanie obrazu

SEGMENTACJA OBRAZU Wprowadzenie

Raport. Bartosz Paprzycki UMK 2009/2010

WYKŁAD 7. Obraz z wykrytymi krawędziami: gdzie 1 - wartość konturu, 0 - wartość tła.

Przekształcenia kontekstowe. Filtry nieliniowe Typowy przykład usuwania zakłóceń z obrazu

Filtracja splotowa obrazu

Przetwarzanie obrazów wykład 4

Detekcja twarzy w obrazie

Proste metody przetwarzania obrazu

maska 1 maska 2 maska 3 ogólnie

Reprezentacja i analiza obszarów

Filtracja nieliniowa obrazu

Analiza obrazów - sprawozdanie nr 2

Segmentacja przez detekcje brzegów

Metody komputerowego przekształcania obrazów

Laboratorium. Cyfrowe przetwarzanie sygnałów. Ćwiczenie 11. Filtracja sygnałów wizyjnych

Diagnostyka obrazowa

Grafika komputerowa. Dr inż. Michał Kruk

Detekcja kodów kreskowych w obrazach za pomocą filtrów gradientowych i transformacji morfologicznych

Filtracja liniowa (metody konwolucyjne, tzn. uwzględniające pewne otoczenie przetwarzanego piksla):

Segmentacja obrazu. Segmentacja obrazu

Metody kodowania wybranych cech biometrycznych na przykładzie wzoru naczyń krwionośnych dłoni i przedramienia. Mgr inż.

Grenlandia się topi badanie rozkładu kątów pomiędzy strumykami na lądolodzie na podstawie analizy obrazu

Diagnostyka obrazowa

Reprezentacja i analiza obszarów

Przekształcenia punktowe

WYKŁAD 3. Przykłady zmian w obrazie po zastosowaniu Uniwersalnego Operatora Punktowego

Cyfrowe przetwarzanie obrazów i sygnałów Wykład 3 AiR III

Zbigniew Sołtys - Komputerowa Analiza Obrazu Mikroskopowego 2016 część 7

Transformaty. Kodowanie transformujace

3. OPERACJE BEZKONTEKSTOWE

Diagnostyka obrazowa

Przetwarzanie obrazu

Diagnostyka obrazowa

Detekcja punktów zainteresowania

Analiza obrazu. wykład 7. Marek Jan Kasprowicz Uniwersytet Rolniczy 2009

Szacowanie wartości monet na obrazach.

Rozpoznawanie obrazów na przykładzie rozpoznawania twarzy

zna wybrane modele kolorów i metody transformacji między nimi zna podstawowe techniki filtracji liniowej, nieliniowej dla obrazów cyfrowych

Zygmunt Wróbel i Robert Koprowski. Praktyka przetwarzania obrazów w programie Matlab

Przetwarzanie obrazów wykład 6. Adam Wojciechowski

Diagnostyka obrazowa

Operacje morfologiczne

Analiza obrazu. wykład 4. Marek Jan Kasprowicz Uniwersytet Rolniczy 2009

Spis treści. Morfologia matematyczna. 1 Morfologia matematyczna 1.1 Dylacja 1.2 Erozja 1.3 Otwarcie i zamknięcie 1.

Wstęp do sieci neuronowych, wykład 03 Warstwy RBF, jednostka Adaline.

Diagnostyka obrazowa

Wykrywanie twarzy na zdjęciach przy pomocy kaskad

ALGORYTMY PRZETWARZANIA OBRAZÓW Projekt. Aplikacja przetwarzająca obrazy z możliwością eksportu i importu do programu MS Excel.

Komputerowe obrazowanie medyczne

Diagnostyka obrazowa

Joint Photographic Experts Group

Wyższa Szkoła Informatyki Stosowanej i Zarządzania

Odczytywanie i zapisywanie obrazów rastrowych do plików, operacje punktowe na tablicach obrazów

i ruchów użytkownika komputera za i pozycjonujący oczy cyberagenta internetowego na oczach i akcjach użytkownika Promotor: dr Adrian Horzyk

Detekcja kształtów i wybrane cechy obrazów konturowych

Przetwarzanie obrazów wykład 2

Laboratorium. Cyfrowe przetwarzanie sygnałów. Ćwiczenie 9. Przetwarzanie sygnałów wizyjnych. Politechnika Świętokrzyska.

Zbigniew Sołtys - Komputerowa Analiza Obrazu Mikroskopowego 2016 część 5

Cyfrowe przetwarzanie obrazów i sygnałów Wykład 2 AiR III

Politechnika Świętokrzyska. Laboratorium. Cyfrowe przetwarzanie sygnałów. Ćwiczenie 8. Filtracja uśredniająca i statystyczna.

POPRAWIANIE JAKOŚCI OBRAZU W DZIEDZINIE PRZESTRZENNEJ (spatial image enhancement)

Przetwarzanie obrazów. Grupy metod przetwarzania obrazu. Przetwarzanie jednopunktowe. Przetwarzanie jednopunktowe. Przetwarzanie jednopunktowe

FILTRACJE W DZIEDZINIE CZĘSTOTLIWOŚCI

Zastosowanie stereowizji do śledzenia trajektorii obiektów w przestrzeni 3D

Algorytmy decyzyjne będące alternatywą dla sieci neuronowych

Diagnostyka obrazowa

Szybka transformacja Fouriera (FFT Fast Fourier Transform)

Podstawy programowanie systemów wizyjnych InSight firmy Cognex. Środowisku InSight Explorer / Spreadshee

6. Algorytmy ochrony przed zagłodzeniem dla systemów Linux i Windows NT.

Antyaliasing w 1 milisekundę. Krzysztof Kluczek

Transkrypt:

Instalacja pip install opencv-python run pip install opencv-contrib-python CZĘŚĆ II

Przydatne Potrzebne importy: import cv2 import numpy as np Odczyt, zapis i wyświetlanie obrazu: img=cv2.imread('cell.jpg') cv2.imwrite( new_image.jpg', img) cv2.imshow('bin',img)

Operacje morfologiczne Operacje morfologiczne pozwalają przeprowadzić zaawansowaną analizę kształtów poszczególnych obiektów w obrazie oraz na wyznaczenie ich wzajemnej odległości. Ważną cechą tych przekształceń jest ich łączność, która pozwala na generowanie skomplikowanych algorytmów analizy obrazu: usuwanie szumu, izolowanie obiektów, ekstrakcja cech obiektów, rozdzielanie i łączenie elementów

Operacje morfologiczne: erozja Erozja jest operacją odwrotną do dylatacji; wartość każdego piksela zamieniana jest na wartość lokalnego minimum wszystkich wartości pikseli, które obejmuje jądro transformacji. Erozję najczęściej stosuje się do usunięcia usterek obrazu, przykładowo w postaci zaszumienia typu sól i pieprz (pojedyncze punkty znikają w wyniku erozji, zaś większe struktury prezentujące wartościową część obrazu pozostają).

Operacje morfologiczne: dylatacja Dylatacja stanowi splot obrazu ze zdefiniowanym jądrem; wartość każdego piksela zamieniania jest na wartość lokalnego maksimum wszystkich wartości pikseli, które obejmuje wspomniane jądro. Efektem dylatacji jest rozrost w obrazie wypełnionych (różnych ode 0) obszarów. Dylatacja powoduje rozszerzenie jasnych obszarów oraz wypełnianie zagłębień) a erozja ich zmniejszanie oraz likwidacje wypukłości. Ostateczny efekt działania obu operatorów zależy od wyboru jądra. Dylatację najczęściej stosuje się dla wyszukania połączonych składowych obrazu (dużych obszarów o podobnym poziomie intensywności lub barwie).

Erozja i dylatacja: obraz zbinaryzowany kernel = np.ones((5,5),np.uint8) #erozja erosion = cv2.erode(img,kernel,iterations = 1) #dylatacja dilatation = cv2.dilate(img,kernel,iterations = 1)

Erozja i dylatacja: obraz w skali szarości

Gradient morfologiczny Operacja gradientu morfologicznego polega na odjęciu od wyniku dylatacji obrazu (nieznacznie zredukowanego) wyniku erozji obrazu (nieznacznie powiększonego). Fakt odjęcia od obrazu powiększonego obrazu pomniejszonego pozwala zachować ciągłość w przebiegu krawędzi, a tym samym może być wstępem do segmentacji obiektów. Skutkiem jest pozostawienie w obrazie przebiegu krawędzi i konturów obrazu oryginalnego. W przypadku obrazu monochromatycznego zastosowanie gradientu pozwala uzyskać informację o szybkości zmian w poziomie intensywności sąsiadujących pikseli. gradient A = dilate A erode(a) najczęściej stosowana jest do ekstrakcji krawędzi jasnych obszarów, które w konsekwencji mogą być rozważane jako całe obiekty (lub fragmenty większych całości).

Otwarcie i zamknięcie Operację otwarcia (opening) i zamknięcia (closing) opierają się na złożeniu erozji i dylatacji, wykonanych sekwencyjnie: opening A = dilate erode A closing A = erode(dilate A ) Operacje te nie ograniczają się jedynie do obrazów binarnych: operacja zamknięcia na obrazie monochromatycznym pozwala na wyeliminowanie z obrazu wartości mniejszych od swoich sąsiadów, operacja otwarcia- na wyeliminowanie wartości większych od tych w sąsiadujących pikselach.

Otwarcie i zamknięcie Głównym zastosowaniem operacji otwarcia jest zliczanie obszarów w obrazach binarnych. Przykładowo określając próg dyskryminacji dla komórek w obrazie mikroskopowym, przed przystąpieniem do ich zliczania poprzez otwarcie, można oddzielić komórki znajdujące się w bezpośrednim sąsiedztwie.

Otwarcie i zamknięcie Operacja zamknięcia stosuje się w przetwarzaniu obrazów przedstawiających złączone komponenty, celem usunięcia ich nadmiarowej liczby (przykładowo usunięcie segmentów powstałych z zaszumienia obrazu). Wynik operacji zamknięcia jest zbliżony do wyniku erozji, a wynik otwarcia do wyniku dylatacji. Otwarcie i zamknięcie pozwalają jednak lepiej zachować pole obszaru.

Otwarcie i zamknięcie: obraz zbinaryzowany opening = cv2.morphologyex(img, cv2.morph_open, kernel) closing = cv2.morphologyex(img, cv2.morph_close, kernel)

Otwarcie i zamknięcie: obraz w skali szarości

TopHat i BlackHat Operatory tophat i blackhat służą odpowiednio ekstrakcji jasnych i ciemnych obszarów w obrazie (poziom jasności określany w odniesieniu do najbliższego otoczenia). Ekstrakcja obszarów jasnych odejmuje wynik operacji otwarcia (open) wykonanej na obrazie A od obrazu wejściowego A (nieprzetworzonego ) tophat A = A open A Ekstrakcja obszarów ciemnych: blackhat A = close A A podstawowym zastosowaniem obu operacji jest wyszczególnienie w obrazie obszarów charakteryzujących się zmianą poziomu jasności w stosunku do obiektu z którym sąsiadują lub są związane (często spotykane w przypadku obrazów mikroskopowych)

TopHat i BlackHat: obraz zbinaryzowany tophat = cv2.morphologyex(img, cv2.morph_tophat, kernel) blackhat = cv2.morphologyex(img, cv2.morph_blackhat, kernel)

TopHat i BlackHat: obraz w skali szarości

Dyskretna Transformata Fouriera Funkcja cv2.dft implementuje algorytm szybkiej transformaty Fouriera zarówno dla sygnałów jedno- jak i dwuwymiarowych (w przypadku obrazów możliwe jest zarówno policzenie dyskretnej transformaty Fouriera dla całego obrazu jako sygnału 2D jak również potraktowanie każdego wiersza osobno jako sygnału jednowymiarowego).

Dyskretna Transformata Fouriera (DFT) img = cv2.imread('cell.jpg',0) f = np.fft.fft2(img) fshift = np.fft.fftshift(f) magnitude_spectrum = 20*np.log(np.abs(fshift))

Poszukiwanie wzorców (Template matching) Template matching to metoda wyszukiwania i znajdowania położenia zdefiniowanego wzorca (szablonu) w większym obrazie. W bibliotece OpenCV służy do tego funkcja cv2.matchtemplate(), która przesuwa szablon nad obrazem wejściowym (jak dla splotu maski i obrazu) z równoczesnym porównaniem szablonu i badanego fragmentu obrazu wejściowego.

Poszukiwanie wzorców (Template Matching)

Poszukiwanie wzorców (Template Matching) import cv2 import numpy as np from matplotlib import pyplot as plt img_rgb = cv2.imread('cell.jpg') img_gray = cv2.cvtcolor(img_rgb, cv2.color_bgr2gray) template = cv2.imread('cell_temp.jpg',0) w, h = template.shape[::-1] res = cv2.matchtemplate(img_gray,template,cv2.tm_ccoeff_normed) threshold = 0.8 loc = np.where( res >= threshold) for pt in zip(*loc[::-1]): cv2.rectangle(img_rgb, pt, (pt[0] + w, pt[1] + h), (0,0,255), 2) cv2.imwrite('res2.png',img_rgb)

Poszukiwanie wzorców (Template Matching)

Transformata Hougha (wykrywanie okręgów) W matematyce koło jest reprezentowane równaniem: (x x 0 ) 2 +(y y 0 ) 2 = r 2 gdzie: (x 0,y 0 ) reprezentuje współrzędne środka okręgu, zaś r jego promień. Równanie to zawiera 3 parametry, stąd obliczenie go wprost z transformaty Hougha wymagałoby implementacji silnika 3D. Biblioteka OpenCV do poszukiwania okręgów wykorzystuje metodę gradientową opartą na informacji o przebiegu krawędzi: cv2.houghcircles()

Transformata Hougha (wykrywanie okręgów)

Transformata Hougha (wykrywanie okręgów)

Transformata Hougha (wykrywanie okręgów) import cv2 import numpy as np img = cv2.imread('cell.jpg',0) img = cv2.medianblur(img,5) cimg = cv2.cvtcolor(img,cv2.color_gray2bgr) circles = cv2.houghcircles(img,cv2.hough_gradient,1,20, param1=100,param2=50,minradius=15,maxradius=50) circles = np.uint16(np.around(circles)) for i in circles[0,:]: # draw the outer circle cv2.circle(cimg,(i[0],i[1]),i[2],(0,255,0),2) # draw the center of the circle cv2.circle(cimg,(i[0],i[1]),2,(0,0,255),3) cv2.imshow('detected circles',cimg) cv2.imwrite('circles5.jpg', cimg) cv2.waitkey(0) cv2.destroyallwindows()

Segmentacja (watershed)

img = cv2.imread('cell_gray.jpg') gray= cv2.cvtcolor(img,cv2.color_bgr2gray) ret, thresh = cv2.threshold(gray,0,255,cv2.thresh_binary_inv+cv2.thresh_otsu) kernel = np.ones((3,3),np.uint8) # noise removal opening = cv2.morphologyex(thresh,cv2.morph_open,kernel, iterations = 2) sure_bg = cv2.dilate(opening,kernel,iterations=3) # sure background area # Finding sure foreground area dist_transform = cv2.distancetransform(opening,cv2.dist_l2,5) ret, sure_fg = cv2.threshold(dist_transform,0.7*dist_transform.max(),255,0) sure_fg = np.uint8(sure_fg) # Finding unknown region unknown = cv2.subtract(sure_bg,sure_fg) ret, markers = cv2.connectedcomponents(sure_fg) # marker labelling # Add one to all labels so that sure background is not 0, but 1 markers = markers+1 markers[unknown==255] = 0 # now, mark the region of unknown with zero markers = cv2.watershed(img,markers) img[markers == -1] = [255,0,0] cv2.imwrite('wshed.jpg',img)

Rekonstrukcja obrazu (inpainting) Rekonstrukcja metodą inpaintingu przeprowadzana jest w przypadku zdjęć zawierających usterki, mogące wynikać choćby z zabrudzenia obiektywu lub uszkodzeń mechanicznych samego zdjęcia. Metoda ta opiera się na pobraniu informacji o kolorze i teksturze zniszczonego fragmentu z jego krawędzi, a w dalszej kolejności powieleniu i wymieszaniu ich wartości. Biblioteka OpenCV daje możliwość zdefiniowania promienia wokół odtwarzanego piksela, określającego zakres pikseli z których informacja będzie rekonstruowana.

Rekonstrukcja obrazu (inpainting) Metoda inpaintingu sprawdza się jedynie dla stosunkowo niewielkich obszarów uszkodzenia i z niezbyt zróżnicowaną teksturą (w przeciwnym razie rekonstrukcji może towarzyszyć efekt rozmycia). Metoda nie sprawdzi się również jeśli w brakującym fragmencie znajduje się cała struktura (brak możliwości odtworzenia z krawędzi obszaru). Biblioteka OpenCV oferuje 2 algorytmy inpaintingu dostępne jako argumenty funkcji cv2.inpaint(): INPAINT_TELEA INPAINT_NS

Rekonstrukcja obrazu: INPAINT_TELEA (2004) Algorytm oparty jest o Technikę Szybkiego Marszu (Fast Marching Technique) Dla każdego obszaru który ma być zrekonstruowany, algorytm startuje na granicy zdefiniowanego sąsiedztwa i w kolejnych krokach wypełnia do środka wszystkie brakujące obszary. Nowa wartość każdego piksela stanowi średnią ważoną wartości pikseli w otoczeniu o małym promieniu. Kluczowym czynnikiem jest wybór wag: największe wagi przyporządkowywane są pikselom w bezpośrednim sąsiedztwie wypełnianego piksela, oraz pikselom wyznaczającym kontur całego obszaru. Po zrekonstruowaniu wartości piksela algorytm przesuwa się do kolejnego, metodą szybkiego marszu. Metoda FMM zapewnia, iż w pierwszej kolejności rekonstruowane są piksele leżące w bezpośrednim sąsiedztwie tych o znanej wartości

Rekonstrukcja obrazu: INPAINT_NS (2001) Metoda Naviera-Stokesa Algorytm oparty jest na dynamice płynów i wykorzystuje równania różniczkowe cząstkowe. Najpierw wędruje wzdłuż krawędzi od znanych regionów do nieznanych regionów (warunek ciągłości krawędzi). Algorytm analizuje linie łączące punkty o tej samej intensywności, dopasowując wektory gradientowe na granicy odtwarzanego obszaru (wykorzystanie metod z dynamiki płynów). Po ich uzyskaniu kolor jest wypełniany w celu zmniejszenia minimalnej wariancji w tym obszarze

Rekonstrukcja obrazu (inpainting)

Rotacja rows,cols = img.shape M = cv2.getrotationmatrix2d((cols/2,rows/2),45,1) dst = cv2.warpaffine(img,m,(cols,rows))

Deskryptory W OpenCV wykonuje to funkcja cv2.goodfeaturestotrack(): cv2.goodfeaturestotrack(img, N, quality_level, euclid_dist) gdzie: img obraz wejściowy (w skali szarości) N- liczba poszukiwanych rogów quality_level współczynnik jakości z przedziału (0,1}> Najczęściej przyjmuje się wartości z przedziału (0.01,0.1) euclid_dist minimalna odległość euklidesowa pomiędzy znalezionymi rogami Funkcja ta pozwala obliczyć operatory pochodnych, a następnie w toku analizy wybrać z ich listy drobne punkty do śledzenia oraz zdefiniować ich liczbę (N).

Deskryptory

Deskryptory import numpy as np import cv2 from matplotlib import pyplot as plt img = cv2.imread('squares2.jpg') gray = cv2.cvtcolor(img,cv2.color_bgr2gray) corners = cv2.goodfeaturestotrack(gray,25,0.01,10) corners = np.int0(corners) for i in corners: x,y = i.ravel() cv2.circle(img,(x,y),3,255,-1) cv2.imshow('bin',img) cv2.imwrite('descriptors.jpg',img)