13

Additív színmodell: piros, zöld, kék keverése · Vigyázz, a színek egy körön helyezkednek el [0; 179]. Ha a 90-et meghaladja az abszolútértékben nézett különbség,

  • Upload
    others

  • View
    5

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Additív színmodell: piros, zöld, kék keverése · Vigyázz, a színek egy körön helyezkednek el [0; 179]. Ha a 90-et meghaladja az abszolútértékben nézett különbség,
Page 2: Additív színmodell: piros, zöld, kék keverése · Vigyázz, a színek egy körön helyezkednek el [0; 179]. Ha a 90-et meghaladja az abszolútértékben nézett különbség,

Additív színmodell: piros, zöld, kék keverése

RGB hullámhossz:700nm, 546nm, 435nm

Elektronikai eszközök alkalmazzák: kijelzők, kamerák

16 millió szín kódolható

Szürke árnyalat: R=G=B

OPENCV: BGR

◦ Mátrix típus: CV_8UC3

◦ Pont típus: img.at<Vec3b>(i, j)

◦ Tartomány: R, G, B [0, 255]

◦ Tartomány váltás: r, g, b [0, 1]

rgb.convertTo(norm_rgb, CV_32FC3, 1/255.0);

Page 3: Additív színmodell: piros, zöld, kék keverése · Vigyázz, a színek egy körön helyezkednek el [0; 179]. Ha a 90-et meghaladja az abszolútértékben nézett különbség,

Töltsd le az alábbi képet:

https://en.wikipedia.org/wiki/File:Indian_hybrid_Orange.jpg

Készíts egy függvényt, ami a narancsokat egy másik képre másolja.

void narancsmasolo( const cv::Mat src, cv::Mat& dest );

Emlékeztető

◦ Kép beolvasása:

cv::imread( elérési_út, ImreadModes::IMREAD_COLOR )

◦ Kép létrehozása:

img.create( méret, típus );

◦ Kép másolása (deep copy):

img2 = img.clone();

◦ Képpont elérése

img.at<cv::Vec3b>(sor, oszlop)[csatorna]

csatorna: 0 - kék, 1 - zöld, 2 - piros

Page 4: Additív színmodell: piros, zöld, kék keverése · Vigyázz, a színek egy körön helyezkednek el [0; 179]. Ha a 90-et meghaladja az abszolútértékben nézett különbség,

Hue (színezet)

Saturation/Chroma (telítettség)◦ Alap- és kiegészítőszínek telítettsége maximális

◦ Szürke telítettsége nulla

Value ( max( R, G, B) )

3 millió szín kódolható

OpenCV

◦ Mátrix típus pl.: CV_8UC3

◦ Pont típus: img.at<Vec3b>(i, j)

◦ Tartomány: H [0, 179], S, V [0, 255]

◦ Áttérés BGR-ből HSV-be: cvtConvert( InputArray src, OutputArray dest,

ColorConversionCodes::COLOR_BGR2HSV);

Piros0

Sárga60

Zöld120

Kékeszöld180

Kék240

Bíbor300

Page 5: Additív színmodell: piros, zöld, kék keverése · Vigyázz, a színek egy körön helyezkednek el [0; 179]. Ha a 90-et meghaladja az abszolútértékben nézett különbség,

Töltsd le az alábbi képet:

https://en.wikipedia.org/wiki/File:Indian_hybrid_Orange.jpg

Készíts egy függvényt, ami a narancsokat egy másik képre másolja.

void narancsmasoloHSV( const cv::Mat src, cv::Mat& dest );

Emlékeztető

◦ Kép beolvasása:

imread( elérési_út, ImreadModes::IMREAD_COLOR )

◦ Kép létrehozása:

img.create( méret, típus );

◦ Áttérés HSV színtérbe:

cvtConvert( InputArray src, OutputArray dest,

ColorConversionCodes::COLOR_BGR2HSV);

◦ Kép másolása (deep copy):

img2 = img.clone();

◦ Képpont elérése

img.at<cv::Vec3b>(sor, oszlop)[csatorna]

csatorna: 0 - kék, 1 - zöld, 2 - piros

Page 6: Additív színmodell: piros, zöld, kék keverése · Vigyázz, a színek egy körön helyezkednek el [0; 179]. Ha a 90-et meghaladja az abszolútértékben nézett különbség,

Szétválik a színezet (a*,b*) és a világosság (L)

Tartományok: ◦ L*: [0, 100]

◦ a*: zöld-vörös tengely: [-100, 100]

◦ b*: kék-sárga tengely: [-100, 100]

Teljes színkülönbség:

∆𝐸∗ = ∆𝐿∗2 + ∆𝑎∗2 + ∆𝑏∗2

Színezet változás:

∆𝐻∗ = ∆𝐸∗2 − ∆𝐿∗2 − ∆𝐶∗2

Telítettség (chroma):

𝐶∗ = 𝑎∗2 + 𝑏∗2

Színezeti szög számítása:

ℎ𝑎𝑏° = 𝑎𝑟𝑐𝑡𝑔

𝑏∗

𝑎∗

