داده های رستری معمولاً حجم بالایی دارند و برای ذخیره سازی آنها با مشکل مواجه هستیم. در این مقاله میخواهیم شما را با برخی تکنیک های فشرده سازی داده های رستری آشنا کنیم و این مبحث زیبا را با شما به اشتراک بگذاریم. این تکنیک ها میتوانند توسعه یافته و به حالت بهینه ای هم استفاده شوند، اما اصول اولیه آنها ثابت می ماند.
فرمت های مختلف داده های رستری از تکنیک های فشرده سازی داده های رستری استفاده میکنند. حتی فرمت Tiff هم که معرف حجم بالای داده های رستری است، میتواند حالتهای فشرده سازی مختلفی را قبول کند.
مختصری در مورد داده های رستری
داده های رستری از سلولهای شبکه تشکیل شده اند. بر خلاف داده های وکتوری که از رئوس و مسیرها تشکیل شده اند. دقت آنها نیز بستگی به اندازه سلول دارد. اندازه سلول باید به اندازه کافی کوچک باشد تا جزئیات مورد نیاز را در بر بگیرد. میتوانیم با کاهش سایز سلول، رزولوشن تصویر را افزایش دهیم. اما این مسئله هزینه و سرعت پردازش و ذخیره سازی داده ها را بالا میبرد.
ذخیره سازی رستر در حالت خام آن ناکارآمد است به این دلیل که به طور معمول مقادیر ردیف به ردیف از گوشه بالا سمت چپ ذخیره میشوند. اما بهبود بهره وری سایز رستر از طریق تکنیکهای فشرده سازی داده های رستری ممکن است. راههای مختلفی برای به کارگیری فشرده سازی داده های رستری برای کاهش سایز فایل وجود دارد که کیفیت داده ها را نیز حفظ میکند.
مثالهای زیر بخشی از تکنیک های فشرده سازی داده های رستری هستند که با حفظ داده های موجود در یک فایل رستر اقدام به فشرده سازی آن میکنند. اصطلاحاً به این تکنیک ها LossLess میگویند.
روش رمزنگاری طول دنباله (Run Length Encoding) :
رمزنگاری طول دنباله، سلولها را بر یک پایه ی “ردیف به ردیف” ذخیره میکند. به جای اینکه مقدار هر سلول را به صورت جداگانه ذخیره کند، این روش مقادیر سلولها را به صورت ردیفی گروهبندی میکند.
برای مثال این خط از داده به این صورت ارائه میشود:
AAAAAABBBBCCCCCCCCC —> 6A4B9C
این روش فشرده سازی حجم داده را کاهش میدهد چراکه هر خط به صورت کارآمدتری ذخیره میشود. حتی اگر همان اطلاعات نگهداری شوند، مقادیری که یکسان هستند به صورت یک رشته ذخیره میشوند.
در مثال بالا، سطر اول خالی است و به صورت (0،8) ذخیره می شود. این به این معنی است 8 سلول وجود دارد و همه آنها صفر هستند. در سطر دوم، 4 صفر متوالی وجود دارد، بنابراین مقدار (0،4) را میگیرد. بعد از این ما سه سلول متوالی با مقدار 1 داریم پس مقدار (1،3) را میگیرد. و این روند همچنان ادامه مییابد تا زمانی که به سلول پایین سمت راست برسد.
رمزنگاری بلوکی (Block Coding) :
تکنیک رمزنگاری بلوکی نواحی را به منظور کاهش افزونگی به بلوکهایی بخشبندی میکند. این روش یک رستر کامل را به بلوکهای سلسله مراتبی تقسیم میکند. این روش تعمیمی از روش رمزنگاری طول دنباله میباشد به نحوی که در دو بعد توسعه داده شده است.
در مثال فوق:
به جای ذخیره سازی 64 سلول شبکه، تمام چیزی که دربرمیگیرد تنها 7 بلوک است. برای استفاده از رمزنگاری بلوکی، یک بلوک 3*3 ، دو بلوک 2*2 و چهار بلوک سلولی 1*1 برای کدبندی این تصویر رستری، مورد نیاز است. در این مثال، گوشه بالا سمت چپ به عنوان مرجع برای هر بلوک استفاده شده است.
رمزنگاری زنجیرهای (Chain Coding) :
در رمزنگاری زنجیرهای، ثبت ارزش پیکسلها، با استفاده از موقعیتهای نسبی، از یک نقطه شروع شده و توسط رشته ای از پیکسلها مرز خارجی را دنبال میگردد تا به نقطه شروع خود برسد.
در طول رمزنگاری، جهت به صورت یک عدد صحیح ذخیره میشود. اما در مثال شکل زیر ما برای ساده سازی از جهات اصلی استفاده کرده ایم. برای مثال 0 نمایانگر شمال و 1 نشانگر شرق است.
در این مثال، ما در موقعیت (5،2) شروع میکنیم. از اینجا مرز را با استفاده از جهت های اصلی و تعداد حرکات تعریف میکنیم. ما 3 مرتبه به سمت شرق حرکت میکنیم تا زمانی که به لبه برسیم. سپس، ما 4 مرتبه به سمت جنوب حرکت میکنیم. این روند تا نقطه پایان که همان رسیدن مجدد به نقطه شروع است، ادامه می یابد.تنها برای این تمرین، ما شمال، شرق، جنوب و غرب را به صورت مقادیر الفبایی استفاده کردیم، درحقیقت این مقادیر به صورت عددی کدگذاری میشوند.
رمزنگاری درخت چهارگانه (Quadtree Encoding) :
درختهای چهارگانه (Quadtree) ساختارهای داده رستری بر اساس کاهش متوالی سلولهای همگن هستند، که به صورت بازگشتی، یک تصویر رستر را به بخشهایی (ربع هایی) تقسیم میکند. این فرایند تقسیم تا زمانی که هر سلول طبقه بندی شود ادامه می یابد. بدین ترتیب فضای ذخیره سازی مورد نیاز رستر کاهش می یابد. این مسئله به پیچیدگی عارضه و توان تفکیک کوچکترین سلول شبکه نیز بستگی دارد.
در این مثال، شبکه های 8*8 بالا سمت چپ و پایین سمت راست نیازی به تقسیم شدن بیشتر ندارند چرا که همگن هستند. شبکه 8*8 بالا سمت راست به سه شبکه 4*4 تقسیم می شوند. شبکه 4*4 باقی مانده نیز به 4 کلاس جداگانه تقسیم شده است.