Dawid Anioł Blog

Author: Dawid Anioł

Nieco o przestrzeni barw

Kolory to bardzo ciekawa cecha naszego otoczenia nie jest tajemnicą że często są od

odbierane subiektywanie, potocznie się też mówi że kobiety rozróżniają ich więcej niż mężczyźni więc jest to ciekawe i trudne wyzwanie dla technologii i przemysłu.

Jedną z pierwszych przestrzenia z jaką się stykamy jest

RGB:

Definicja: numer_koloru = R * 65536 + G * 256 + B

Zastosowanie: model RGB miał pierwotnie zastosowanie do techniki analogowej, obecnie ma również do cyfrowej. Jest szeroko wykorzystywany w urządzeniach analizujących obraz (np. aparaty cyfrowe, skanery) oraz w urządzeniach wyświetlających obraz (np. telewizory, monitory komputerowe).

Opis: jeden z modeli przestrzeni barw, opisywanej współrzędnymi RGB. Jego nazwa powstała ze złożenia pierwszych liter angielskich nazw barw: R – red (czerwonej), G – green (zielonej) i B – blue (niebieskiej), z których model ten się składa. Jest to model wynikający z właściwości odbiorczych ludzkiego oka, w którym wrażenie widzenia dowolnej barwy można wywołać przez zmieszanie w ustalonych proporcjach trzech wiązek światła o barwie czerwonej, zielonej i niebieskiej. Model RGB jest jednak modelem teoretycznym, a jego odwzorowanie zależy od urządzenia (ang. device dependent), co oznacza, że w każdym urządzeniu każda ze składowych RGB może posiadać nieco inną charakterystykę widmową, a co za tym idzie, każde z urządzeń może posiadać własny zakres barw możliwych do uzyskania.

CMYK:

Definicja: Skrót CMYK powstał jako złożenie pierwszych liter angielskich nazw kolorów. Końcowa litera K może oznaczać albo literę ostatnią słowa black (czarny; ostatnią, ponieważ litera B jest skrótem jednego z podstawowych kolorów w analogicznym skrócie RGB)[2] bądź skrót key colour (kolor kluczowy).

Zastosowanie: zestaw czterech podstawowych kolorów farb drukarskich stosowanych powszechnie w druku wielobarwnym w poligrafii i metodach pokrewnych (atramenty, tonery i inne materiały barwiące w drukarkach komputerowych, kserokopiarkach itp.). Na zestaw tych kolorów mówi się również barwy procesowe lub kolory triadowe (kolor i barwa w jęz. polskim to synonimy). CMYK to jednocześnie jedna z przestrzeni barw w pracy z grafiką komputerową.

Opis: Druk farbami (atramentami) CMYK odbywa się metodą rastra, czyli drukowania widocznych pod lupą punktów. Raster posiada 100% koloru. Może mieć różny kształt (raster klasyczny ma kształt koła), różną wielkość. Na danym obszarze druku stosunek powierzchni pokrytej rastrem danego koloru (np. cyjanu) do całej powierzchni tego obszaru, wyrażony w procentach, to wartość tonalna. Wartość tonalna 0% dla cyjanu oznacza powierzchnię nie pokrytą cyjanem, a wartość tonalna 100% (pełny ton) cyjanu oznacza powierzchnię pokrytą cyjanem w całości. Drukując różnymi wartościami tonalnymi dla cyjanu mamy wrażenie optyczne różnego natężenia barwy cyjan.

RAL:

Definicja:

RAL 10xx – grupa odcieni żółtych
RAL 20xx – grupa odcieni pomarańczowych
RAL 30xx – grupa odcieni czerwonych i różowych
RAL 40xx – grupa odcieni purpurowych i fioletowych
RAL 50xx – grupa odcieni niebieskich
RAL 60xx – grupa odcieni zielonych
RAL 70xx – grupa odcieni szarych
RAL 80xx – grupa odcieni brązowych
RAL 90xx – grupa odcieni białych i czarnych.

Zastosowanie: system oznaczania barw oparty na porównaniu z wzorcami. W ten sposób oznacza się barwy farb do metalu, lakierów samochodowych w aerozolu, samoprzylepnych folii PVC stosowanych przez plastyków i wiele innych zastosowań, w tym także farb mieszanych komputerowo, niezależnie od ich producentów.

