PDA

مشاهده نسخه کامل : مفاهیم پایه ی پردازش تصویر دیجیتال



ravegoat
27-03-13, 12:59
مدل رنگ
مدل رنگ کميتی را به يک رنگ نسبت می دهد تا آن را از ساير رنگ ها متمايز کند. در اينجا تنها دو مدل RGB و HSB شرح داده می شود.

مدل رنگ RGB
در اين مدل هر رنگ از ترکيب سه رنگ قرمز (Red), سبز (Green) و آبی (Blue) با شدت های مختلف ساخته می شود. مقدار شدت هر يک از اين سه رنگ عددی صحيح بين صفر تا 255 است. برای نمايش يک رنگ در فضای اين مدل دستگاه مختصات کارتزين سه بعدی را در نظر می گيريم. در اين صورت محور x معادل شدت رنگ قرمز, محور y معادل شدت رنگ سبز و محور z معادل شدت رنگ آبی است.

8325

به عنوان مثال در مدل RGB کد رنگ سياه (0, 0, 0) و کد رنگ سفيد (255, 255, 255) است. برای استخراج کد رنگ ها در سی شارپ تحت اين قالب می توان از کد زير استفاده کرد:



private string getRGB(Color color)
{
return "(" +
color.R.ToString()
+ ", " +
color.G.ToString()
+ ", " +
color.B.ToString()
+ ")";
}




8324

مدل رنگ HSB
در اين مدل يک رنگ براساس يک طيف رنگ (Hue), اشباع رنگ (Saturation) و درخشندگی (Brightness) تعريف می شود. برای نمايش يک رنگ در فضای اين مدل دستگاه مختصات استوانه ای را نظر می گيريم. در اين صورت θ معادل Hue و عددی بين صفر تا 360 است. راستای شعاعی r معادل Saturation و عددی بين صفر تا 1 است. راستای z نيز معادل Brightness خواهد بود که عددی بين صفر تا يک است.

8323
به عنوان مثال در مدل HSB کد رنگ سياه (0, 0, 0) و کد رنگ سفيد (0, 0, 1) است. برای استخراج کد رنگ ها در سی شارپ تحت اين قالب می توان از کد زير استفاده کرد:


private string getHSB(Color color)
{
return "(" +
color.GetHue().ToString()
+ ", " +
color.GetSaturation().ToString()
+ ", " +
color.GetBrightness().ToString()
+ ")";
}

ravegoat
27-03-13, 13:10
مجموعه ای از عملگر های برداری اند که بردار رنگ را به بردار جديدی تبديل می کنند.

تبديل رنگ خاکستری
در مدل RGB بردار خاکستری برداری است از رنگ سياه معادل نقطه ی (0, 0, 0) به رنگ سفيد معادل نقطه ی (255, 255, 255). نقاط روی اين بردار يک طيف خاکستری از رنگ سياه تا رنگ سفيد را تشکيل می دهند. حال اگر هر بردار رنگ (A) روی اين بردار تصوير شود, معادل Grayscale آن رنگ (Agrayscale) به دست می آيد. بردار تصوير شده در راستای بردار يکه ی خاکستری (xgrayscale) و اندازه ی آن برابر ضرب داخلی در است:
8326

8327
کد سی شارپ اين تبديل به شکل زير است:


private Color convert2Grayscale(Color color)
{
int product = (int)((color.R + color.G + color.B) / 3);
return Color.FromArgb(product, product, product);
}




تبديل رنگ نگاتيو

8328
کد زير معادل Negative يک رنگ را بر می گرداند:


private Color convert2Negative(Color color)
{
return Color.FromArgb(255 - color.R, 255 - color.G, 255 - color.B);
}

ravegoat
27-03-13, 13:15
هيستوگرام
يک نمودار آماری است که نحوه ی توزيع پيکسل ها را به ازای يک طيف رنگ مشخص نشان می دهد. هيستوگرام شکل زير بيان می کند چه تعداد پيکسل در ناحيه ی روشن و چه تعداد پيکسل در ناحيه ی تاريک تصوير واقع شده اند:

