Sunteți pe pagina 1din 11

Procesarea Imaginilor - Laborator 2: Spaiul culorilor. Conversii.

color grayscale i grayscale alb-negru

2. Spaiul culorilor. Conversii color grayscale i grayscale


alb-negru
2.1. Introducere
Scopul acestui al doilea laborator este nvarea tehnicilor de baz n lucrul cu culorile
imaginilor digitale n format bitmap.

2.2. Spaiul RGB


Culoarea fiecrui pixel (att pentru echipamentele de achiziie camere) ct i pentru afiare
(TV, CRT, LCD) se obine prin combinaia a trei culori primare: rou, verde i albastru. (Red,
Green i Blue.) (spaiu de culoare aditiv fig. 2.1 i 2.2).

Fig. 2.1. Reprezentarea combinrii aditive a culorilor. Acolo unde culorile primare se suprapun se observ
apariia culorilor secundare. Acolo unde toate trei culorile se suprapun se observ apariia culorii albe[1].

Fig. 2.2. Imaginea color se obine prin combinarea la nivel de pixel a celor trei culori primare (vezi cele trei
canale).

Astfel, fiecare pixel din imagine va fi caracterizat prin cte o valoare pentru fiecare din cele
trei componente de culoare primare. Culoarea sa reprezint un punct n spaiul 3D al
modelului de culoare RGB (fig. 2.3). n acest cub al culorilor, originea axelor R, G i B
corespunde culorii negre (0, 0, 0). Vrful opus al cubului corespunde culorii albe (255, 255,
255). Diagonala cubului, ntre negru i alb corespunde tonurilor de gri (grayscale) (R=G=B).
Trei dintre vrfuri corespund culorilor primare rou, verde i albastru. Celelalte 3 vrfuri
corespund culorilor complementare: turcoaz, mov i galben (Cyan, Magenta and Yellow).
Dac translatm originea sistemului de coordonate n punctul alb i redenumim cele 3 axe
de coordonate ale sistemului n C, M, Y obinem spaiul de culoare complementar CMY,
(folosit la dispozitive de imprimare color).

Universitatea Tehnic din Cluj-Napoca, Catedra de Calculatoare

Fig. 2.3. Modelul de culoare RGB mapat pe un cub. n acest exemplu fiecare culoare este reprezentat pe cte 8
bii (256 de nivele) (imagini bitmap RGB24). Numrul total de culori este 28x28x28 = 224 = 16.777.216.

Pentru imagini RGB24 (24 bii/pixel) spaiul de culoare poate fi reprezentat complet. ntr-o
imagine indexat (cu palet) poate fi reprezentat doar un anumit subspaiu al spaiului de
culoare din figura 2.3. n acest context, numrul de bii/pixel (numrul de bii folosii pentru
codificarea unei culori) se numete adncime de culoare (color depth). (Tabelul 2.1):
Tabel 2.1. Adncimea i tipul imaginii
Adncimea de culoare
Nr. Culori
1 bit
2
4 bii
16
8 bii
256
16 bii
65536
24 bii
16.777.216
32 bii
16.777.216

Mod de culoare
Indexed Color
Indexed Color
Indexed Color
True Color
True Color
True Color

Palette (LUT)
Yes
Yes
Yes
No
No
No

Exist i alte modele de culoare[2] care nu vor fi discutate aici.

2.3 Conversia unei imagini color ntr-o imagine grayscale


Pentru a converti o imagine color intr-o imagine grayscale, cele trei componente ale culorii
fiecrui pixel trebuie egalizate. O metod des folosit este medierea celor 3 componente:
RDst G Dst BDst

RSrc GSrc BSrc


3

(2.1)

Procesarea Imaginilor - Laborator 2: Spaiul culorilor. Conversii. color grayscale i grayscale alb-negru

2.3.1. Cazul imaginilor RGB24 (24 bii/pixel)


