1. jpeg eng oddiy yo'qolgan jpeg kodlayıcıning ishlashi uchun algoritmni ko'rib chiqaylik. Butun jarayon quyidagi asosiy bosqichlardan iborat: Shakl



Download 284,36 Kb.
bet10/11
Sana17.07.2022
Hajmi284,36 Kb.
#811914
1   2   3   4   5   6   7   8   9   10   11
Bog'liq
9-Mavzu

GetNextSample()
Funktsiya: asl tasvirning keyingi pikseli haqida ma'lumot oladi va o'zgaruvchining tegishli qiymatlarini belgilaydi x, a, b, c, d, Ix, Ra, Rb, Rc, Rd. O'qilgan piksel satr oxirida bo'lsa, u holda GetNextSample () to'plamlari EOLine = 1. Boshqa barcha holatlarda EOLine = 0. Qadriyatlar Ra, Rb, Rc, Rdqadriyatlarini oldindan hisoblangan qiymatdan egallaydi Rx.
EOLine
Global o'zgaruvchisi: GetNextSample () funktsiyasi bo'yicha o'rnatiladi: 1 ga teng, agar mavjud piksel chiziqdagi oxirgi bo'lsa, aks holda 0 bo'ladi.
AppendToBitStream(a,b)
Funktsiya: bit bitdan foydalanib kodlangan bitlardan oqimga ikkilik shaklda noaniq raqamni qo'shadi. Eng muhim bitlar birinchi bo'lib qo'shiladi.
Quantize(a)
Funktsiya: "deyarli yo'qotish" holatida bashorat qilish xatoligini kvantlash uchun ishlatiladi.
ComputeRx()
Funktsiya: RxJoriy piksel uchun rekonstruksiya qilingan qiymatni qaytaradi (miqdori "taxmin qilish xatosi" ishlatiladi).
A, b, c va d piksellarining pikselni kodlashda muhim rol o'ynashi yuqoridagi rasmdan (23-rasm) aniq. Keling, bu piksellar yo'qolganda nima bo'lishini tushunishga harakat qilaylik. Shunday qilib, yuqori chiziqni kodlashda, kontekst piksellari c, b va d yo'q, shuning uchun ularning qiymatlari nolga teng. Joriy piksel chiziqning boshida yoki oxirida bo'lsa, a, c yoki d piksellari aniqlanmagan. Bu holda a va d uchun piksel bining (yoki yuqori chiziq uchun nol) rekonstruktsiya qilingan Rb qiymati ishlatiladi va c uchun qayta tiklangan qiymat avvalgi satrning birinchi harfini kodlashda ishlatiladi. Shunday qilib, kodlovchi dekoder ishining bir qismini bajarishi, ba'zi piksellarni qayta tiklashi kerak.
Kodlovchi quyidagi uchta bosqichdan boshlanadi:

  1. Gradyanlarni hisoblash. D1 = Rd – Rb, D2 = Rb – Rc, D3 = Rc – Ra.Bu qadriyatlar nolga teng bo'lsa (yoki deyarli kayıpsız bir moda, ularning mutlaq qadriyatlardan ostonasini oshmaydi), Ra bilan bir vaqtga to'g'ri piksel qator buyuk uzunligi uchun kodlayıcı serial moda foyda va qidiruvlar.

  2. Ba'zi parametrlarga ega bo'lgan Di ning uch gradyanining solishtirilishi va biz bu erda berilmaydigan oddiy qoidalar bo'yicha Qi band raqamlarini hisoblash. Har bir bantli raqam Qi intervalda [-4,4] 9 ta tamsayı qiymatidan birini olishi mumkin, shuning uchun band raqamlarining faqat 9x9x9 = 729 uch barobar bo'lishi mumkin.

  3. Hisoblash uchun Qi (barcha turdagi tripletlardan 365tani tashkil etadi, chunki 729 miqdordan biri nolga teng) tarmoqli raqamlarining mahsulotlarini mutlaq qiymatlari yordamida [0,364] intervalidan Q sonini hisoblash. Ushbu hisob-kitoblarning tafsilotlari JPEG-LS standartida belgilanmagan va kodlovchi buni har qanday qoidaga muvofiq amalga oshirishi mumkin. Q raqami mavjud piksel x ning kontekstiga aylanadi. A va N ko'rsatkichlari ishlatiladi, ularning ishlashi quyida ko'rsatilgan .