Opis: Dodatkowo stworzono bardziej dokładny model nazwany RAL DESIGN, który obejmuje 1825 barw (przed rokiem 2018, ilość barw wynosiła 1625) i systematyzuje je z uwzględnieniem doświadczalnie zmierzonej jasności i nasycenia.

Notacja barw w RAL Design System to kod numeryczny, który składa się z napisu „RAL” i siedmiu cyfr np.: RAL 210 60 30, gdzie 210 to odcień (Hue), 60 to jasność (Lightness), a 30 to chrominancja (Chroma), co ilustruje położenie w przestrzeni barw CIE LCH.

Ciekawostka:

Markowi producenci wyświetlaczy do użytku profesjonalnego używają takich skal do odwzorowania kolorów: AdobeRGB,  sRGB,  Rec. 709,  DCI-P3, Rec. 2020 i na przykład dla monitorów DELL najwyższa możliwa klasa odwzorowania to PremierColor.

Bibliografia:

https://pl.wikipedia.org/wiki/RAL

https://pl.wikipedia.org/wiki/CMYK

https://en.wikipedia.org/wiki/CMYK_color_model

https://pl.wikipedia.org/wiki/RGB

Budowanie blender – OSX

Budowanie Blender-a zazwyczaj nastręcza sporo problemów, na szczęście od wersji 2.8 jest dużo łatwiejsze i pociesza fakt że po pierwszym zbudowaniu, kolejne przechodzą już całkiem prosto.

1 ) Wymagania wstępne. Czyli narzędzia jakimi będziemy się posługiwać podczas kompilacji. XCode czyli pakiet zawierający kompilatory C/C++, bibliotekę standardową oraz niezbędne pliku nagłówkowe. Czyli baza dla środowiska języka C/C++ na platformę OS X. Cmake to narzędzie do budowania projektów C/C++.

  • xcode – można zainstalować z apple store
  • cmake – https://cmake.org/download/

Dobrze sobie zrobić specjalny katalog w którym będziemy trzymać wszystkie pliki źródłowe, pliki pomocnicze, pliki bibliotek oraz wszystko to, co będzie potrzebna podczas kompilacji.

  • mkdir blelnder-build

2) Źródła. W tej sekcji pobierzemy źródła samego Blendera i sub-moduły.  W samych źródłach Blendera znajduje się sporo różnych skryptów, plików konfiguracyjnych, są tam pliki pomagające przy budowaniu jak również tworzeniu pakietów pod różne platformy, ale nas w tym momencie to nie będzie interesować. Nas interesuje teraz żeby pobrać te źródła

  • git clone git://git.blender.org/blender.git

mając źródła potrzebujemy jeszcze sub-modułów. Są to źródła, które z jakiegoś względu zostały umieszczone w osobnym repozytorium, a które moją wpływ na dodatkowe funkcje. Żeby można było pobrać sub-moduły należy wejść do katalogu sklonowanego repozytorium

  • cd blender

teraz już można pobierać sub-moduły

  • git submodule update –init –recursive
  • git submodule foreach git checkout master

  • git submodule foreach git pull –rebase origin master

mamy już sub-moduły w następny kroku pobierzemy zależne biblioteki. Są to skompilowane pliki statyczne i dynamiczne wraz z plikami nagłówkowymi. Te biblioteki możemy sobie sami skompilować lub pobrać z repozytorium SVN.

  • svn checkout https://svn.blender.org/svnroot/bf-blender/trunk/lib/darwin lib
    • u mnie pojawił się problem zrywania połączenia podczas pobierania niektórych plików. Można powrócić do kontynuowania pobierania jednak wcześniej trzeba wyczyścić repozytorium
    • cd lib
    • svn cleanup
    • cd ..
    • svn checkout https://svn.blender.org/svnroot/bf-blender/trunk/lib/darwin lib

pobieranie może zająć trochę czasu.

3) Kompilacja. Kompilacja odbywa się ze pomocą komendy ‚make’ możemy jednak mieć kilka jej odmian

  • make full – tworzy wersję ze wszystkimi możliwymi opcjami i zależności
  • make lite – tworzy wersją z minimalną liczbą zależności
  • make headless – tworzy wersji bez interfejsu
  • make deps – tworzy biblioteki zależności

I to już koniec, po kompilacji mamy do dyspozycji działającą wersje Blendera.

Zastosowanie cv2.compare do usuwania tła.

