OpenCV 3. Komputerowe rozpoznawanie obrazu w C++ przy użyciu biblioteki OpenCV - ebook
OpenCV 3. Komputerowe rozpoznawanie obrazu w C++ przy użyciu biblioteki OpenCV - ebook
Komputerowe rozpoznawanie obrazów przechodzi dziś fazę burzliwego rozwoju. Przyczyniają się do tego ogromna popularność cyfrowych aparatów fotograficznych, wielka liczba grafik zgromadzonych w obszernych internetowych bazach danych, a przede wszystkim coraz doskonalsze algorytmy przetwarzania obrazu. W rozwijaniu tej technologii wielką rolę odegrała biblioteka OpenCV, usprawniając pracę setek tysięcy ludzi. OpenCV 3.x ułatwia efektywne rozwijanie projektów dzięki opartej na języku C++ spójnej architekturze, która doskonale działa na wielu platformach.
Ta książka, przeznaczona dla osób znających język C++, jest praktycznym wprowadzeniem do otwartej biblioteki OpenCV w wersji 3.x. Zawiera też podstawowe informacje na temat komputerowego rozpoznawania obrazu, co powinno ułatwić efektywne posługiwanie się tą biblioteką. Sama biblioteka OpenCV została przedstawiona w sposób umożliwiający bardzo szybkie rozpoczęcie pracy. Książka ułatwia naturalne zrozumienie działania algorytmów, dzięki czemu projektowanie i debugowanie aplikacji nie powinno sprawiać problemów. W ten sposób książka ta staje się świetnym przygotowaniem do zgłębienia bardziej zaawansowanych zagadnień komputerowego rozpoznawania obrazu i uczenia maszynowego.
Najważniejsze zagadnienia:
- Przegląd biblioteki OpenCV i zawarte w niej funkcje
- Praca z plikami obrazów, filmów i danych oraz przekształcanie obrazów
- Ważniejsze algorytmy do pracy na obrazach
- Punkty kluczowe: wykrywanie i filtrowanie
- Trójwymiarowe widzenie, ruch, określanie pozycji
- Uczenie maszyn w OpenCV
OpenCV: poznaj i stosuj algorytmy przetwarzania obrazów!
Adrian Kaehler jest naukowcem i założycielem start-upów. Zajmuje się uczeniem maszynowym, modelowaniem statystycznym i komputerowym rozpoznawaniem obrazu. Pracuje w Intel Corporation i w Laboratorium Sztucznej Inteligencji Uniwersytetu Stanforda. Współzakładał Silicon Valley Deep Learning Group.
Gary Rost Bradski jest naukowcem i konsultantem. Zajmuje się robotyką, uczeniem maszynowym i komputerowym rozpoznawaniem obrazów. Pracuje w Laboratorium Sztucznej Inteligencji Uniwersytetu Stanforda. Współtworzył takie biblioteki jak Open Source Computer Vision Library, Machine Learning Library i Probabilistic Network Library (PNL).
Spis treści
Wstęp (15)
- Przeznaczenie książki (15)
- Adresaci książki (16)
- Czym nie jest ta książka (17)
- O przykładowych programach (17)
- Warunki (17)
- Jak najlepiej korzystać z tej książki (18)
- Konwencje typograficzne (19)
- Podziękowania (20)
- Podziękowania za pomoc przy tworzeniu biblioteki OpenCV (20)
- Podziękowania za pomoc przy pisaniu książki (21)
- Kilka słów od Adriana (21)
- Kilka słów od Gary'ego (22)
1. Wprowadzenie (25)
- Czym jest OpenCV? (25)
- Kto używa biblioteki OpenCV? (26)
- Czym jest komputerowe rozpoznawanie obrazu? (27)
- Pochodzenie biblioteki OpenCV (30)
- Schemat blokowy OpenCV (31)
- Przyspieszanie działania biblioteki OpenCV za pomocą IPP (32)
- Do kogo należy OpenCV? (33)
- Pobieranie i instalowanie OpenCV (33)
- Instalacja (34)
- Pobieranie najnowszej wersji OpenCV przez Git (36)
- Kompletna dokumentacja OpenCV (37)
- Dokumentacja dołączona do biblioteki (37)
- Dokumentacja internetowa i strona wiki (37)
- Repozytorium kodu od społeczności (39)
- Pobieranie i kompilowanie modułów z repozytorium opencv_contrib (40)
- Przenośność (40)
- Podsumowanie (41)
- Ćwiczenia (42)
2. Wprowadzenie do OpenCV (43)
- Pliki dołączane (43)
- Zasoby (44)
- Pierwszy program - wyświetlanie obrazu (44)
- Drugi program - wideo (47)
- Przegląd (48)
- Prosta transformacja (52)
- Trochę bardziej skomplikowana transformacja (53)
- Dane z kamery (55)
- Zapisywanie w pliku AVI (56)
- Podsumowanie (57)
- Ćwiczenia (58)
3. Typy danych OpenCV (59)
- Wiadomości podstawowe (59)
- Typy danych OpenCV (59)
- Przegląd podstawowych typów danych (60)
- Typy podstawowe - szczegóły (61)
- Obiekty pomocnicze (68)
- Funkcje pomocnicze (75)
- Struktury szablonowe (81)
- Podsumowanie (82)
- Ćwiczenia (83)
4. Obrazy i duże typy tablicowe (85)
- Pamięć dynamiczna i zmienna (85)
- Klasa cv::Mat - n-wymiarowe tablice gęste (85)
- Tworzenie tablicy (86)
- Indywidualny dostęp do elementów tablicy (90)
- N-arny iterator tablicowy - NAryMatIterator (93)
- Dostęp do elementów tablicy według bloków (95)
- Wyrażenia macierzowe - algebra i klasa cv::Mat (97)
- Rzutowanie nasyceniowe (98)
- Co jeszcze potrafią tablice? (99)
- Klasa cv::SparseMat - tablice rzadkie (100)
- Dostęp do elementów tablicy rzadkiej (101)
- Funkcje dostępne tylko dla tablic rzadkich (103)
- Struktury szablonowe dla dużych typów tablicowych (104)
- Podsumowanie (106)
- Ćwiczenia (106)
5. Operacje na tablicach (109)
- Co jeszcze można zrobić z tablicami? (109)
- cv::abs() (112)
- cv::absdiff() (113)
- cv::add() (113)
- cv::addWeighted() (113)
- cv::bitwise_and() (115)
- cv::bitwise_not() (115)
- cv::bitwise_or() (116)
- cv::bitwise_xor() (116)
- cv::calcCovarMatrix() (116)
- cv::cartToPolar() (118)
- cv::checkRange() (119)
- cv::compare() (119)
- cv::completeSymm() (120)
- cv::convertScaleAbs() (120)
- cv::countNonZero() (121)
- cv::cvarrToMat() (121)
- cv::dct() (122)
- cv::dft() (122)
- cv::cvtColor() (123)
- cv::determinant() (126)
- cv::divide() (127)
- cv::eigen() (127)
- cv::exp() (128)
- cv::extractImageCOI() (128)
- cv::flip() (128)
- cv::gemm() (128)
- cv::getConvertElem() i cv::getConvertScaleElem() (129)
- cv::idct() (130)
- cv::idft() (130)
- cv::inRange() (130)
- cv::insertImageCOI() (131)
- cv::invert() (131)
- cv::log() (132)
- cv::LUT() (132)
- cv::Mahalanobis() (133)
- cv::max() (133)
- cv::mean() (135)
- cv::meanStdDev() (135)
- cv::merge() (136)
- cv::min() (136)
- cv::minMaxIdx() (137)
- cv::minMaxLoc() (137)
- cv::mixChannels() (138)
- cv::mulSpectrums() (140)
- cv::multiply() (140)
- cv::mulTransposed() (140)
- cv::norm() (141)
- cv::normalize() (142)
- cv::perspectiveTransform() (143)
- cv::phase() (144)
- cv::polarToCart() (145)
- cv::pow() (145)
- cv::randu() (145)
- cv::randn() (146)
- cv::randShuffle() (146)
- cv::reduce() (147)
- cv::repeat() (148)
- cv::scaleAdd() (148)
- cv::setIdentity() (148)
- cv::solve() (149)
- cv::solveCubic() (150)
- cv::solvePoly() (150)
- cv::sort() (151)
- cv::sortIdx() (151)
- cv::split() (151)
- cv::sqrt() (152)
- cv::subtract() (153)
- cv::sum() (153)
- cv::trace() (153)
- cv::transform() (154)
- cv::transpose() (154)
- Podsumowanie (154)
- Ćwiczenia (155)
6. Rysowanie i pisanie (157)
- Rysowanie (157)
- Linie i wypełnione wielokąty (157)
- Czcionki i tekst (163)
- Podsumowanie (165)
- Ćwiczenia (166)
7. Funktory w OpenCV (167)
- Obiekty, które "coś" robią (167)
- Analiza składowych głównych - cv::PCA (167)
- Rozkład według wartości osobliwych - cv::SVD (170)
- Generator liczb losowych - cv::RNG (173)
- Podsumowanie (175)
- Ćwiczenia (176)
8. Pliki obrazów, filmów i danych (179)
- HighGUI - przenośny zestaw narzędzi GUI (179)
- Praca z plikami obrazów (180)
- Ładowanie i zapisywanie obrazów (181)
- Uwaga na temat kodeków (183)
- Kompresja i dekompresja (183)
- Praca z plikami wideo (184)
- Odczytywanie wideo za pomocą obiektu cv::VideoCapture (184)
- Zapisywanie wideo za pomocą obiektu cv::VideoWriter (190)
- Zapisywanie danych (191)
- Zapisywanie danych w obiekcie cv::FileStorage (191)
- Odczytywanie danych z obiektu cv::FileStorage (193)
- cv::FileNode (194)
- Podsumowanie (197)
- Ćwiczenia (197)
9. Okna wieloplatformowe i macierzyste (201)
- Praca z oknami (201)
- Macierzysty graficzny interfejs użytkownika HighGUI (201)
- Praca z biblioteką Qt (212)
- Integracja OpenCV z kompletnymi bibliotekami GUI (221)
- Podsumowanie (233)
- Ćwiczenia (234)
10. Filtry i sploty (235)
- Informacje ogólne (235)
- Zanim zaczniesz (235)
- Filtry, jądra i splot (235)
- Ekstrapolacja krawędzi i warunki brzegowe (236)
- Operacje graniczne (240)
- Algorytm Otsu (242)
- Zmienna wartość graniczna (243)
- Wygładzanie (245)
- Proste rozmazanie i filtr prostokątny (246)
- Filtr medianowy (247)
- Filtr Gaussa (248)
- Filtr bilateralny (250)
- Pochodne i gradienty (251)
- Pochodna Sobela (251)
- Filtr Scharra (253)
- Laplasjan (254)
- Morfologia obrazu (255)
- Dylatacja i erozja (257)
- Ogólna funkcja morfologiczna (260)
- Otwieranie i zamykanie (260)
- Gradient morfologiczny (263)
- Top Hat i Black Hat (265)
- Tworzenie własnego jądra (267)
- Splot z dowolnym filtrem liniowym (268)
- Stosowanie ogólnego filtra przez funkcję cv::filter2D() (269)
- Stosowanie ogólnego filtra rozdzielnego za pomocą funkcji cv::sepFilter2D() (270)
- Funkcje do tworzenia jąder (270)
- Podsumowanie (271)
- Ćwiczenia (271)
11. Ogólne przekształcenia obrazu (277)
- Wprowadzenie (277)
- Rozciąganie, kurczenie, zniekształcanie i obracanie (277)
- Jednorodna zmiana rozmiaru (278)
- Piramidy obrazów (279)
- Mapowanie niejednorodne (282)
- Przekształcenia afiniczne (285)
- Przekształcenie perspektywiczne (289)
- Ogólne odwzorowania (291)
- Odwzorowania biegunowe (292)
- Współrzędne logarytmiczno-biegunowe (294)
- Odwzorowania arbitralne (297)
- Renowacja obrazów (298)
- Inpainting (299)
- Usuwanie szumów (300)
- Wyrównywanie histogramu (303)
- cv::equalizeHist() - wyrównywanie kontrastu (304)
- Podsumowanie (305)
- Ćwiczenia (306)
12. Analiza obrazu (307)
- Wprowadzenie (307)
- Dyskretna transformacja Fouriera (307)
- cv::dft() - dyskretna transformacja Fouriera (308)
- cv::idft() - odwrotna dyskretna transformacja Fouriera (310)
- cv::mulSpectrums() - mnożenie widm (311)
- Splot przy użyciu dyskretnej transformacji Fouriera (311)
- cv::dct() - dyskretna transformacja cosinusowa (312)
- cv::idct() - odwrotna dyskretna transformacja cosinusowa (313)
- Obrazy całkowe (314)
- cv::integral() - obliczanie standardowego obrazu całkowego (316)
- cv::integral() - suma kwadratowa (316)
- cv::integral() - suma nachylona (317)
- Detektor krawędzi Canny'ego (317)
- cv::Canny() (319)
- Transformacja Hougha (319)
- Transformacja liniowa Hougha (319)
- Transformacja kołowa Hougha (323)
- Transformacja odległościowa (327)
- cv::distanceTransform() - transformacja odległościowa bez etykiet (327)
- cv::distanceTransform() - transformacja odległościowa z etykietami (328)
- Segmentacja (329)
- Algorytm flood fill (329)
- Algorytm wododziałowy (332)
- Algorytm Grabcuts (334)
- Metoda segmentacji mean-shift (336)
- Podsumowanie (338)
- Ćwiczenia (338)
13. Histogramy i szablony (341)
- Reprezentacja histogramów w OpenCV (344)
- cv::calcHist() - tworzenie histogramu z danych (344)
- Podstawowe operacje na histogramach (346)
- Normalizacja histogramu (347)
- Próg histogramu (347)
- Znajdowanie najbardziej zapełnionego przedziału (347)
- Porównywanie histogramów (349)
- Przykłady użycia histogramów (351)
- Zaawansowane metody pracy z histogramami (354)
- Algorytm EMD (354)
- Rzutowanie wstecz (358)
- Dopasowywanie szablonów (362)
- Metoda porównywania kwadratu różnicy - cv::TM_SQDIFF (363)
- Znormalizowana metoda porównywania kwadratu różnicy - cv::TM_SQDIFF_NORMED (364)
- Metody korelacji krzyżowej - cv::TM_CCORR (364)
- Znormalizowana metoda korelacji krzyżowej - cv::TM_CCORR_NORMED (364)
- Metody dopasowywania współczynnika korelacji - cv::TM_CCOEFF (364)
- Znormalizowana metoda dopasowywania współczynnika korelacji - cv::TM_CCOEFF_NORMED (365)
- Podsumowanie (367)
- Ćwiczenia (368)
14. Kontury (371)
- Znajdowanie konturów (371)
- Hierarchie konturów (372)
- Rysowanie konturów (376)
- Przykład rysowania konturów (377)
- Inny przykład rysowania konturów (378)
- Szybka analiza komponentów połączonych (380)
- Inne zastosowania konturów (382)
- Aproksymacja wielokątów (382)
- Geometria i różne rodzaje sumowania (383)
- Testy geometryczne (389)
- Dopasowywanie konturów i obrazów (390)
- Momenty (390)
- Więcej o momentach (392)
- Dopasowywanie a momenty Hu (395)
- Porównywanie kształtów za pomocą algorytmu Shape Context (396)
- Podsumowanie (400)
- Ćwiczenia (401)
15. Odejmowanie tła (403)
- Wiadomości podstawowe (403)
- Wady operacji odejmowania tła (404)
- Modelowanie sceny (405)
- Wycinek pikseli (405)
- Różnicowanie klatek (408)
- Metoda uśredniania tła (409)
- Akumulowanie średnich, wariancji i kowariancji (414)
- Bardziej zaawansowana metoda odejmowania tła (422)
- Struktury (425)
- Poznawanie tła (426)
- Nauka w obecności ruchomych obiektów pierwszego planu (428)
- Różnicowanie tła - znajdowanie obiektów pierwszego planu (429)
- Przykład użycia modelu tła opartego na księgach kodów (430)
- Kilka dodatkowych uwag na temat modeli opartych na księgach kodów (430)
- Komponenty połączone dla czyszczenia pierwszego planu (431)
- Szybki test (434)
- Porównanie dwóch metod rozpoznawania tła (436)
- Implementacja techniki odejmowania tła w OpenCV (437)
- Klasa bazowa cv::BackgroundSubtractor (437)
- Metoda Kaewtrakulponga i Bowdena (438)
- Metoda Zivkovica (439)
- Podsumowanie (442)
- Ćwiczenia (442)
16. Punkty kluczowe i deskryptory (445)
- Punkty kluczowe i podstawy śledzenia (445)
- Znajdowanie rogów (446)
- Wprowadzenie do przepływu optycznego (450)
- Rzadki przepływ optyczny - metoda Lucasa-Kanade'a (451)
- Uogólnione punkty kluczowe i deskryptory (461)
- Przepływ optyczny, śledzenie i rozpoznawanie (462)
- Jak biblioteka OpenCV obsługuje punkty kluczowe i deskryptory - przypadek ogólny (463)
- Podstawowe metody wykrywania punktów kluczowych (474)
- Filtrowanie punktów kluczowych (512)
- Metody dopasowywania (513)
- Wyświetlanie wyników (519)
- Podsumowanie (521)
- Ćwiczenia (522)
17. Śledzenie (525)
- Pojęcia dotyczące śledzenia (525)
- Gęsty przepływ optyczny (526)
- Algorytm rozwinięcia wielomianu Farnebäcka (527)
- Algorytm Dual TV-L1 (529)
- Algorytm Simple Flow (533)
- Algorytmy mean-shift i Camshift (536)
- Algorytm mean-shift (537)
- Algorytm Camshift (540)
- Szablony ruchu (541)
- Estymatory (548)
- Filtr Kalmana (549)
- Kilka słów na temat rozszerzonego filtra Kalmana (564)
- Podsumowanie (565)
- Ćwiczenia (565)
18. Modele kamery i metody kalibracji (567)
- Model kamery (568)
- Podstawy geometrii rzutowej (570)
- Transformacja Rodriguesa (572)
- Zniekształcenia soczewek (573)
- Kalibracja (576)
- Macierz obrotu i wektor przesunięcia (578)
- Plansze kalibracji (580)
- Homografia (587)
- Kalibracja aparatu (591)
- Korekcja zniekształceń (602)
- Matryce likwidacji zniekształceń (602)
- Konwertowanie reprezentacji matryc likwidacji zniekształceń za pomocą funkcji cv::convertMaps() (604)
- Obliczanie matryc likwidacji zniekształceń za pomocą funkcji cv::initUndistortRectifyMap() (604)
- Likwidowanie zniekształceń obrazu za pomocą funkcji cv::remap() (606)
- Likwidacja zniekształceń za pomocą funkcji cv::undistort() (606)
- Rzadkie likwidowanie zniekształceń za pomocą funkcji cv::undistortPoints() (607)
- Podsumowanie technik kalibracji (607)
- Podsumowanie (610)
- Ćwiczenia (611)
19. Rzutowanie i trójwymiarowe widzenie (613)
- Rzutowanie (614)
- Przekształcenia afiniczne i perspektywiczne (615)
- Przykład przekształcenia na widok z góry (616)
- Określanie pozycji trójwymiarowych obiektów (621)
- Określanie pozycji za pomocą jednej kamery (621)
- Obrazowanie stereo (623)
- Triangulacja (624)
- Geometria epipolarna (628)
- Macierz zasadnicza i macierz fundamentalna (630)
- Obliczanie linii epipolarnych (638)
- Kalibracja stereo (639)
- Rektyfikacja stereo (643)
- Korespondencja stereo (652)
- Kalibracja stereo, rektyfikacja i korespondencja - przykładowy program (665)
- Matryce głębi z trójwymiarowej reprojekcji (671)
- Struktura z ruchu (673)
- Dopasowywanie linii w dwóch i trzech wymiarach (673)
- Podsumowanie (676)
- Ćwiczenia (677)
20. Podstawy uczenia maszyn w OpenCV (679)
- Czym jest uczenie maszyn? (679)
- Szkolenie i zbiory danych testowych (680)
- Uczenie nadzorowane i nienadzorowane (681)
- Modele generacyjne i dyskryminacyjne (683)
- Algorytmy ML w OpenCV (683)
- Zastosowania metod uczenia maszyn w komputerowym rozpoznawaniu obrazu (685)
- Znaczenie zmiennej (687)
- Diagnozowanie usterek w algorytmach uczenia maszyn (688)
- Stare procedury w bibliotece ML (694)
- K-średnich (694)
- Odległość Mahalanobisa (699)
- Podsumowanie (703)
- Ćwiczenia (703)
21. StatModel - standardowy model uczenia w OpenCV (705)
- Podstawowe procedury biblioteki ML (705)
- Szkolenie i struktura cv::ml::TrainData (707)
- Prognozowanie (713)
- Algorytmy uczenia maszyn oparte na interfejsie cv::StatModel (714)
- Naiwny lub normalny klasyfikator Bayesa (714)
- Binarne drzewa decyzyjne (719)
- Boosting (732)
- Drzewa losowe (738)
- Maksymalizacja oczekiwań (742)
- K najbliższych sąsiadów (745)
- Wielowarstwowy perceptron (748)
- Maszyna wektorów nośnych (756)
- Podsumowanie (765)
- Ćwiczenia (766)
22. Wykrywanie obiektów (771)
- Techniki wykrywania obiektów oparte na drzewach (771)
- Klasyfikatory kaskadowe (772)
- Uczenie nadzorowane i teoria wzmacniania (774)
- Uczenie się nowych obiektów (782)
- Wykrywanie obiektów za pomocą maszyn wektorów nośnych (790)
- Wykrywanie obiektów metodą Latent SVM (790)
- Algorytm Bag of Words i kategoryzacja semantyczna (793)
- Podsumowanie (798)
- Ćwiczenia (798)
23. Przyszłość biblioteki OpenCV (801)
- Przeszłość i teraźniejszość (801)
- OpenCV 3.x (802)
- Czy nasze prognozy się sprawdziły? (803)
- Przyszłość (804)
- Najświeższe wiadomości o GSoC (805)
- Wsparcie ze strony społeczności (807)
- Strona OpenCV.org (808)
- Spekulacje na temat sztucznej inteligencji (809)
- Posłowie (812)
A. Rodzaje podziału płaszczyzn (813)
- Triangulacja Delaunaya, teselacja Woronoja (813)
- Tworzenie podziałów Delaunaya lub Woronoja (816)
- Poruszanie się po podziałach Delaunaya (817)
- Przykłady (823)
- Ćwiczenia (824)
B. Repozytorium opencv_contrib (825)
- Przegląd modułów repozytorium opencv_contrib (825)
- Zawartość katalogu opencv_contrib (825)
C. Wzory kalibracji (829)
- Wzory kalibracji wykorzystywane w bibliotece OpenCV (829)
Bibliografia (835)
Skorowidz (849)
Kategoria: | Programowanie |
Zabezpieczenie: |
Watermark
|
ISBN: | 978-83-283-1659-1 |
Rozmiar pliku: | 21 MB |