Discrete cosine transform
Diskret kosinus o'zgarishi (DCT) turli chastotalarda
tebranuvchi kosinus funktsiyalari yig'indisi nuqtai nazaridan
ma'lumotlar nuqtalarining cheklangan ketma-ketligini
ifodalaydi. 1972 yilda Nosir Ahmad tomonidan taklif qilingan
DCT signallarni qayta ishlash va ma'lumotlarni siqishda keng
qo'llaniladigan transformatsiya usuli hisoblanadi. U raqamli
tasvirlar (masalan, JPEG va HEIF kabi, kichik yuqori chastotali
komponentlar tashlab yuborilishi mumkin), raqamli video
(MPEG va H.26x kabi), raqamli audio (Dolby Digital, MP3
kabi) kabi koʻpgina raqamli axborot vositalarida qoʻllaniladi.
va AAC), raqamli televidenie (SDTV, HDTV va VOD kabi),
raqamli radio (AAC+ va DAB+ kabi) va nutqni kodlash (AAC-
LD, Siren va Opus kabi). DCTlar, shuningdek, raqamli
signallarni qayta ishlash, telekommunikatsiya qurilmalari,
tarmoq o'tkazish qobiliyatini kamaytirish va qisman
differentsial tenglamalarni raqamli hal qilish uchun spektral
usullar kabi ko'plab boshqa ilovalar uchun ham muhimdir.
Siqilish uchun sinus funksiyasidan ko'ra kosinusdan
foydalanish juda muhim, chunki (quyida tasvirlanganidek)
odatdagi signalni taxmin qilish uchun kamroq kosinus
funksiyalari kerak bo'ladi, differensial tenglamalar uchun esa
kosinuslar chegara shartlarining ma'lum bir tanlovini
ifodalaydi. Xususan, DCT bu Furye bilan bog'liq bo'lgan
diskret Furye transformatsiyasiga (DFT) o'xshash, lekin faqat
haqiqiy raqamlardan foydalanadi. DCTlar odatda davriy va
nosimmetrik ravishda kengaytirilgan ketma-ketlikning Furye
seriyali koeffitsientlari bilan bog'liq, DFTlar esa faqat davriy
ravishda kengaytirilgan ketma-ketliklarning Furye seriyasi
koeffitsientlari bilan bog'liq. DCTlar uzunligi taxminan ikki
baravar bo'lgan DFT larga ekvivalent bo'lib, ular teng
simmetriyaga ega bo'lgan haqiqiy ma'lumotlarda ishlaydi
(chunki real va hatto funktsiyaning Furye o'zgarishi haqiqiy
va juftdir), holbuki ba'zi variantlarda kirish va/yoki chiqish
ma'lumotlari yarmiga siljiydi. namuna. Sakkizta standart DCT
varianti mavjud, ulardan to'rttasi keng tarqalgan.
Blokni siqish deb ham ataladigan DCT siqish, diskret DCT
bloklari to'plamidagi ma'lumotlarni siqadi. DCT bloklari bir
qancha oʻlchamlarga ega boʻlishi mumkin, jumladan, standart
DCT uchun 8x8 piksel va 4x4 va 32x32 piksel oraligʻida turl
i
xil butun DCT oʻlchamlari. DCT kuchli "energiya siqish"
xususiyatiga ega , yuqori ma'lumotlarni siqish nisbatlarida
yuqori sifatga erisha oladi. Biroq, og'ir DCT siqish
qo'llanilganda blokli siqish artefaktlari paydo bo'lishi
mumkin. DCT signalni qayta ishlashda eng ko'p
qo'llaniladigan transformatsiya texnikasi va hozirgacha
ma'lumotlarni siqishda eng ko'p qo'llaniladigan chiziqli
transformatsiyadir. Siqilmagan raqamli media, shuningdek,
yo'qotishsiz siqish uchun amaliy darajada yuqori xotira va
tarmoqli kengligi talablari mavjud edi, bu yuqori samarali
DCT yo'qotuvchi siqish texnikasi tufayli sezilarli darajada
kamaytirildi, ma'lumotlarni siqish nisbati uchun 8:1 dan 14:1
gacha. yaqin studiya sifati, maqbul sifatli kontent uchun 100:1
gacha DCT siqish standartlari raqamli tasvirlar, raqamli
fotosuratlar, raqamli video, oqimli media, raqamli
televideniya, oqimli televidenie, talab boʻyicha video kabi
raqamli media texnologiyalarida qoʻllaniladi. (VOD), raqamli
kino, yuqori aniqlikdagi video (HD video) va yuqori
aniqlikdagi televizor (HDTV).
DCT va xususan DCT-II ko'pincha signal va tasvirni qayta
ishlashda, ayniqsa yo'qotadigan siqishni uchun ishlatiladi,
chunki u kuchli "energiya siqilish" xususiyatiga ega odatdagi
ilovalarda, signalning aksariyat qismi ma'lumotlar odatda
DCT ning bir nechta past chastotali komponentlarida
to'planadi. Kuchli korrelyatsiya qilingan Markov jarayonlari
uchun DCT Karxunen-Lev konvertatsiyasining siqilish
samaradorligiga yaqinlashishi mumkin (bu dekorrelyatsiya
ma'nosida optimaldir). Quyida tushuntirilganidek, bu kosinus
funktsiyalarida yashirin bo'lgan chegara shartlaridan kelib
chiqadi. DCTlar qisman differensial tenglamalarni spektral
usullar bilan yechishda ham keng qo'llaniladi, bunda DCT ning
turli xil variantlari massivning ikki uchida bir oz farq qiluvchi
juft/toq chegara shartlariga to'g'ri keladi. DCTlar Chebishev
polinomlari bilan ham chambarchas bog'liq va tezkor DCT
algoritmlari (quyida) Chebishev ko'phadlari qatori bo'yicha
ixtiyoriy funktsiyalarni Chebishevga yaqinlashtirishda,
masalan, Klenshou-Kertis kvadraturasida qo'llaniladi. DCT
multimedia telekommunikatsiya qurilmalari uchun kodlash
standartidir. U bit tezligini pasaytirish va tarmoq o'tkazish
qobiliyatidan foydalanishni kamaytirish uchun keng
qo'llaniladi. DCT siqish raqamli signallar uchun zarur bo'lgan
xotira miqdori va tarmoqli kengligini sezilarli darajada
kamaytiradi.
// Java program to perform discrete cosine transform
import java.util.*;
class GFG
{
public static int n = 8,m = 8;
public static double pi = 3.142857;
// Function to find discrete cosine transform and print it
static strictfp void dctTransform(int matrix[][])
{
int i, j, k, l;
// dct will store the discrete cosine transform
double[][] dct = new double[m][n];
double ci, cj, dct1, sum;
for (i = 0; i < m; i++)
{
for (j = 0; j < n; j++)
{
// ci and cj depends on frequency as well as
// number of row and columns of specified matrix
if (i == 0)
ci = 1 / Math.sqrt(m);
else
ci = Math.sqrt(2) / Math.sqrt(m);
if (j == 0)
cj = 1 / Math.sqrt(n);
else
cj = Math.sqrt(2) / Math.sqrt(n);
// sum will temporarily store the sum of
// cosine signals
sum = 0;
for (k = 0; k < m; k++)
{
for (l = 0; l < n; l++)
{
dct1 = matrix[k][l] *
Math.cos((2 * k + 1) * i * pi / (2 * m)) *
Math.cos((2 * l + 1) * j * pi / (2 * n));
sum = sum + dct1;
}
}
dct[i][j] = ci * cj * sum;
}
}
for (i = 0; i < m; i++)
{
for (j = 0; j < n; j++)
System.out.printf("%f\t", dct[i][j]);
System.out.println();
}
}
// driver program
public static void main (String[] args)
{
int matrix[][] = { { 255, 255, 255, 255, 255, 255, 255, 255 },
{ 255, 255, 255, 255, 255, 255, 255, 255 },
{ 255, 255, 255, 255, 255, 255, 255, 255 },
{ 255, 255, 255, 255, 255, 255, 255, 255 },
{ 255, 255, 255, 255, 255, 255, 255, 255 },
{ 255, 255, 255, 255, 255, 255, 255, 255 },
{ 255, 255, 255, 255, 255, 255, 255, 255 },
{ 255, 255, 255, 255, 255, 255, 255, 255 } };
dctTransform(matrix);
}
}
Do'stlaringiz bilan baham: |