b'\n_START_ARTICLE_\nProcesare paralel\xc4\x83 a imaginilor\n_START_SECTION_\nReprezentarea paralel\xc4\x83 a imaginilor\n_START_PARAGRAPH_\nFie o matrice de elemente punctiforme, suficient de mare pentru a avea un element punctiform pentru fiecare pixel din imagine. \xc3\x8en condi\xc8\x9biile \xc3\xaen care exist\xc4\x83 mai pu\xc8\x9bine elemente punctiforme se poate avea un element puctiform virtual pentru fiecare pixel, urm\xc3\xa2nd ca sistemul de operare sau compilatorul s\xc4\x83 se ocupe de itera\xc8\x9bie. Aceast\xc4\x83 arhitectur\xc4\x83 este reflecatata \xc8\x99i definit\xc4\x83 \xc3\xaen Programul 1._NEWLINE_M\xc4\x83rimea elementului punctiform nu este predefinit\xc4\x83, ea put\xc3\xa2nd fi setat\xc4\x83 de programatorul aplica\xc8\x9biei. Variabilele dreata, st\xc3\xa2nga, sus, jos \xc8\x99i cele patru diagonale pot fi utilizate cu u\xc8\x99urin\xc8\x9b\xc4\x83 pentru schimbul de date._NEWLINE_Programul 1: Configurarea procesorului pentru datele imaginii._NEWLINE_CONFIGURATION grid[*],[*];CONNECTIONright:grid[i,j]<->grid[i ,j+1]:left;up :grid[i,j]<->grid[i-1,j ]:down;up_l :grid[i,j]<->grid[i-1,j-1]:down_r;up_r :grid[i,j]<->grid[i-1,j+1]:down_l;_NEWLINE_Acum se definesc tipurile de date paralele. Precum \xc3\xaen procesarea secven\xc8\x9bial\xc4\x83 a imaginilor, trebuie avute \xc3\xaen vedere diferen\xc8\x9bele \xc3\xaentre imagini color, inmagini \xc3\xaen nivel de gri \xc8\x99i imagini binare. Contrastele pentru negru \xc8\x99i alb sunt secificate pentru fiecare tip. Detaliile se pot observa \xc3\xaen Programul 2._NEWLINE_Programul 2: Tipuri de date._NEWLINE_TYPE binary = BOOLEAN;_NEWLINE_     gray = [0..255];_NEWLINE_     color = RECORD_NEWLINE_               red, green, blue: gray_NEWLINE_             END;CONST b_black = TRUE;_NEWLINE_      b_white = FALSE;_NEWLINE_      g_black = 0;_NEWLINE_      g_white = 255;_NEWLINE_      c_black = color( 0, 0, 0);_NEWLINE_      c_white = color(255,255,255);\n_START_SECTION_\nOpera\xc8\x9bii punctuale \xc8\x99i operatori locali\n_START_PARAGRAPH_\n\xc3\x8en urm\xc4\x83toarele subsectiuni vor fi prezentate c\xc3\xa2teva opera\xc8\x9bii de baza \xc3\xaempreun\xc4\x83 cu implementarea lor paralel\xc4\x83. Se va observ\xc4\x83 c\xc4\x83, \xc3\xaen cele mai multe cazuri, abordarea paralel\xc4\x83 este mai simpl\xc4\x83 \xc8\x99i mai lizibil\xc4\x83 dec\xc3\xa2t abordarea direct\xc4\x83. Header-ul unei poeratii punctuale ar\xc4\x83ta precum exemplul de mai jos._NEWLINE_PROCEDURE xyz(img: VECTOR OF gray): _NEWLINE_          VECTOR OF gray;_NEWLINE_\xc3\x8en timp ce header-ul general al unei opera\xc8\x9bii locale ar\xc4\x83ta precum:_NEWLINE_PROCEDURE xyz(img: grid OF gray): _NEWLINE_grid OF gray;_NEWLINE_\xc3\x8en ambele cazuri, o imagine gri este convertit\xc4\x83 \xc3\xaen alt\xc4\x83 imagine. Folosing cuv\xc3\xa2ntul cheie \xe2\x80\x9dVECTOR\xe2\x80\x9c care define\xc8\x99te un parametru de orice tip de dat\xc4\x83, deci declararea este mult mai general\xc4\x83 dec\xc3\xa2t \xc3\xaen exemplul de configurare anterior. O consecin\xc8\x9b\xc4\x83 logic\xc4\x83 este aceea c\xc4\x83 schimbul local de date, \xc3\xaen procedura este posibil doar dac\xc4\x83 parametrii folosesc grila de configurare, \xc3\xaen timp de VECTOR ascunde structura de configurare.\n_START_SECTION_\nOpera\xc8\x9bii punctuale\n_START_PARAGRAPH_\nCea mai simpl\xc4\x83 clasa de operatori de imagine sunt operatorii punctuali. Un nou pixel este creat ca o func\xc8\x9bie a pixelului original; nu sunt utilizare date ale pixelilor din apropriere. Deci, opera\xc8\x9biile punctuale nu au dependin\xc8\x9be \xc8\x99i pot fi foarte u\xc8\x99or calculate \xc3\xaen paralel.\n_START_SECTION_\nMedia\n_START_PARAGRAPH_\nUrm\xc4\x83torii operatori sunt locali, care pentru a realiza o opera\xc8\x9bie pe un pixel, un num\xc4\x83r de pixeli vecini trebui lua\xc8\x9bi \xc3\xaen considerare. Mai multe zone de pizeli vecini nust posibile: fie st\xc3\xa2nga/dreapta \xc8\x99i sus/jos implicatnd 5 pixeli, fie to\xc8\x9bi vecinii direc\xc8\x9bi ai unui pixel (3*3) implic\xc3\xa2nd 9 pixeli, fie 5*5 implic\xc3\xa2nd 25 de pixeli. Desigur cu c\xc3\xa2t lu\xc4\x83m \xc3\xaen cosiderare mai mul\xc8\x9bi vecini cu at\xc3\xa2t cre\xc8\x99tem mai mult timpul de calcul. Acceul la pixeli vecini este implementat prin schimb de date local, \xc3\xaentr-un mod paralel. Programul 3: \xc3\xaentindere pe plan de gri_NEWLINE_PROCEDURE gray_stretch(img: _NEWLINE_  VECTOR OF gray; g_min,g_max: gray):_NEWLINE_    VECTOR OF gray;(* stretch values to g_min..g_max *)VAR tmax,tmin: INTEGER;BEGIN_NEWLINE_  tmin := REDUCE.MIN(img);_NEWLINE_  tmax := REDUCE.MAX(img);_NEWLINE_  (* avoid division by 0 *)_NEWLINE_  IF tmin = tmax THEN INC(tmax) END;_NEWLINE_  RETURN (g_max-g_min) * (img-tmin)_NEWLINE_        DIV (tmax-tmin) + g_min;END gray_stretch;'