OpenCV

opencv.org

Wstęp o analizy i przetwarzania obrazów:

  • Instalacja wersji 2.4 w Visual Studio 2012 poprzez NuGet Package Manager; docelowo wykorzystywana będzie najnowsza wersja biblioteki
  • we właściwościach menadżera należy zaznaczyć oficjalne repo NuGet
  • kompilacja w konfiguracji x64 (trzeba ją ręcznie utworzyć)
#include <opencv2/opencv.hpp>
using namespace cv;
int main(int argc, char* argv[])
{

}

home.agh.edu.pl/jed/media/img1.zip
  • Zadania
    • wczytaj obraz rgb, przejdź do skali szarości, zrób kopię, na oryginalnym obrazie zrób rozciąganie histogramu, a na kopi wyrównywanie histogramu. Wyświetl histogramy w obu przypadkach. W jaki sposób przechowywane są obrazy rgb w pamięci?
    • [Linear blending] wczytaj dwa obrazy o tym samych wymiarach następnie dodaj je do siebie z wagą pobraną ze slidera.
    • Wykonaj odszumianie obrazu, stosując filtr medianowy oraz Gaussa. Porównaj wyniki
    • Przetwarzane obrazy poddaj progowaniu: funkcją schodkową, metodą Otsu
    •  Sprawdź działanie filtrów morfologicznych w skali szarości: dylatacja, erozja, uwzględniając różne kształty elementu strukturalnego (krzyż, kwadrat, koło)
    • Zapisz pliki po przetwarzaniu

http://docs.opencv.org/2.4/doc/tutorials/imgproc/histograms/histogram_calculation/histogram_calculation.html

http://docs.opencv.org/2.4/doc/tutorials/core/adding_images/adding_images.html

http://docs.opencv.org/2.4/modules/imgproc/doc/miscellaneous_transformations.html?highlight=threshold

http://docs.opencv.org/2.4/modules/imgproc/doc/histograms.html

http://docs.opencv.org/master/d8/dc0/morphology2_8cpp-example.html#a9

 

Histogram, wzorzec Strategia, ProsteProgowanie, Redukcja liczby kolorów

  1. Proszę napisać klasę Histogram, która będzie opakowywać metodę cv::calcHist dla obrazów w skali szarości oraz dla obrazów kolorowych. W tym celu należy napisać klasy GrayHistogram i ColorHistogram (ważniejsza jest ta pierwsza):
    • klasa powinna zawierać pola, które podawane są do metody calcHist
    • klasa powinna dostarczać metody:
      • Mat getHistogram(const Mat& image)
      • Mat getHistogramImage(const Mat& image, int scale =1) //liczy histogram i zwraca obraz przedstawiający obliczony histogram
      • Mat getHistogramAsImage(const Mat& hist, int scale =1) // zwraca obraz przedstawiajacy histogram hist
      • static Mat HistogramImage(const Mat& image, int scale =1) // metoda statyczna dla szybkiego podglądu histogramu (domyślne parametry wywołania)
    • metoda calcHist operuje również na obrazach kolorowych – nie jest wymagane rozbicie koloru na poszczególne kanały
    • na kolejnych laboratoriach klasa zostanie wykorzystana np do sprawdzenia progowania automatycznego (część metod automatycznych jest sprofilowana pod konkretny kształt histogramu). Drugie zastosowanie, w którym potrzebny będzie wygodny dostęp do histogramu to statystyki określające liczbę pików w histogramie. Te również będą pomocne w binaryzacji.
  2. Na ostatnich zajęciach wykładowych został podany wzorzec Strategia. Zadanie polega na zaimplementowaniu szablonu tego wzorca, stosując również przeładowany operator () -> C++ Functor. Na kolejnych zajęciach zostanie uzgodniony interfejst klasy abstrakcyjnej (wstępnie Algorithm), po której należy dziedziczyć poszczególne algorytmu. Następnie jako przykład należy napisać klasę wykorzystaną do prostego progowania class SimpleThresholder (próg jest określany ręcznie w konstruktorze). Wyświetl histogram oraz obraz przed i po progowaniu.
    • Przykład wywołania
      • SimpleThresholder
  3. Iteratory
    • stosując iteratory, proszę napisać klasę ColorReducer (pamiętajać, że będzie dziedziczyć po Algorithm), która zmiejszy liczbę dostępnych kolorów
      • przykład zamiast przestrzeni 256x256x256 dostaniemy 32x32x32
      • przykładowe konstruktory: ColorReducer(int dzielnik = 8) lub ColorReducer(int liczbaodcieni = 32)

Za tydzień:

  • zaznaczenie ROI

  • detekcja skóry w przestrzeni HSV + histogram 3D, back-projection

  • porównanie histogramów: korelacja, chi2, intersection, emd, Bhattacharyya

  • peakiness test

  • progowanie z histerezą

  • automatyczne progowanie globalne: mean, mid-range, median, quantile, Isodata, Intermodes, Minimum, MaxEntropy, Triangle, HistogramBalance

  • automatyczne progowanie lokalne: Bernsen, Niblack, Sauvola, Phansalskar

  • warunki brzegowe

 

 

 

 

 

 

 

Back Projection: http://docs.opencv.org/doc/tutorials/imgproc/histograms/back_projection/back_projection.html

 

Możliwość komentowania została wyłączona.