Usuwanie tła to jeden z problemów przetwarzania obrazów, który wydaje się być łatwy, a sprawia spore problemy.  W bibliotece OpenCV jest sekcja usuwania tła  w kontekście wideo. Pojawiają się tam funkcje typu: BackgroundSubtractorMOG , BackgroundSubtractorMOG2 czy BackgroundSubtractorGMG. Usuwają one tło z poszczególnych klatek tworząc maskę, którą można użyć do podświetlania interesujących nas obiektów. Z jednej strony te funkcje nie są idealne, z drugiej strony często posiadamy tylko dwie klatki, w których na jednej jest samo tło, a na drugiej mamy to samo tło z interesującym nas obiektem.  I chociaż możemy skorzystać z powyższych funkcji, to kusi skorzystanie z czegoś prostszego (może bardziej precyzyjnego).

 

Jeśli nasze klatki zawierają „laboratoryjnie” przygotowany obraz, czyli tło jest bez przesunięcia, a każdy piksel tła na jednym obrazie odpowiada pikselowi na drugim obrazie, również wartości tych pikseli są identyczne, sprawę można ograć funkcją compare. Oto jak można to zrobić:

Tworzenie maski zaczynamy od wrzucenia obrazu do cvtColor tworząc obraz jednowarstwowy, później obraz przechodzi przez węzeł compare z ustawionym code na CMP_NE.  Oprócz poszukiwanego śladu, mogą pojawić się artefakty w losowych miejscach, spowodowane one są kompresją. Niewielkie różnice w wartościach pikseli mogą zależeć od rodzaju kompresji oraz jej parametrów. Artefakty usuwamy funkcją erode. Tak przygotowaną maskę możemy wrzucić do bitwise i w efekcie można uzyskać obiekt bez tła.  Takie podejście jest autonomiczne i nie wymaga zmian parametrów dla innych przypadków.

 

Do usuwania tła jest też inna ciekawa metoda, oparta na funkcji watershed. Jest ona bardzo dokładna, jednak wymaga podania kluczowych regionów obiektu, który chcemy odseparować od tła.  Opiszę ją już następnym razem.

„Kompilacja” kodu Python-a

Czasami trzeba udostępnić komuś aplikacje chcąc jednoczenie zachować pewne fragmenty kodu jako ukryte. Dzieje się tak w przypadku aplikacji stacjonarnych, gdzie użytkownik ściąga sobie cały program, by później móc go uruchamiać na swoim komputerze bez potrzeby łączenia się gdziekolwiek. W Pythonie jest z tym mały problem, ponieważ  jest to język interpretowany. Szczerze  mówiąc jest to duży problem, gdyż na dzień dzisiejszy 2018 r. nie ma możliwości, by w 100%-tach zabezpieczyć kod pythona przed podglądnięciem.

Bez wchodzenia w szczegóły, przy pomocy samego Python-a można „skompilować” kod do postaci nie czytelnej dla człowieka. Dekompilacja takiego kodu nie jest trywialna nawet dla zaawansowanych użytkowników.  W większości przypadków jest to wystarczająca forma.

Kompilowanie wszystkich plików py w bieżącym katalogu:

python -m compileall .

Bibliografia:

  • http://effbot.org/zone/python-compile.htm
  • https://docs.python.org/3/library/compileall.html#module-compileall

O, o … ImportError: DLL load failed: The specified procedure could not be found.

Problem z plikami DLL pod Windows-em gdy używa się bibliotek takich jak numpy czy OpenCV , może przysporzyć sporo problemów. Często problem stanowi brak standardowych bibliotek VisualStudio, w których była kompilowana dana biblioteka, wtedy wystarczy  Visual C++ redistributable 2015  w odpowiedniej wersji lub Universal C Runtime. Choć czasem to nie wystarcza i pojawia się problem jakiej biblioteki nam brakuje i w jakiej powinna być wersji.

Z pomocą przychodzą nam dwa narzędzia.  Dependencywalker – sprawdzanie zależności w Windows.  Jest to bardzo stare narzędzie i nie zawsze umie sobie rozwiązać dobrze wszystkie zależności. I jest też procmon, tutaj można się dowiedzieć jakich i gdzie nasz Python szuka bibliotek i dlaczego to mu się nie udaje.

 

Copyright © 2024 Dawid Anioł Blog

Theme by Anders NorenUp ↑