graficzna prezentacja rozkładu jasności fotografii cyfrowej

Jeśli masz problem z LabWindows napisz, postaramy się pomóc.
master1985
Posty: 12
Rejestracja: 07 cze 2009 20:08
Kontakt:

graficzna prezentacja rozkładu jasności fotografii cyfrowej

Post autor: master1985 »

Witam
mam taki problem. muszę opracować w labwindows program, który realizując operację na bitmapach, przeprowadzi analizę obrazu pod kątem rozkładu jasnosci. Wyniki analizy należy zaprezentować w formie histogramu. Czy ktoś mógłby dać mi jakąś wskazówkę jak się za to zabrać??
Z góry dzięki za pomoc
Awatar użytkownika
maciekwp
Posty: 46
Rejestracja: 03 kwie 2007 00:00
Wersja środowiska: Nie mam LabVIEW
Lokalizacja: Warszawa

Re: graficzna prezentacja rozkładu jasności fotografii cyf

Post autor: maciekwp »

Witaj,

Ciekawe zagadnienie gdybym nie miał co z czasem zrobić to sam bym poeksperymentował ale do rzeczy:

Funkcje biblioteczne LabWindowsa operują na bitmapach, które zapisywane są w pamięci jako tablice. Jest ich tam kilka ale nas interesuje tablica koloru w postaci RGB (zakładam że chodzi o fotografie kolorowe czyli bitmapy o głębi koloru 16M, w skali szarości jest jeszcze łatwiej).

Cały problem sprowadza do odczytania poszczególnych składowych kolorów (zapisane szesnastkowo w przedziale 000000 do FFFFFF, każda składowa przyjmuje wartości od 0 do 255 lub 00 do FF jak kto woli) kolejno każdego piksela i zależnie od potrzeb policzenie histogramów dla każdej składowej (koloru) lub w ogólnym przypadku na podstawie średniej składowych RGB (tu mała uwaga: histogram na podstawie średniej nie daje pełnej informacji o bitmapie kolorowej i w pewnych sytuacjach może być mylący).

Tak w skrócie wygląda procedura.
Jeśli napisałem coś nie jasno to pytaj.

Pozdrawiam i życzę powodzenia w walce z pikselami...
w palcu siła...
master1985
Posty: 12
Rejestracja: 07 cze 2009 20:08
Kontakt:

Re: graficzna prezentacja rozkładu jasności fotografii cyf

Post autor: master1985 »

Witam

Dzięki za zainteresowanie tematem.

Czy jest jakaś gotowa funkcja w LabWindows, która potrafi wyciągnąć poszczególne kolory, czy trzeba to zrealizować w pętlach?
Zastanawiam się tylko czy po przejściu na rozkład RGB nie trzeba rozbić jeszcze tego na YUV.


Dzięki i pozdrawiam
Awatar użytkownika
maciekwp
Posty: 46
Rejestracja: 03 kwie 2007 00:00
Wersja środowiska: Nie mam LabVIEW
Lokalizacja: Warszawa

Re: graficzna prezentacja rozkładu jasności fotografii cyf

Post autor: maciekwp »

To jaki zrobisz histogram zależy wyłącznie od Ciebie i Twoich potrzeb.

Histogram ze średniej RGB jest stosowany np. w aparatach cyfrowych (o ile mi wiadomo), czy stosuje się inne (pewnie tak - przetwarzanie obrazów) tego nie wiem.

Co do sposobu liczenia ja bym osobiście zrobił w pętli, bo można za jednym zamachem zrobić wektory dla trzech składowych plus wektor dla średniej i przy okazji konwersję typów na "double" bo na takim typie operuje funkcja "histogram" w LW.
w palcu siła...
Awatar użytkownika
maciekwp
Posty: 46
Rejestracja: 03 kwie 2007 00:00
Wersja środowiska: Nie mam LabVIEW
Lokalizacja: Warszawa

Re: graficzna prezentacja rozkładu jasności fotografii cyf

Post autor: maciekwp »

Przykład...
Ostatnio zmieniony 13 sie 2009 14:55 przez maciekwp, łącznie zmieniany 2 razy.
w palcu siła...
Awatar użytkownika
jogurt_owocowy
Posty: 1317
Rejestracja: 30 lis 2004 00:00
Wersja środowiska: LabVIEW 2015
Lokalizacja: Kraków

Re: graficzna prezentacja rozkładu jasności fotografii cyf

Post autor: jogurt_owocowy »

Warto się też zastanowić i doprecyzować czy jasność rozumieć jako średnią z wartości składowych RGB czy (co bardziej prawdopodobne) jako składową L przestrzeni HSL (Hue-Saturation-Lightness) i obliczyć ją na podstawie składowych RGB z odpowiedniego wzoru.
PS. Ładny rysunek :) Jak go zapiszesz do PNG, będzie jeszcze ładniejszy - nie będzie ograniczony do 256 kolorów.
Ostatnio zmieniony 17 cze 2009 16:07 przez jogurt_owocowy, łącznie zmieniany 1 raz.
master1985
Posty: 12
Rejestracja: 07 cze 2009 20:08
Kontakt:

Re: graficzna prezentacja rozkładu jasności fotografii cyf

Post autor: master1985 »

Wydaje mi się że pod pojęciem jasności należy rozumieć średnią HSL. Ale to już mniejszy problem, ponieważ jak napisał jogurt_owocowy są gotowe wzory na wyliczenie średniej HSL z rozkładu RGB. Ja tylko chciałbym się dowiedzieć, którymi funkcjami z LabWindows wyciągnąć rozkład RGB.