n acest caz formula 2.1 se poate aplica accesnd, fiecare dintre cele trei componente de
culoare ale fiecrui pixel din imaginea surs i destinaie, aa cum a fost explicat n
laboratorul 1.
2.3.2. Cazul imaginilor indexate (cu palet)
n acest caz, intrrile din paleta imaginii destinaie trebuie parcurse (vezi exemplul din
laboratorul 1) iar componentele culorilor din fiecare intrare trebuie convertite folosind (2.1).
O situaie des ntlnit dup aceast operaie simpl este faptul c intrrile paletei nu sunt
ordonate cresctor, dup nivelul de gri. (fig. 2.4).
Index
vechi
0
1
2
.
.
.
255

100 100 100


20 20 20
32 32 32

78

78

78

Fig. 2.4. Paleta nesortat dup convertirea din color la grayscale n cazul imaginilor indexate.

Alte procesri ulterioare ale imaginii grayscale necesit o palet ordonat. Din acest motiv,
dup operaia de conversie trebuie efectuat o operaie de ordonare a paletei.
Metod simpl de ordonare a paletei:
1. Se creeaz un vector de dimensiune 256:
ex: BYTE g[256];

2. Se parcurge paleta i se iniializeaz elementele lui g cu una dintre componentele de


culoare ale intrrii k din paleta grayscale nesortat (fig. 2.4) urmat de sortarea paletei prin
atribuirea valorii k la cele 3 componente de culoare ale intrrii k (n aceast ordine):
for (k= 0 iColors) {
// initializare vector g
g[k] = paleta[k].rgbRed;
// sortare paleta
paleta[k].rgbRed = paleta[k].rgbGreen = paleta[k].rgbBlue = k;
}

Index nou
0
1
2
.
.
.
255

R
0
1
2

G
0
1
2

B
0
1
2

255 255 255

X
-

g
5
23
14

243

Fig. 2.5. Palet sortat dup pasul 2.

Universitatea Tehnic din Cluj-Napoca, Catedra de Calculatoare

3. Un ultim pas const n parcurgerea pixelilor din imagine i nlocuirea valorilor (indecilor)
vechi k cu valoarea g[k] (folosind corespondenele din vectorul g obinute la pasul anterior).
(fig. 2.5):
k = lpDst[i*w+j];
lpDst[i*w+j] = g[k];

2.4. Accesarea coninutului paletei i a altor informaii relevante din


header-ul bitmap
Urmtorul exemplu arat cum poate fi accesat header-ul bitmap:
//Obine pointer-ul la nceputul header-ului bitmap
//tipul pointer-ului este BITMAPINFO*
LPBITMAPINFO pBitmapInfoSrc = (LPBITMAPINFO)lpS;

sau
BITMAPINFO *pBitmapInfoSrc = (BITMAPINFO*) lpS;
// obine dimensiunea bitmap-ului
pBitmapInfoSrc->bmiHeader.biSize;
//obine numrul de bii/pixel
pBitmapInfoSrc->bmiHeader.biBitCount); //numrul de bii/pixel (1, 4, 8, 16,
//24, 32

Unde structurile BITMAPINFO i BITMAPINFOHEADER sunt definite ca:


typedef struct tagBITMAPINFO {
BITMAPINFOHEADER bmiHeader;
RGBQUAD
bmiColors[1];
} BITMAPINFO, *LPBITMAPINFO;
typedef struct tagBITMAPINFOHEADER{
DWORD biSize;
LONG
biWidth;
LONG
biHeight;
WORD
biPlanes;
WORD
biBitCount;
DWORD biCompression;
DWORD biSizeImage;
LONG
biXPelsPerMeter;
LONG
biYPelsPerMeter;
DWORD biClrUsed;
DWORD biClrImportant;
} BITMAPINFOHEADER, *LPBITMAPINFOHEADER;

Modul n care se pot accesa intrrile din palet a fost prezentat n laboratorul 1.

2.5. Scurt ghid despre afiarea informaiilor ntr-o csu de dialog


2.5.1. Crearea unei noi resurse de tip Dialog Box
1. n fereastra Workspace comutai pe tabulatorul ResourceView, selectai intrarea Dialog
facei click dreapta i click stnga pe Insert Dialog (fig. 2.6.a).
2. Facei click (selectai) resursa de tip dialog nou creat. n dreapta se va activa fereastra
Properties (fig. 2.6.b) asociata dialogului respectiv. Putei schimba numele (se recomand s
o facei), stilul i ID-ul (nu se recomand) i aa mai departe