8329
Brightness Histogram يک ابزار مناسب جهت تشخيص خطای نورسنجی در دوربين های ديجيتال به شمار می آيد. اگر ما قصد عکس برداری از يک ناحيه ی روشن را داريم در حالی که در پيش نمايش هيستوگرام دوربين بيش تر پيکسل ها در ناحيه ی تاريک توزيع شده باشند, نورسنجی دوربين مناسب نبوده و بايد آن را جبران کرد.

مقايسه ی تصاوير
يکی از راه های مقايسه ی تصاوير استفاده از عملگر تفريق است. برای مقايسه ی دو تصوير با اين روش, بردار های رنگ متناظر در دو تصوير را از هم کم می کنيم و بردار های حاصل را در تصوير جديدی ذخيره می کنيم. اگر در اين دو تصوير در نقطه ی (x, y) رنگ ها مشابه هم بودند, نقطه ی متناظر (x, y) در تصوير جديد به رنگ سياه در می آيد زيرا می دانيم حاصل تفريق دو بردار مشابه بردار صفر است که در مدل رنگ RGB معادل رنگ سياه خواهد بود. در غير اين صورت رنگ آن نقطه در تصوير جديد به شکل روشن در می آيد.
از اين روش می توان در مقايسه ی فريم های يک دوربين امنيتی جهت تشخيص حرکت (Motion Detection) استفاده کرد. در صورتی که در تصوير حاصل از تفاضل دو فريم متوالی رنگی غير از سياه مشاهد شود (هيستوگرام آن توزيعی در ناحيه ی روشن داشته باشد), می توان نتيجه گرفت که صحنه ی مقابل دوربين تغيير کرده است. از روش مشابه برای مقايسه ی تصوير پزشکی اسکن مغز بيمار با يک نمونه ی سالم جهت تشخيص بيماری استفاده می کنند.

8330

ravegoat
27-03-13, 13:53
در اين روش فيلتر H در تصوير A ضرب کانولوشن می شود (H *A) تا تصوير A ويژگی های مد نظر ما نظير نويز کم تر و يا درخشندگی بيش تر را بيابد. تصوير A از پيکسل هايی در طول و عرض تشکيل شده است و بين دو پيکسل متوالی نمی توان هيچ پيکسل ديگری تعريف کرد لذا فضای تصوير A گسسته است. در نتيجه بايد ضرب کانولوشن در فضای گسسته اجرا گردد. در اين صورت فيلتر H به شکل يک ماتريس مربعی در می آيد که به آن ماسک يا هسته ی پيچش (Convolution Mask يا Convolution Kernel) گفته می شود. اگر هسته ی پيچش يک ماتريس 3 در 3 باشد, ضرب کانولوشن آن برای يک پيکسل به شکل زير صورت می گيرد:

8340

8341

ravegoat
27-03-13, 14:13
فيلتر ميانگين
فيلتر ميانگين (Mean Filter) فيلتری خطی جهت کاهش نويز تصوير است. اين فيلتر, ميانگين مولفه های بردار رنگ پيکسل های همسايه را با مولفه های متناظر بردار رنگ پيکسل جاری جايگزين می کند. هسته ی آن به شکل زير است:

8347
در شکل زير می توان مشاهده کرد که از جزئيات در تصوير فيلتر شده (سمت راست) نسبت به تصوير اصلی (سمت چپ) کاسته شده است:

8348
کد سی شارپ اين فيلتر از پیوست قابل دریافت است.

فيلتر ميانه
فيلتر ميانه (Median Filter) يک فيلتر غير خطی برای کاهش نويز تصاوير است که عملکرد بهتری نسبت به فيلتر ميانگين دارد گرچه نسبت به آن کند تر است. در اين فيلتر مولفه های متناظر بردار رنگ پيکسل جاری و پيکسل های همسايه ی آن از نزولی به صعودی مرتب می شوند و مقاديری که در وسط اين ترتيب قرار می گيرد به عنوان مولفه های رنگ پيکسل جاری در نظر گرفته می شوند.