Wystarczy mi jakaś prosta procedura, która dokona rozkładu jednego koloru, a z dwoma następnymi już sobie poradzę.
Awatar użytkownika
maciekwp
Posty: 46
Rejestracja: 03 kwie 2007 00:00
Wersja środowiska: Nie mam LabVIEW
Lokalizacja: Warszawa

Re: graficzna prezentacja rozkładu jasności fotografii cyf

Post autor: maciekwp »

Ostatnio zmieniony 23 cze 2009 06:19 przez maciekwp, łącznie zmieniany 1 raz.
w palcu siła...
master1985
Posty: 12
Rejestracja: 07 cze 2009 20:08
Kontakt:

Re: graficzna prezentacja rozkładu jasności fotografii cyf

Post autor: master1985 »

Wielkie dzięki za pomoc

Lada moment będę siadał do projektu, także napewno to wykorzystam
master1985
Posty: 12
Rejestracja: 07 cze 2009 20:08
Kontakt:

Re: graficzna prezentacja rozkładu jasności fotografii cyf

Post autor: master1985 »

Witam

Mam problem z funkcją:

"AllocBitmapDataEx"

Czy ta funkcja wymaga czegoś w rodzaju podwójnego wskaźnika?
Jeśli tak to w jaki zposób zrealizować to w LW ??
Awatar użytkownika
maciekwp
Posty: 46
Rejestracja: 03 kwie 2007 00:00
Wersja środowiska: Nie mam LabVIEW
Lokalizacja: Warszawa

Re: graficzna prezentacja rozkładu jasności fotografii cyf

Post autor: maciekwp »

Nie jestem pewien o co ci chodziło ale zakładam że o sposób deklaracji zmiennych:

Kod: Zaznacz cały

 int *colors
= NULL; unsigned char *bits

= NULL; unsigned char *mask

= NULL; unsigned char *alpha
 = NULL; 
Jeśli się mylę to sprecyzuj w czym jest problem.
w palcu siła...
master1985
Posty: 12
Rejestracja: 07 cze 2009 20:08
Kontakt:

graficzna prezentacja rozkładu jasności fotografii cyfrowej

Post autor: master1985 »

Dzięki za podpowiedź, rzeczywiście to o to chodziło. Początkowo nie domyśliłem się, że to chodzi o sposób deklaracji zmiennych.

Ale mam jeszcze pytanie o inną rzecz.

Czy po wyciągnięciu składowych kolorów muszę zdeklarować kolejną tablicę w celu uzyskania histogramu? jeśli tak, to w jaki sposób to zrobić?

Z góry dzięki za wskazówkę
Awatar użytkownika
maciekwp
Posty: 46
Rejestracja: 03 kwie 2007 00:00
Wersja środowiska: Nie mam LabVIEW
Lokalizacja: Warszawa

Re: graficzna prezentacja rozkładu jasności fotografii cyf

Post autor: maciekwp »

Histogram liczymy funkcją "Histogram":

Kod: Zaznacz cały

 Histogram (tablicadanych, iloscelem, 0.0, 255, histogram, osXhistogramu, 256); 
tablicadanych (double) - dane wyciągnięte z tablicy RGB iloscelem - ilość elementów w tablicadanych (szerokość*wysokość obrazka) 0.0, 255.0 - min, max wartość zakresu histogramu (jak wartości w tablicy danych) histogram, osXhistogramu (int, double) - tablice wynikowe funkcji histogram o 256 elementach ilość elementów (przedziałów) określa ostatni parametr
Należy pamiętać o konwersji typu danych wejściowych z unsigned char na double bo na takim typie operuje funkcja Histogram
w palcu siła...
master1985
Posty: 12
Rejestracja: 07 cze 2009 20:08
Kontakt:

Re: graficzna prezentacja rozkładu jasności fotografii cyf

Post autor: master1985 »

Dzięki za odpowiedzi. Mam nadzieję, że nie masz mnie jeszcze dosyć :P

Mam jeszcze parę pytań:

1) czy do konwersji danych z typu unsigned char do double użyć funkcji "atof" bądź "strtod" czy jeszcze jakiejś innej?
2) Dlaczego pierwszy z parametrów funkcji "histogram" czyli "tablicadanych" po kompilacji wyrzuca błąd "argument to small"
3) do wyznaczenia poszczególnych rozkładów kolorów na obiekcie "graph" użyć funkcji "plotxy" czy jakiejs innej?

Mam nadzieję, że to tyle :d
Awatar użytkownika
maciekwp
Posty: 46
Rejestracja: 03 kwie 2007 00:00
Wersja środowiska: Nie mam LabVIEW
Lokalizacja: Warszawa

Re: graficzna prezentacja rozkładu jasności fotografii cyf

Post autor: maciekwp »

W telegraficznym skrócie:
1. Najprościej przez rzutowanie:

Kod: Zaznacz cały

zmienna_double = (double)zmienna_char;
2. Dołącz linijkę kodu bo nie mam pojęcia co ci odpowiedzieć.
3. Jak najbardziej plotxy bo Histogram daje dwie tablice X i Y (ale przy równomiernych przedziałach jak w tym przypadku wystarczy ploty a nawet może być plotstripchart).
w palcu siła...
ODPOWIEDZ