نیمه تونینگ یا نیمه تونینگ آنالوگ فرآیندی است که تصاویر سیاه و سفید را با تغییر اندازه نقاط سیاه که در یک الگوی منظم چیده شده اند شبیه سازی میکند. این تکنیک در چاپگرها و همچنین در صنعت نشر استفاده می شود. اگر عکسی را در روزنامه بررسی کنید، متوجه خواهید شد که تصویر از نقاط سیاه تشکیل شده است، حتی اگر به نظر از رنگ خاکستری تشکیل شده باشد. علت آن نیز ادغام فضایی انجام شده توسط چشمان ما می باشد. چشمان ما جزئیات دقیق را با هم ترکیب کرده و شدت کلی را ثبت می کند. نیمهتونینگ دیجیتالی شبیه به نیمهتونینگ آنالوگ است که در آن تصویر به شبکه ای از سلول های نیمه تونی تجزیه میشود. عناصر (یا نقاطی که نیمهتونینگ برای شبیه سازی سایه های خاکستری استفاده میکند) یک تصویر با پر کردن سلولهای نیمه تونی مناسب شبیه سازی می شوند. هر چه تعداد نقاط سیاه در یک سلول نیمه تونی بیشتر باشد، سلول تیره تر به نظر می رسد. به عنوان مثال، در شکل 4، یک نقطه کوچک واقع در مرکز با پر کردن سلول نیمهتون مرکزی، شبیهسازی شده است. به همین ترتیب، یک نقطه با اندازه متوسط واقع در گوشه بالا سمت چپ با پر کردن چهار سلول در گوشه بالا سمت چپ شبیهسازی میشود. نقطه بزرگی که بیشتر ناحیه را در تصویر سوم می پوشاند با پر کردن تمام سلول های نیمه تونی شبیه سازی شده است.
همراه با متن و گرافیک، تصاویر به سرعت در حال تبدیل شدن به یک نوع داده عمومی برای سیستم های کامپیوتری همه منظوره هستند. این موضوع مشکلات جدیدی را برای طراح سیستم ایجاد می کند، که باید بتواند داده های تصویر دیجیتال را برای طیف گسترده ای از دستگاه ها پیش پردازش کند. نمایشگرهای اداری، چاپگرهای لیزری و چاپگرهای سوزنی خانگی با رزولوشن ها و نسبت تصاویر مختلف باید بتواند تصویر داده شده را به صورت مشابه ارائه دهد. به این منظور یک راه حل آن است که به ازای هر دستگاه یک پیش پردازنده اختصاصی وجود داشته باشد که داده های تصویر دیجیتال را به شکلی متناسب با ویژگی های خاص آن دستگاه تبدیل کند.
به هر فرآیند الگوریتمی که بخشی از این پیش پردازش که از تصاویر باینری، تصاویر با آرایش پیوسته (پراکندگی فضایی) را ارائه میدهد، halftoning دیجیتال میگویند. در واقع تکنیک halftoning نمایش تصاویر پیوسته همچون ویدئو، روی کاغذ یا رسانه های مشابه که فقط امکان نمایش دو بعد را دارند می باشد. در halftoning دیجیتال، تبدیل مقیاس خاکستری به دو سطحی به صورت دیجیتالی، با استفاده از نرم افزار یا سخت افزار انجام می شود.
در این خصوص در سه دهه ی اخیر الگوریتم های مختلفی توسعه داده شدند که نمونه هایی از این الگوریتم ها عبارتند از الگوسازی[1]، انحراف مرتب[2]، انتشار خطا[3]، ماسکهای نویز آبی[4]، نویز سبز[5]، جستجوی باینری مستقیم[6] و انتشار نقطه[7].
روش انتشار نقطه ای برای نیمهتونینگ دیجیتال، بر خلاف روش انتشار خطا، که یک روش محبوب نیمهتونینگ است، مزیت موازی سازی در سطح پیکسل را دارد که یک روش محبوب نیمه تونینگ است. با این حال، کیفیت تصویر ارائه شده توسط الگوریتم انتشار خطا همچنان برتر از بسیاری از روش های شناخته شده دیگر در نظر گرفته می شود.
الگوریتم الگوسازی (Patterning):
الگوسازی ساده ترین روش برای تولید تصاویر نیمهتونینگ دیجیتال است و تصویری تولید می کند که وضوح فضایی بالاتری نسبت به تصویر اولیه دارد. در این روش تعداد سلول های نیمهتون تصویر خروجی با تعداد پیکسل های تصویر اولیه برابر است. هر سلول نیمه تونی از یک شبکه 4×4 تشکیل می شود. به ازای هر پیکسل ورودی تعداد متفاوتی از مربع های پر شده در سلول نیمه تونی نمایش داده می شود. از آنجایی که یک شبکه 4×4 تنها می تواند 17 سطح شدت مختلف را نشان دهد، تصویر اولیه باید کوانتیزه و تدریجی شود.
برنامه یک تصویر ورودی را می خواند، مقادیر پیکسل را کمّی کرده و هر پیکسل را به الگوی مربوط به خود نگاشت می کند. تصویر به دست آمده 16 برابر بزرگتر از تصویر اصلی است.
نکته: این روش به تعداد زیادی محاسبات نیاز دارد و به همین جهت تصاویر با اندازه کمتر از 100 پیکسل در 100 پیشنهاد میشود.
الگوریتم انحراف مرتب یا پریشان (Dithering):
بر خلاف روش الگوبرداری، روش دیترینگ یک تصویر خروجی شامل تعداد نقاط مشابه با تعداد پیکسل های تصویر اولیه ایجاد می کند. دیترینگ را می توان به عنوان یک ابزار آستانه گذاری تصویر اولیه توسط یک ماتریس به هم ریخته در نظر گرفت. ماتریس به طور مکرر روی تصویر منبع گذاشته می شود. هر جا که مقدار پیکسل تصویر بیشتر از مقدار ماتریس باشد، یک نقطه روی تصویر خروجی پر می شود.
اول از یک ماتریس dither پیش فرض برای آستانه گذاری تصویر ورودی استفاده می شود. ماتریس دیتر پیش فرض به شرح زیر است:
پیاده سازی الگورتیم دیترینگ در متلب به شرح زیر است:
ditheringIMG = imread('sample.gif', 1); ditheringIMG_bw = dither(ditheringIMG); imshow(ditheringIMG); figure,imshow(ditheringIMG_bw);
همچنین خروجی به شرح ذیل نمایش داده میشود:
[1] Patterning
[2] Dithering
[3] Error Diffusion
[4] Blue noise masks
[5] Green noise halftoning
[6] Direct binary search (DBS)
[7] Dot diffusion