Procesarea Imaginilor - Laborator 2: Spaiul culorilor. Conversii. color grayscale i grayscale alb-negru

3. Facei click dreapta pe noua resurs dialog creat (fig. 2.7) si selectai opiunea pentru a
crea o nou clas pentru noua resurs dialog (Add class). Se va deschide fereastra MFC
Class Wizard (fig. 2.8)

a.

b.
Fig. 2.6.

Fig. 2.7.

4. Dai un nume relevant clasei asociate dialogului (de exemplu CBitmapInfoDlg.) Wizzard-ul
creeaz automat fiierele necesare *.h and *.cpp noii clase (numele fiierului este similar

Universitatea Tehnic din Cluj-Napoca, Catedra de Calculatoare

numelui clasei, i nu este necesar s l modificai). Noua clas poate fi accesat cu uurin
din tabulatorul ClassView al ferestrei Workspace (n care este adugat n mod automat fig.
2.10.d).

Fig. 2.8.

5. Includei fiierul header al noului dialog n seciunea #include a fiierului dibview.cpp:


#include "BitmapInfoDlg.h"

6. Creai o instan (obiect) al clasei i afiai dialogul n funcia de procesare dorit. Funcia
de mai jos afieaz dialog-ul doar n mod modal (codul ulterior apelul metodei DoModal() va
fi executat doar dup ce dialogul va fi nchis). Dialog-urile se pot afia i non-modal (tem
pentru cine dorete)
void CDibView::OnProcessingAfisarebmpheader()
{
// Puteti folosi acest apel de macro in cazul in care
// nu aveti nevoie sa afisati o imagine rezultat

BEGIN_SOURCE_PROCESSING;

//creare a unei instae (obiect) a clasei dialog


CBitmapInfoDlg dlgBmpHeader;
// Adaugai aici cod pentru citirea header-ului bitmap i pentru scrierea
// lui n dialog
//afieaz dialogul n mod modal
dlgBmpHeader.DoModal();
// Puteti folosi acest apel de macro in cazul in care
// nu aveti nevoie sa afisati o imagine rezultat
}

END_SOURCE_PROCESSING;

Procesarea Imaginilor - Laborator 2: Spaiul culorilor. Conversii. color grayscale i grayscale alb-negru

Fig. 2.9.

2.5.2. Proiectarea csuei de dialog