Kontekstni o'rnatganingizdan so'ng, kodlovchi piksellarni oldindan belgilaydi. Birinchidan, prognoz Px "chekka detektorli prognoz" deb ataladi:
if (Rc > = max(Ra, Rb)) Px = min(Ra, Rb);
else {
if (Rc <= min(Ra, Rb))
Px= max(Ra, Rb);
else
Px = Ra + Rb - Rc;
}
Keling, "qirrning hukmronligi" ning mohiyatini tushuntiraylik. Shu maqsadda b Keyingi qadam - tuzatish bashorat (tarafkashlik prognozlashda tuzatish) raqam belgisi orqali (uch qaram raqamlari guruhning Qi), tuzatish (sistematik xatolar chiqadi va bu erda muhokama qilinmaydi) C (Q) qadrlaydi va o'lchov MAXVAL.
if (SIGN == +1)
Px = Px + C(Q);
else
Px = Px - C(Q);

if (Px > MAXVAL)


Px = MAXVAL;
else if (Px < 0)
Px = 0;
Px prognozi topilganidan so'ng, enkoder Errval prognozini xatoni x - Px farq sifatida hisoblab chiqadi, ammo SIGN qiymati salbiy bo'lsa, uning belgisini o'zgartiradi.
Deyarli hech qanday zarar ko'rmaydigan rejimda xato nicelendirilir va kodlayıcı bu qayta tuzilgan Rx piksel qiymati x dekoder bilan bir xil tarzda foydalanadi. Kvantifikatsiya qilishning asosiy bosqichi quyidagicha:
if (Errval > 0)
Errval = (Errval + NEAR) / (2 * NEAR + 1);
else
Errval = - (Errval - NEAR) / (2 * NEAR + 1);
NEAR parametri ishlatilgan, ammo bu erda ko'rsatilmagan ba'zi tafsilotlar mavjud. Qayta qurishning asosiy bosqichi - uni topishdir Rx = Px + SIGN * Errval * (2 * NEAR + 1).
Bashoratli xato (ehtimol kvantdan keyin) domenni kamaytirishga (modulning kamaytirilishiga) olib keladi. (Keyin kodlashning asosiy bosqichiga tayyor).
if (Errval < 0)
Errval = Errval + RANGE;
if (Errval >= ((RANGE + 1) / 2))
Errval = Errval - RANGE;
Bu erda Golomb kodlari kiritilgan (asosiy parametr b). JPEG-LS da bu parametr m bilan belgilanadi. Agar m miqdori allaqachon tanlansa, Golomb kodi no'tmaslik tamsayt n ning ikki qismdan iborat: sonning to'liq sonining yagona kodi n/mva ikkitomonlama vakillik n mod m. soni n ehtimoli teng bo'lsa, bu kod, bir geometrik taqsimlash ega sonlarning uchun ideal bo'lgan (ya'ni, . Har bir geometrik taqsimlash uchun, m barpo Golomb kodi, o'rtacha eng kichik iloji uzunligi deb, m, bir qator mavjud. oddiy ishni m ga teng bo'lsa Division 2 ( ) oddiy kodlash / kod hal qilish operatsiyalari olib keladi. n kodi soni, n qolgan eng muhim bit tashkil bir terimli kod raqami. bu maxsus kodi D oldin kamida k n muhim bit, bu holda olomba tomonidan ko'rsatilgan .(1 - r) * r n , 0 < r < 1)m = 2 kG(k)
Masalan, n = 19 = 10011 2 sonining G (2) kodini hisoblaylik . K = 2 bo'lganidan keyin m = 4. Ikki eng kam sonli raqamdan boshlaymiz, 11 2 , n raqami. Ular 3, xuddi shunday n mod m (3 = 19 mod 4). Qolgan yuqori tartibli bitlar, 100 2, 4 sonini beradi, bu n / m to'liq soniga tengdir (19/4 = 4.75). Unary kodi 4 00001, ya'ni n = 19 ning G (2) kodi 00001 | 11 ni tashkil etadi.
Amaliyotda doimo son bo'lmagan sonli sonlar mavjud. I. maksimal uzunligi G (0) I + 1 ga teng va men kabi katta bo'lishi mumkin tomonidan eng ko'p belgilaymiz, u Golomb kodi hajmini cheklash kerak bo'ladi. Bu esa, Golomb kodining LG(k, glimit)ikkita parametridan kelib chiqqan holda, maxsus Golomb kodi yordamida amalga oshiriladi . Birinchidan, n sonining eng muhim sonidan q sonini yaratish kerak. Agar q < glimit— [log I] — 1, kodi LG(k, glimit)LG (k] kodi bilan bir vaqtga to'g'ri keladi. Aks holda, terimli soni kodni tayyorlangan glimit — ceil(log I) — 1(ya'ni, glimit — ceil(log I) — 1faqat 1 tomonidan qo'llab-quvvatlangan nol). Bu ESC kodi, keyin zarur ikkilik kod sifatida bajaradi n — 1ning ceil(log I)oz.
Bashoratdagi xatolar, albatta, ijobiy raqamlar emas. Ular nol yoki salbiy bo'lishi mumkin bo'lgan ayrim farqlarga tengdir. Biroq Golomb kodlari ijobiy raqamlar uchun yaratilgan. Shuning uchun, kodlashdan oldin salbiy xato qiymatlari salbiy bo'lmagan sonlar to'plamiga aks ettirilishi kerak. Buning uchun ekranni ishlating:
MErrval =
2 * Errval если Errval >= 0,
2 * |Errval| если Errval < 0.
Ushbu ekran ketma-ketlikda salbiy va ijobiy qadriyatlar oralig'ida 0, -1, +1, -2, +2, -3,....
Quyidagi jadvalda LG(2, 32)alifbo 256 (ya'ni, I = 255va ceil(log I) = 8) bo'lishi sharti bilan, ba'zi taxmin xatolar, ko'rsatilgan qiymatlar va ularning kodlari keltirilgan .
Jadval: prognoz xatolar, xaritalar va LG kodlari (2, 32)

Xato taxmin

Ko'rsatilgan qiymat

Kod

0

0

1 00

-1

1

1 01

1

2

1 10

-2

3

1 11

2

4

01 00

-3

5

01 01

3

6

01 10

-4

7

01 11

4

8

001 00

-5

9

001 01

5

10

001 10

-6

11

001 11

6

12

0001 00

...







50

100

000000000000
000000000001
01100011

Endi biz Golomb kodlari uchun parametr k ni tanlashni muhokama qilishimiz kerak. Bu mos ravishda amalga oshiriladi. K parametrlari kontekstga bog'liq bo'lib, qiymati har safar bu kontekst bilan belgilangan piksel aniqlanadi. K hisoblash oddiy STRING ifodalanishi mumkin:
for (k=0; (N[Q]<A va N - 0 dan, bu formulada 364 uchun tillo, indeks, Q ikki massivida kontekstida bir indeks sifatida ishlatiladi. Boshida k koeffitsienti nolga tenglashtiriladi va keyinchalik loop amalga oshiriladi. Ipning har bir iteratsiyasida N [Q] qator elementi kbit bilan chapga siljiydi va A [Q] bilan taqqoslanadi. Agar N [Q] ning kaydırılmış qiymati A [Q] dan katta yoki unga teng bo'lsa, k ning joriy qiymati tanlanadi. Aks holda k koeffitsienti 1 ga ko'paytiriladi va test takrorlanadi.
k sonini topish so'ng, prognoz xato Errval yordamida aylanadi tenglama bir kodi LG (k, chegara) bilan kodlangan soni MErrval, ham. LIMIT raqam - bu parametr. A va N (B yordamchi qatori bilan birga) turkumlarini yangilash quyidagi kod qismini ko'rsatadi (RESET parametri dastur tomonidan o'rnatiladi):
B[Q] = B[Q] + Errval * (2 * NEAR + 1);
A[Q] = A[Q] + abs(Errval);
if (N[Q] == RESET) {
A[Q] = A[Q]>>1;
B[Q] = B[Q]>>1;
N[Q] = N[Q]>>1;
}
N[Q] = N[Q] + 1;
Keling, prognozning tizimli o'zgaruvchanligini hisoblash haqida gapiraylik. Prognozni tuzatuvchi C [Q] qiymati x ning piksel kodlash oxirida yangilanishi kerak. Buning uchun ikkita parametr kerak - B [Q] va [Q]. N [Q] - dastlabki vaqtdan boshlab Q kontekstidagi voqealar soni. B [Q] - C [Q] qiymatini iteratsiya uchun maksimal ravishda yangilanishini ta'minlaydigan tizimiy shovqin. Shunday qilib, C [Q] ning prognostik qiymati quyidagi kodlarga muvofiq hisoblanadi:
if (B[Q] <= -N[Q]) {
B[Q] = B[Q] + N[Q];
if (C[Q] > MIN_C)
C[Q] = C[Q] - 1;
if (B[Q] <= -N[Q])
B[Q] = -N[Q] + 1;
}
else if (B[Q] > 0) {
B[Q] = B[Q] - N[Q];
if (C[Q] < MAX_C)
C[Q] = C[Q] + 1;
if (B[Q] > 0)
B[Q] = 0;
}
MIN_C va MAX_C sobit belgilari o'z navbatida -128 va 127 teng bo'lgan indekslar majmuasining C [0..364] minimal va maksimal qiymatlari hisoblanadi.
Ketma-ket rejimda kodlash boshqacha tarzda amalga oshiriladi. Bu ketma-ket piksel X belgilangan bo'lsa kodlayıcısı bu rejimini tanlaydi Eslatib o'tamiz, kimning qadriyatlar mos va pixel qiymati Ra kontekstni tiklanadi IX. "Jarayon deyarli kayıpsız" variantni uchun, serideki piksellar, tengsizlikka mos IX qiymatlari bo'lishi kerak |Ix - Ra| <= NEAR. Seriya joriy satrdan oshmasligi kerak. kodlangan Run uzunligi (pixel kodlangan u Ra, chunki, juda zarur emas) va Xatning oxirida oldin ketma-ket oxiri bo'lsa, kodi darhol qayd qilinadi (qator kesadi) Keyingi pikselga uning parol uzunligi keyin. Enkoderning bu ikki asosiy vazifasi shu tarzda mavjud

  1. seriyani kuzatish va uning uzunligini kodlashda;

  2. seriyani to'xtatgan piksel kodlashda.

Kuzatuv ketma-ketligi quyidagicha amalga oshirilishi mumkin:
RUNval = Ra;
RUNcnt = 0;
while (abs(Ix - RUNval) <= NEAR) {
RUNcnt = RUNcnt + 1;
Rx = RUNval;
if (EOLine == 1)
break;
else
GetNextSample();
}
Kiritilgan qiymatlarning ba'zilarini tushuntirib beraylik: RUNcnt takrorlanuvchi piksellarning hisoblagichi (ketma-ket rejim uchun) va RUNval qayta tiklangan takrorlanadigan pikselning joriy qiymati.
Seriyani kodlash jarayonini tasvirlaylik. Birinchi kod qismida uzunlik rm seriyali segmentlar uchun kodlash tasvirlangan:
while (RUNcnt >= (1<AppendToBitStream(1, 1);
RUNcnt = RUNcnt - (1<if (RUNindex < 31))
RUNindex = RUNindex + 1;
}
Quyidagi kod rm dan kichikroq uzunlikdagi qatorlar uchun kodlashni ko'rsatib beradi:
if (EOLine == 0) {
AppendToBitStream(0, 1);
AppendToBitStream(RUNcnt, J[RUNindex]);
if (RUNindex > 0)) {
RUNindex = RUNindex - 1;
}
else if (RUNcnt > 0)
AppendToBitStream(1, 1);
Bu erda enkoder rk tomonidan ko'rsatilgan 32 ta yozuvdan iborat J stolidan foydalanadi. J qiymatlari bilan boshlanadi
0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 9, 10, 11, 12, 13, 14, 15.
Rk ning har bir qiymati uchun rm = 2 rk ni nazarda tutamiz . Rm raqamlari (ulardan faqat 32 tasi) kodning tartibini deb nomlanadi. birinchi 4 rk qadriyatlar = 2 rm bor 0 2 = ikkinchi to'rt RM = 1. 1 = 2, va keyingi to'rt RM = 2 uchun 2 O'tgan soni RM-yilda = 4. = 2 15 = 32768. kodlayıcısı tartibini amalga oshiradi , deb kodi , o'zgaruvchida saqlanadigan ketma-ketlikni topish uchunRUNlen. Keyinchalik, bu o'zgaruvchining qadriyatlari rm ketma-ket raqamlariga teng bo'lgan shartlarga bo'linib kodlangan. Misol uchun, agar RUNlen=6, u 6 = 1 + 1 + 1 + sifatida taqdim etiladi 1 + 2 dastlabki besh raqamlari rm yordamida. 5 bit bilan kodlangan. Yozib olish buyruqlar bilan amalga oshiriladi AppendToBitStream(l,l). 1 yozuvi yozilgan har bir rm qiymati mos ravishda chiqariladi RUNlen. Agar RUNlenu 6 boshiga teng bo'lsa , u asta-sekin 5, 4, 3, 2 va 0 ga kamayadi.
Bu RUNlenketma-ketlikning uzunligi rm sonlarining yig'indisiga teng bo'lmasligi mumkin. Masalan RUNlen = 7. Bu holda, kodi bit prefiks va qolganlari uning ortidan, besh 1 bitlarini yoziladiRUNlen(bu, masalan, 1) bit RK bir qator sifatida tasvir yozilgan (2 teng bizning misolda joriy qiymatini rk). Ushbu oxirgi operatsiya protsedura chaqirilib amalga oshiriladi AppendToBitStream (RUNcnt, J[RUNindex]). Agar qator boshqa piksel bilan uzilgan bo'lsa, prefiks bit 0 ga teng. Seriya chiziqning oxiriga ketsa, oldingi bit bit 1 ga teng.
Enkoderning pikselli seriyasini kodlashdan iborat bo'lgan kodlovchi ikkinchi asosiy vazifasi joriy pikselni kodlash bilan bir xil tarzda amalga oshiriladi. Keling, uni amalga oshirish tafsilotlarini muhokama qilamiz.
yangi kodlangan pixel, bir xalaqit sabab qanday: kodlash Kurs piksel Row chek so'zini vaziyatni ko'rib chiqaylik? Bu muammo joriy qiymati Ix joy x va rekonstruktsiya yoki b bir piksel qiymatining o'rtasidagi kodlangan farqni hal qilinadi (bu x nisbatan qo'shni piksel deb chaqirib - 23-shakl qarang ..). Bunday holatda ikkita turli holatlar hisobga olinadi: birinchi, qachonabs(Ra - Rb) <= NEAR, ikkinchisi - aks holda. Aslida, kodlashtirish pixel qator, chiqib ketish, IX Ra katta yaqin qiymati har xil bo'lishi kerak, deb faqat bir qatorda bilan muntazam moda yangi piksel kodlash deb shu yo'llar bilan sodir aks holda Kurs davom etadi kodlar. Biz bajarilishi kerak bo'lgan operatsiyalarni ta'riflaymiz:
if (abs(Ra - Rb) <= NEAR)
RItype = 1;
else
RItype = 0;
if (RItype == 1)
Px = Ra;
else
Px = Rb;
Errval = Ix - Rb;
Yuqoridagi kod parchasi RItype indeksini va piksel x uchun bashorat qilish xatoligini bildiradi. So'ngra, agar kerak bo'lsa, "Errval" belgisini o'zgartiring va "deyarli kayıpsız" variantni uchun, shuningdek, bashorat xatoini kantitatifleştirin:
if ((RItype == 0) && (Ra > Rb)) {
Errval = -Errval;
SIGN = -1;
else
SIGN = 1;
if (NEAR > 0) {
Errval = Quantize(Errval);
Rx = ComputeRx();
}
else
Rx = Ix;
Errval = ModRange(Errval, RANGE);
Keling, yordamchi o'zgaruvchan TEMPni hisoblang, bu Golomb kodlaridagi parametr k ni hisoblash uchun ishlatiladi.
if (RItype == 0)
TEMP = A[365];
else
TEMP = A[366] + (N[366]>>1);
Uni o'rnataylik Q = RItype + 365. quyidagicha Golomb kodlarni K parametr hisoblanadi: for (k=0; (N[Q]<if (Errval < 0) {
Nn[Q] = Nn[Q] + 1;
A[Q] = A[Q] + ((EMErrval + 1 -RItype)>>1);
if (N[Q] == RESET) {
A[Q] = A[Q]>>1;
N[Q] = N[Q]>>1;
Nn[Q] = Nn[Q]>>1;
}
N[Q] = N[Q] + 1;
Bu JPEG-LS enkoderining tavsifini to'ldiradi. Bu, albatta, tugallanmaganligini unutmang, ammo biz maqsad qilmaganmiz - bu usulning standartlarini nusxalash. Barcha eskirgan ma'lumotlarni standartlardan topishingiz mumkin. Keling, dekoderning ishlash printsiplarining qisqacha tavsifini ko'rib chiqaylik.

Download 284,36 Kb.

Do'stlaringiz bilan baham:
1   2   3   4   5   6   7   8   9   10   11




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©hozir.org 2024
ma'muriyatiga murojaat qiling

kiriting | ro'yxatdan o'tish
    Bosh sahifa
юртда тантана
Боғда битган
Бугун юртда
Эшитганлар жилманглар
Эшитмадим деманглар
битган бодомлар
Yangiariq tumani
qitish marakazi
Raqamli texnologiyalar
ilishida muhokamadan
tasdiqqa tavsiya
tavsiya etilgan
iqtisodiyot kafedrasi
steiermarkischen landesregierung
asarlaringizni yuboring
o'zingizning asarlaringizni
Iltimos faqat
faqat o'zingizning
steierm rkischen
landesregierung fachabteilung
rkischen landesregierung
hamshira loyihasi
loyihasi mavsum
faolyatining oqibatlari
asosiy adabiyotlar
fakulteti ahborot
ahborot havfsizligi
havfsizligi kafedrasi
fanidan bo’yicha
fakulteti iqtisodiyot
boshqaruv fakulteti
chiqarishda boshqaruv
ishlab chiqarishda
iqtisodiyot fakultet
multiservis tarmoqlari
fanidan asosiy
Uzbek fanidan
mavzulari potok
asosidagi multiservis
'aliyyil a'ziym
billahil 'aliyyil
illaa billahil
quvvata illaa
falah' deganida
Kompyuter savodxonligi
bo’yicha mustaqil
'alal falah'
Hayya 'alal
'alas soloh
Hayya 'alas
mavsum boyicha


yuklab olish