Վերադառնալ

Պե՞տք է RGB արժեքները նորմալացնել 255-ի, թե 256-ի վրա
SiTech AI Team2 րոպե ընթերցում

Պե՞տք է RGB արժեքները նորմալացնել 255-ի, թե 256-ի վրա

Գրաֆիկայի ծրագրավորող Պեկկա Վյաանյանենը քննում է 8-բիթանոց RGB արժեքները լողացող ստորակետի թվերի փոխարկելու երկու տարածված եղանակը և բացատրում, երբ է ճիշտ 255-ի վրա բաժանելը և երբ կարելի է արդարացնել 256-ի վրա բաժանումը։

8-բիթանոց գույնի արժեքները լողացող ստորակետի թվերի փոխարկելը և հետ վերադարձնելը պատկերների մշակման ցանկացած ծրագրի առաջին որոշումներից է, և այստեղ երկու մոտեցում կա։ Գրաֆիկայի ծրագրավորող Պեկկա Վյաանյանենը իր 30fps.net բլոգում հրապարակել է այս հարցի վերլուծությունը՝ համեմատելով 255-ի վրա ստանդարտ բաժանումը 0,5 շեղում ավելացնող և 256-ի վրա բաժանող այլընտրանքի հետ։

Երկու բանաձև

Ստանդարտ մոտեցումը պատկերակետերը փոխարկում է img / 255.0-ով և հետ գրում trunc(result * 255 + 0.5)-ով. 0 ամբողջ թիվը դառնում է 0.0, իսկ 255-ը՝ 1.0 — ճիշտ այն սկզբունքով, որն օգտագործում են GPU-ները չնշանավոր նորմալացված ձևաչափերի համար։ Այլընտրանքը փոխարկում է (img + 0.5) / 256.0-ով և գրում trunc(result * 256)-ով, ինչի շնորհիվ յուրաքանչյուր լողացող արժեք ընկնում է երկու ամբողջ թվերի ուղիղ մեջտեղում։

Այլընտրանքի գործնական գինն այն է, որ սևն այլևս 0.0 չէ. 0 ամբողջ թիվը վերծանվում է որպես 0.001953125, ուստի սև պատկերակետերը ճանաչող կոդը պետք է իմանա այդ հաստատունը և կապվում է 8-բիթանոց միջակայքին։ Հեղինակը նշում է, որ ստանդարտ բանաձևով պատկերը վերադառնում է առանց կորստի, իսկ դրա անճշտությունը — 128/255-ը մոտավորապես 0.501961 է — մնում է ամենացածր կարգում՝ մոտ 0.00001 տոկոս հարաբերական սխալով։

Կիսալայնության զամբյուղներ ծայրերում

Ստանդարտ բանաձևի թույլ կողմը ծայրերում է երևում։ Քանի որ դրա լողացող միջակայքը փոքր-ինչ ավելի լայն է, քան [0, 1]-ը, 0-ի և 255-ի վրա կլորացվող զամբյուղները մյուսներից երկու անգամ նեղ են, ուստի հավասարաչափ բաշխված աղմուկը ծայրային արժեքներ առաջացնում է երկու անգամ ավելի հազվադեպ։ Հոդվածը դա ցույց է տալիս միլիոն պատահական արժեքների հիստոգրամով, ապա պնդում, որ դա հազվադեպ է նշանակալի. միջակայքից փոքր-ինչ դուրս գտնվող արժեքները միևնույն է կլորանում են ճիշտ ամբողջ թվի, իսկ սևից 0.005 հանելը երկու սխեմաներում էլ ավարտվում է 0-ով։

Քվանտացման տեսության լեզվով դրանք 255 մակարդակով mid-riser և 256 մակարդակով mid-tread քվանտացուցիչներ են։ Վերակառուցման սխալը 256-ի վրա բաժանելիս փոքր-ինչ ցածր է՝ միջին բացարձակ սխալը 1/1024 ընդդեմ 1/1020-ի, սակայն միայն այն դեպքում, երբ նույն կոդը վերահսկում է և՛ կոդավորումը, և՛ վերծանումը։ Ուրիշների պատկերները այլընտրանքային մասշտաբով բեռնելը տեսականորեն սխալ վերծանում է և խառնում է երկու քվանտացուցիչները։

Ինչ անել

Եզրակացությունը դիտավորյալ գործնական է. եթե մշակում եք ձեր չստեղծած պատկերներ, նորմալացրեք 255-ի վրա։ 256-ի վրա բաժանումն արդարացված է, երբ դուք եք վերահսկում և՛ պահպանումը, և՛ բեռնումը, զրոյի զրոյի վերածվելը ձեզ պետք չէ, և համաձայն եք մշակման կոդը կապել 8-բիթանոց միջակայքին։ Հոդվածում քննարկվում է նաև Քրիս Լոմոնտի ավելի ուշ «լավագույն մեթոդը», որը վերծանում է k/255.0-ով և կոդավորում clamp(floor(x * 256), 0, 255)-ով՝ պահպանելով ամբողջ միջակայքը և հավասար զամբյուղները՝ մոտ երկու անգամ ավելի մեծ քվանտացման սխալի գնով, որն առավելագույնին հասնում է ծայրերում։

SiTech

SiTech — AI-ով հզորացված վեբ մշակում

Ստեղծում ենք արագ ու ժամանակակից կայքեր և AI-ը ներդնում իրական բիզնես գործընթացներում։ Ունե՞ք նախագիծ կամ հարց։ Ուրախ կլինենք օգնել։