Page 7: Additív színmodell: piros, zöld, kék keverése · Vigyázz, a színek egy körön helyezkednek el [0; 179]. Ha a 90-et meghaladja az abszolútértékben nézett különbség,

Szétválik a színezet (a*,b*) és a világosság (L)

Tartományok: ◦ L*: [0, 100]

◦ a*: zöld-vörös tengely: [-127, 127]

◦ b*: kék-sárga tengely: [-127, 127]

Teljes színkülönbség:

∆𝐸∗ = ∆𝐿∗2 + ∆𝑎∗2 + ∆𝑏∗2

Színezet változás:

∆𝐻∗ = ∆𝐸∗2 − ∆𝐿∗2 − ∆𝐶∗2

Telítettség (chroma):

𝐶∗ = 𝑎∗2 + 𝑏∗2

Színezeti szög számítása:

ℎ𝑎𝑏° = 𝑎𝑟𝑐𝑡𝑔

𝑏∗

𝑎∗

Page 8: Additív színmodell: piros, zöld, kék keverése · Vigyázz, a színek egy körön helyezkednek el [0; 179]. Ha a 90-et meghaladja az abszolútértékben nézett különbség,

OpenCV tartományok CV_8UC3-nál:L*: [0, 255] ( eredet_L* = opencv_L*100/255.0 )

a*: [0, 255] ( eredeti_a* = opencv_a* - 128 )

b*: [0, 255] ( eredeti_b* = opencv_b* - 128 )

Érdemes a CV_32FC3-at használni, ahol nincs átalakítás:

cv::Mat rgb = imread(…); //szokásos RGB kép (CV_8UC3)

//RGB kép átskálázása ( [0, 1] tartományra )

cv::Mat rgbf;

rgb.convertTo(rgbf, CV_32FC3, 1.0 / 255.0);

//rgbf képet használjuk a színrendszer váltásnál.

cv::Mat lab(rgbf.size(), CV_32FC3);

cv::cvtColor(rgbf, lab, COLOR_BGR2Lab);

Page 9: Additív színmodell: piros, zöld, kék keverése · Vigyázz, a színek egy körön helyezkednek el [0; 179]. Ha a 90-et meghaladja az abszolútértékben nézett különbség,

Készíts egy programot, ami:

• megjelenít egy kapott képet

• a felhasználó egérrel kiválaszthat egy pontot

• hatására egy másik képen megjelennek a kijelölt ponthoz hasonló színű pontok (RGB térben t távolságra lévő képpontok (t kezdeti értéke 15))

A felh. változtathassa a t távolságot a + és - gombok leütésével

Kép felolvasása, megjelenítése

Egér eseménykezelő hozzáadása (setMouseCallback)

int key = ' ';

do{

ha volt esemény, eredménykép létrehozása és megjelenítése

key = cv::WaitKey(1);

ha + v. - akkor adott tavolsag valtoztatasa

}while (key != 'q');

Page 10: Additív színmodell: piros, zöld, kék keverése · Vigyázz, a színek egy körön helyezkednek el [0; 179]. Ha a 90-et meghaladja az abszolútértékben nézett különbség,

Eseménykezelő:

void onMouse(int mevent, int x, int y, int flag, void* userdata){

esemény és/vagy állapot ellenőrzése

szükséges adatok mentése az userdata változóba: pl. x, y

pl:

if( mevent == EVENT_LBUTTONDBLCLK )

TO DO

if( flag == EVENT_FLAG_LBUTTON )

TO DO

}

Eseménykezelő felhasználása:

userdata_tipusa adat; //pl: Vec3b, Point, saját struktúra

imshow( ablak, kep );

setMouseCallback( ablak, onMouse, &adat );

{várakoztatás vagy ciklus}

Page 11: Additív színmodell: piros, zöld, kék keverése · Vigyázz, a színek egy körön helyezkednek el [0; 179]. Ha a 90-et meghaladja az abszolútértékben nézett különbség,

Egészítsd ki a fenti programot úgy, hogy a HSV színtér Hue csatornáját használja a kijelöléshez.

Vigyázz, a színek egy körön helyezkednek el [0; 179]. Ha a 90-et meghaladja az abszolútértékben nézett különbség, akkor vond le a maximális értékből.

Egészítsd ki a fenti programot CIE Lab színtérben történő kijelöléssel.

Használd a teljes színkülönbséget

Page 12: Additív színmodell: piros, zöld, kék keverése · Vigyázz, a színek egy körön helyezkednek el [0; 179]. Ha a 90-et meghaladja az abszolútértékben nézett különbség,
Page 13: Additív színmodell: piros, zöld, kék keverése · Vigyázz, a színek egy körön helyezkednek el [0; 179]. Ha a 90-et meghaladja az abszolútértékben nézett különbség,

Képek (vagy azok eredetiének) származási helye:https://en.wikipedia.org/wiki/File:HSV_color_solid_cone_chroma_gray.png

http://www.texample.net/media/tikz/examples/PDF/cielab.pdf

https://commons.wikimedia.org/wiki/File:Lab_color_space.png