لقد ترددت كثيرا في كتابة هذا المقال، وكان مصدر التردد أنني أود الكتابة باستفاضة لا يتسع لها المجال وخصوصا الاستفاضة في المقدمة وبعض التفاصيل الفنية اللاحقة. هدف المقال التعريف بفرع من فروع علم الحاسب الآلي وتحديدا "ضغط البيانات" Data Compression هذا الفرع الذي بدأ يرى النور على يد العالم "شانون" 1948 م. هذا الفرع مثله مثل الجندي المجهول في المعارك، كثير هم الأبطال المجهولون اسماً والعظماء عملاً.
ضغط البيانات وطرق التشفير والترميز مرتبطون كل منهما بالآخر وتطبيقاتهم تكاد لا تحصى وهو له الفضل في تطور علم الاتصالات والطفرة التي حدثت به في السنوات القليلة الماضية.
ضغط البيانات يمتعك عند التعامل مع أساليبه أو القراءة عنه، فهو قريب من الفكر الإنساني البديهي وعند تتبع تسلسل تطوره، ترى كيف تلك الأفكار أصبحت مركبة وأصبحت مؤثرة في مجالات شتى كانت لن تقوم لولا هذا المجال.
دعني أسرد لك بعض التطبيقات التي تطورت بل ظهرت للوجود بفضل هذا المجال
- التصوير الضوئي الرقمي Digital Photography
- أجهزة الاستقبال من الأقمار الإصطناعية الرقمية Digital Satellite Receivers
- أجهزة الترفيه المنزلية (DVD , VCD, MP3 . etc).
- أجهزة التليفونات المحمولة.
- نقل الصوت والصورة عبر قنوات الاتصال المختلفة (مثل الإنترنت، أجهزة المحمول، الشبكات اللاسلكية وغيرها) .
- الأجهزة الطبية المتعاملة مع الصور (مثل السونار وأجهزة الأشعة الرقمية).
ضغط البيانات ينقسم إلى قسمين أو نوعين رئيسيين:
الأول: ضغط البيانات دون أي فقد Lossless Compression :
أي أن البيانات بعد ضغطها Compress واسترجعها بفك الضغط Uncompress تكون تماما متشابهة كما الأصل. ومن أشهر الأمثلة لهذا النوع البرنامج الشهير WinZip ومن أفضل الأمثلة لاستخدام هذا النوع هو ضغط البيانات النصية Text (فلا يعقل أن نفقد جزئ من البيانات عند عمليات الضغط وفك الضغط).
الثاني: ضغط البيانات مع الفقد Lossy Compression
أي إننا نفقد جزئ من البيانات نتيجة هذا الضغط وتكون البيانات الناتجة بعد عملية الضغط وفك الضغط ليست متطابقة مع أصل البيانات (بالطبع يوجد اعتبارات تؤخذ في الحسبان متى يستخدم هذا النوع وتأثير هذا الفقد على مستقبل المعلومات). ومن أشهر الأمثلة لهذا النوع الصور من نوع JPEG ومن أفضل الأمثلة لاستخدام هذا النوع هو ضغط البيانات في مجال الوسائط المتعددة Multimedia مثل الفيديو والصور والصوت.
أما الهدف في استخدام ضغط البيانات فهو الحفاظ والاستخدام الأمثل لمساحات التخزينية Storage Space في حالة تخزين البيانات. وكذلك الحفاظ والاستخدام الأمثل لعرض الحزم Bandwidth الخاصة بقنوات نقل البيانات و تقليص زمن نقل البيانات أو الاستطاعة في نقل بيانات ما كانت تنقل إلا بعد ضغطها.
ماذا لو لدينا ملف بيانات يبلغ حجمه 1 ميجا بايت وقمنا بضغطة ليصبح تقريبا نصف حجمه . هذا يعني أنه سوف يأخذ نصف المساحة التخزينية وكذلك نصف زمن النقل بين الأجهزة المختلفة. دعونا نرى ما هي أساليب وأفكار ضغط البيانات:
النوع الأول: الضغط دون فقد Lossless Compression
الهدف من هذا النوع هو ضغط البيانات بأقصى نسبة ضغط ممكنة دون فقد أي جزئ من تلك البيانات . ولهذا سوف أذكر أسلوبين من أشهر الأساليب المتاحة
ماذا لو لديك البيانات كما الآتي:
AAAAVVVVVVVGGGYYY
أليس الأفضل أن نقول:
A[4]V[7]G[3]Y[3]
أي أنه بدلا من نقل أو حفظ البيانات المتكررة بهذا الشكل يمكن استخدام أسلوب آخر وهو الحرف المتكرر وعدد التكرار. هذا النوع يسمى (Run-Length Entropy Coding RLE ) وهو طريقة مفيدة في ضغط البيانات "الثنائية" Binary Data في حالة وجود كم كبير من الأصفار أو الآحاد المتتالية.
ماذا لو لديك بيانات نصية مكتوبة بلغة بشرية (الإنجليزية، العربية، وغيرها)؟
مثل تلك البيانات الموجودة في الرسائل، الكتب، قواعد البيانات وغيرها.
علينا أن نعلم أن لكل لغة خصائصها الإحصائية من حيث استخدام حرف ما أكثر من باقي الأحرف مثل (حرف E في الإنجليزية وحرف "ل" في العربية) وتكرار حرفين متتالين أكثر من غيرهم (مثل he في الإنجليزية و"ال" في العربية).
ولنتذكر أن تلك البيانات محفوظة بترميز ثابت الطول Fixed length مثل ترميز الآسكي بالنسبة للحروف الإنجليزية ASCII أو Unicode بالنسبة لكثير من اللغات الأخرى. ولنعلم أن كل حرف يأخذ حجم 1 بايت بالنسبة لترميز الأسكي و2 بايت بالنسبة لترميز "يوني كود".
وبالتالي فحجم البيانات الكبير يشغل مساحة تخزينية مقابلة لحجمه ونوع الترميز المستخدم.
مثال: لو لدينا كتاب مكتوب بالإنجليزية باستخدام الآسكي وعدد حروف الكتاب 15 مليون حرف. هذا يعني أن حجم تخزينه يبلغ تقريبا 14.3 ميجا بايت.
إذن ماذا لو أخذنا بالمعلومات الإحصائية بأن حرف e هو أكثر الحروف استخداما وكذلك حرف t وقمنا بعمل ترميز آخر يكون حرف e له الرمز "0" وحرف t له الرمز "1" وحرف h له رمز "01" وهكذا... بدلاً من استخدام رموز ثابتة الطول نستخدم رموز متغيرة الطول Variable –Length .
النتيجة سوف تكون نقص حجم تخزين تلك البيانات بنسبة قد تصل 70-80 بالمائة. وهذا الأسلوب يسمى (Variable Length Coding VLC).
ولاستكمال هذه النقطة يقوم البرنامج الخاص بالضغط بعمل إحصاء خاص بالملف المراد ضغطه ثم ترميزه بعد ترتيب الحروف المستخدمة به من الأكثر تكرارا إلى الأقل وإعطاء الأكثر تكرارا أقصر رمز ممكن والتدريج في طول الرمز ليصل أطول رمز مع أقل حرف مستخدم وهذا الأسلوب يسمى Huffman Entropy Coding وهو من نوع المتغير الطول السابق شرحه VLC .
من أشهر البرامج التي تستخدم هذا النوع هو البرنامج الشهير WinZip .
النوع الثاني: الضغط مع فقد Lossy Compression
دعونا نأخذ نوع أخر من البيانات، التي وبحق لولا ضغط البيانات لما تقدم وتطور لما وصل به الحال اليوم وهو جميع أنواع المتعددة الوسائط وخصوصا الفيديو ولكن لنشعر بالفرق، دعني أسرد عليك بعض الحقائق والمعلومات التي قد تفيدنا:
- إن السعة التخزينية للاسطوانات المضغوطة CD-ROM تقع بين 600-900 ميجابايت ( الأكثر استخدام 700 ميجا بايت )
- إن السعة التخزينية للاسطوانات (Digital Versatile /Video Disk DVD) تقع بين 4.7- 15.9 جيجا بايت (الأكثر استخدام حاليا 4.7 جيجا بايت)
- كان فيلم مدته ساعتان بتكنولوجيا VCD 1 MPEG-يحتاج إلى عدد اسطوانتين سعة 600 ميجابايت على الأقل لكل اسطوانة. ودقة صورة الفيلم تبلغ 352 x 288 نقطة.
- أصبح فيلم مدته ساعتان يحتاج اسطوانة واحدة في حدود 700 ميجابات بتكنولوجيا divx MPEG-4 . ودقة صورته تبلغ 640 x 480 نقطة.
الآن، يمكن لنا أن نتحدث قليلا عن الصورة على شاشة أجهزة الحاسب الآلي أو على أي شاشة (تليفزيون، سونار، وغيره) وسوف يكون حديثنا عن الصورة الرقمية (أي أن التعامل معها بواسطة جهاز رقمي مثل الكمبيوتر، جهاز الاستقبال من الأقمار الاصطناعية وغيرها)
الصورة الرقمية هي عبارة عن صورة متكونة من نقاط تسمى Pixel وكل نقطة تأخذ لونها من مزيج بين الألوان الأساسية الثلاثة (الأحمر والأخضر والأزرق) وكل لون يمكن أن يكون بدرجات تصل إلى 256 لون وبالتالي بمجموع ألوان من خليط الألوان الأساسية يصل إلى 16.7 مليون لون درجة لون مختلفة ولهذا تأخذ كل نقطة مساحة 3 بايت للتعبير عنها. (حديثنا على الصورة الملونة بنظام بأعلى درجات الألوان 24 بت). وبما أن الصورة لها طول وعرض أي بعدين (2D Two Dimensions) فيتم التعبير عن دقتها بعدد نقاطها في كل من الطول والعرض.
فمثلا لو لدينا صورة تبلغ دقتها 352 في 288 سوف تحتاج إلى 297 كيلوبايت لتخزينها.
288*352*3=304128 Bytes
304128/1024 = 297 KB
هذه الصورة وطريقة الحساب هي ما يتم في الواقع داخل جهاز الحاسب الآلي وهي تسمى Bitmap يمكنك أن تقوم بإنزال صورة من هذا النوع من الإنترنت وتحسب حجمها بنفسك بضرب الطول في العرض في 3 وهو عدد البايت لكل نقطه.
هناك من يسأل ماذا عن JPEG وهي الصور الأكثر استخداماً والأكثر انتشارا والأقل حجماً وكيف أقول عن Bitmap هي ما يتم في الواقع داخل الأجهزة الرقمية؟
الرد بسيط... هذا JPEG هو الضغط وسوف نتحدث عنه وند الاطلاع على صورة من هذا النوع jpeg يقوم البرنامج بفك الضغط وإرجاعها لأصلها bitmap لتظهر لنا على الشاشات. وفي هذه الحالة تأخذ مساحتها الأصلية من ذاكرة الحاسب الآلي أو الجهاز وإن كانت أصغر بكثير عند التخزين أو النقل على هيئتها JPEG ، أليس هذا هو فائدة الضغط؟. كيف يتم هذا الضغط وهل فعلا الصورة الناتجة بعد الضغط هي التي كانت قبل الضغط؟ سوف أجيب عن تلك الأسئلة في مقالي المكمل لهذا المقال.
فقط الآن أحب أن نستكمل بعض الحسابات لنعلم أهمية الضغط
تحتاج صورة دقتها 288 في 352 إلى 297 كيلوبايت لتخزينها "بغض النظر عن محتوى هذه الصورة من أشكال وتفاصيل" .
ماذا لو أحببنا عمل فيلم فيديو (الفيديو عبارة عن نفس فكرة السينما ولكن هنا بالصور الرقمية) أي أنه عبارة عن عرض سريع لمجاميع من الصور فلا تستطيع عين الإنسان تمييز أن بينها فاصل.. ولكي يحدث هذا، يكون العرض عبارة عن 25 صورة في الثانية على الأقل والصورة تسمى في هذه الحالة frame لأنها عادة لا تختلف كثيرا عما قبلها (ماذا سيكون الفرق بين صورة وأخرى لنفس المنظر في زمن قدرة 0.04 ثانية).
سوف يكون حجم هذا الفيلم لو كان مدته ساعة واحدة كالآتي:
297 * 25 = 7425 كيلوبايت للثانية الواحدة (7.25 ميجا بايت)
7.25 *60 = 435 ميجابايت للدقيقة الواحدة .
لا داعي لاستكمال الحساب لأنه باختصار شديد لا يمكن أن نخزن دقيقتين 870 ميجا على اسطوانة من نوع CD-ROM أو حتى 10 دقائق على اسطوانة DVD .
لذلك ما كان لتقنية الفيديو الرقمي أن تقوم لولا ضغط البيانات. وسوف نستكمل معا كيف يمكن ضغط البيانات في الصورة ومنها نفهم ما يمكن أن يحدث للفيديو أيضاّ.
فقط أحب أن أذكر أن الضغط سيكون مبني أساساً على أن الصورة المضغوطة ليست تماماً كما الأصل ولكن تم الفقد فيما لا تلحظه عين الإنسان واستغلال هذا في الضغط.
وللحديث بقية لو كان في العمر بقية بإذن الله.
ملاحظات:
(1) جميع حقوق الملكية والملكية الفكرية للعلامات التجارية والمسجلة التي ذكرت في المقال ملك لأصحابها .
(2) الحقوق الفكرية للمقالة لكاتبها وتحت ترخيص GPL General Public License. يمكن استخدمها للأغراض الغير تجارية مع ذكر اسم كاتبها والموقع www.magnin.com .
اقرأ ايضاً:
التوقيع الرقمي 2 [Digital Signature] / عالم العنكبوت الرقمي!!