Pentru a afia sau a obine date de la utilizator folosind csua de dialog, trebuie adugate
controale la resursa dialog creat anterior. (Selectati fereastra Toolbox, selectai un control i
apoi facei click pe dialog n zona n care dorii s l plasai). Cel mai folosite tipuri de
controale sunt Static Text (pentru afiare) i Edit Box (pentru afiare/introducere). n cazul de
fa avem nevoie doar de afiare.
Cmpurile individuale (cum ar fi nlimea i limea bitmap-ului) pot fi afiate cu uurin n
controale de tip Static Text. Pentru a afia ceva ntr-un control de tip static text, acesta trebuie
s aib un ID individual dat explicit (id-ul implicit este ID_STATIC i este comun pentru
toate controalele static text, deci trebuie specificate explicit ID-uri unice (ID_STATIC1 ).
Tablele (de exemplu coninutul paletei) pot fi afiate folosind un Edit Box. Controalele Edit
box au implicit alocat cte un ID individual (nu este necesar s l modificai). Pentru
controalele de tip Edit Box stilul poate fi editat n funcie de modul de afiare dorit (fig.
2.10.a).
Odat ce controalele au fost adugate la dialog, fiecruia dintre ele trebuie s i fie asociat o
variabil. Aceasta se poate face deschiznd dialogul Add Member Variable Wizard (se face
click dreapta pe resursa dialog i se selecteaz opiunea Add Variable (fig. 2.10.b).
n dialogul Add Member Variable Wizard (fig. 2.10.c) pentru fiecare control, (identificat prin
ID) se poate aduga o variabil membru (se specific numele, tipul (selectai CString),
categoria (selectai Value), etc.). Variabilele membru asociate controalelor folosind Add
Member Variable Wizzard sunt adugate automat clasei dialog (fig. 2.10.d).

Universitatea Tehnic din Cluj-Napoca, Catedra de Calculatoare

a.

b.

c.

d
Fig. 2.10.

Procesarea Imaginilor - Laborator 2: Spaiul culorilor. Conversii. color grayscale i grayscale alb-negru

2.5.3. Afiarea n csua de dialog


Pentru a afia datele dorite n csua de dialog, datele trebuie scrise n variabilele asociate
controalelor de pe dialog. Aceast scriere trebuie efectuat n funcia de procesare, (anterior
apelului metodei DoModal() care afieaz dialogul):
void CDibView::OnProcessingAfisarebmpheader()
{

BEGIN_SOURCE_PROCESSING;

//creaz o instan a clase dialog


CBitmapInfoDlg dlgBmpHeader;
LPBITMAPINFO pBitmapInfoSrc = (LPBITMAPINFO)lpS;
dlgBmpHeader.m_Width.Format("Image width [pixels]: %d",
pBitmapInfoSrc->bmiHeader.biWidth);
// i celelalte informaii ......
// Stocarea intrrilor din palet ntr-o variabil CString m_LUT
// (asociat edit box-ului pentru afiarea paletei)
CString buffer;
for (int i=0;i<iColors;i++)
{
buffer.Format("%3d.\t%3d\t%3d\t%3d\r\n",i,
bmiColorsSrc[i].rgbRed,
bmiColorsSrc[i].rgbGreen,
bmiColorsSrc[i].rgbBlue);
dlgBmpHeader.m_LUT+=buffer;
}
//afiarea dialogului n mod modal
dlgBmpHeader.DoModal();
}

END_SOURCE_PROCESSING;

2.6. Conversia imaginilor grayscale n imagini binare (alb-negru)


O imagine binar (alb-negru) este o imagine care conine doar dou culori: alb i negru. O
imagine binar se obine dintr-o imagine grayscale printr-o operaie simpl numit binarizare
cu prag (thresholding). Binarizarea cu prag este cea mai simpl tehnic de segmentare a
imaginilor, care permite separarea obiectelor de background. (fig. 2.11).

Fig. 2.11.

10

Universitatea Tehnic din Cluj-Napoca, Catedra de Calculatoare

n acest laborator va fi discutat binarizarea cu prag fix (ales arbitrar) pentru imagini indexate
(8 bii/pixel) de tip grayscale. Binarizarea poate fi aplicat prin parcurgerea valorilor pixelilor
din imaginea surs i nlocuirea lor n imaginea destinaie cu valoarea dat de:
0 (black ) , if
lpDst[i * w j ]
255 ( white) , if

lpSrc[i * w j ] threshold
lpSrc[i * w j ] threshold

(2.2)

Valoarea pragului poate fi stabilit inline (n cadrul codului) (nerecomandat) sau printr-o
csu de dialog (recomandat). Crearea acestei resurse de dialog i adugarea la ea a unui
control de tip edit box este similar cu ceea ce s-a discutat n seciunea 2.5. Edit box-ul trebuie
s permit editarea coninutului su (adic s fie non-readonly, implicit), asa cum e artat n
figura 2.12. Tipul variabilei folosite pentru a obine sau a modifica valoarea introdus n
csua de dialog poate fi unul numeric (BYTE) (fig. 2.12).

Fig. 2.12.

Cod demonstrativ pentru obinerea valorii threshold-ului din dialog:


void CDibView::OnProcessingBinarizarecupragarbitrar()
{
BYTE threshold;
//creaz o instan (obiect) al clasei dialog
CThresholdDlg dlgThresh;
if (dlgThresh.DoModal() == IDOK) {
threshold=dlgThresh.m_thresh;
INCEPUT_PRELUCRARI();
// Parcurgere pixeli i aplicare prag.
// ...

Procesarea Imaginilor - Laborator 2: Spaiul culorilor. Conversii. color grayscale i grayscale alb-negru

11

CString buf;
buf.Format("Binarizare cu prag = %d", threshold);
SFARSIT_PRELUCRARI(buf);

2.7. Activiti practice


1. Adugai la framework-ul DIBLook o funcie pentru afiarea (ntr-o csu de dialog) a
informaiilor din header-ul bitmap i a coninutului paletei.
2. Adugai la framework-ul DIBLook o funcie de conversie de la color la grayscale
pentru imagini RGB24 (24 bii/pixel), folosind (2.1).
3. Adugai la framework-ul DIBLook o funcie de procesare pentru conversia de la color
la grayscale pentru imagini indexate (8 bii/pixel), folosind (2.1).
4. Adugai la framework-ul DIBLook o funcie de procesare care sorteaz paleta unei
imagini indexate, ca n seciunea 2.3.2.
5. Comparai coninutul unei palete sortate cu cel al unei palete nesortate (folosind
imaginea grayscale obinut din imaginea color Kids.bmp).
6. Integrai funciile de la punctele 3 i 4 ntr-una singur.
7. Adugai la framework-ul DIBLook o funcie de procesare pentru conversia de la
grayscale la alb-negru pentru imagini indexate (8 bii/pixel), folosind (2.2). Citii
valoarea pragului folosind o csu de dialog. Testai operaia de binarizare folosind
diverse imagini si diverse praguri.
8. Salvai-v ceea ce ai lucrat. Utilizai aceeai aplicaie n laboratoarele viitoare. La
sfritul laboratorului de procesare a imaginilor va trebui s prezentai propria
aplicaie cu algoritmii implementai!!!

Referine
[1] http://en.wikipedia.org/wiki/RGB_color_model
[2] http://en.wikipedia.org/wiki/Color_models
[3] http://msdn2.microsoft.com/en-us/library/ms779712(VS.85).aspx

S-ar putea să vă placă și

  • Proiect TD
    Proiect TD
    Document21 pagini
    Proiect TD
    Paun Lorin Remus
    Încă nu există evaluări
  • File L1364594122 File 51560 Dca 935 e 7
    File L1364594122 File 51560 Dca 935 e 7
    Document92 pagini
    File L1364594122 File 51560 Dca 935 e 7
    Paun Lorin Remus
    Încă nu există evaluări
  • ObtineRecipisa Octombrie 2012
    ObtineRecipisa Octombrie 2012
    Document1 pagină
    ObtineRecipisa Octombrie 2012
    Paun Lorin Remus
    Încă nu există evaluări
  • Mathcad Semnificatie Simboluri
    Mathcad Semnificatie Simboluri
    Document28 pagini
    Mathcad Semnificatie Simboluri
    sanyok07
    Încă nu există evaluări
  • 5 Indicatori
    5 Indicatori
    Document1 pagină
    5 Indicatori
    Paun Lorin Remus
    Încă nu există evaluări
  • SRA Partea 2
    SRA Partea 2
    Document19 pagini
    SRA Partea 2
    Pompiliu Popa
    Încă nu există evaluări
  • Info Proiect
    Info Proiect
    Document1 pagină
    Info Proiect
    Paun Lorin Remus
    Încă nu există evaluări
  • Lab-03 08
    Lab-03 08
    Document7 pagini
    Lab-03 08
    Paun Lorin Remus
    Încă nu există evaluări
  • Info Proiect
    Info Proiect
    Document1 pagină
    Info Proiect
    Paun Lorin Remus
    Încă nu există evaluări
  • Proiect Reglare Nivel
    Proiect Reglare Nivel
    Document14 pagini
    Proiect Reglare Nivel
    Paun Lorin Remus
    Încă nu există evaluări
  • Codificare
    Codificare
    Document70 pagini
    Codificare
    Paun Lorin Remus
    Încă nu există evaluări
  • Codificare
    Codificare
    Document70 pagini
    Codificare
    Paun Lorin Remus
    Încă nu există evaluări
  • SCD08 PDF
    SCD08 PDF
    Document55 pagini
    SCD08 PDF
    Paun Lorin Remus
    Încă nu există evaluări
  • Lista Cursuri Anul III Sem 2 Is
    Lista Cursuri Anul III Sem 2 Is
    Document1 pagină
    Lista Cursuri Anul III Sem 2 Is
    Paun Lorin Remus
    Încă nu există evaluări
  • Cap 5
    Cap 5
    Document7 pagini
    Cap 5
    hackerustsu
    Încă nu există evaluări