در این قسمت تیم کدگیت را با آموزش تبدیل توانی در سی شارپ (پردازش تصویر) همراهی کنید. ابتدا بهبود تصاویر را تعریف کرده و در ادامه تبدیل توانی را پیاده سازی خواهیم کرد. پیش نیاز این آموزش شامل موارد زیر است:
بهبود تصاویر در سی شارپ
تصاویر بهبود یافته در مقایسه با تصاویری که بهبود یافته نیستند، جزییات بیشتری را نشان میدهد و جالبتر اینکه در صنعت پزشکی و تصاویر جغرافیایی کاربردهای بسیاری نیز دارند. معمولا برای بهبود تصاویر از transformation یا تبدیلات استفاده میکنند. تبدیلات یک سری توابعی هستند که با تغییرات مختلف بر روی هر پیکسل از تصویر ما باعث تغییر و بهبود آنها میشوند.
تابع تبدیل به صورت زیر تعریف میشود:
s = T ( r )
r همان پیکسلهای تصویر اصلی ماست و T تابع تبدیل است که تغییراتی بر روی ورودی(r) خود میدهد و s هم تصویر بهبود یافته است که از تابع تبدیل T بدست آمده است.
تبدیل توانی در سی شارپ
در آموزشهای گذشته دو نمونه از تبدیلات تصاویر سیاه و سفید را معرفی کردیم. در این آموزش یکی دیگر از این نوع تبدیلات را معرفی میکنیم. تبدیل توانی برای اصلاح تصاویر با فرمتها مختلف استفاده میشود. به دلیل دو عدد ثابت در فرمول این تبدیل، نسبت به بقیه تبدیلات انعطاف بیشتری را دارد. فرمول تبدیل توانی به صورت زیر است:
s=cr^γ
r تصویر ورودی است و c و y متغیر هستند. s نیز خروجی است. به y گاما نیز گفته میشود. با تغییر گاما تصاویر متفاوتی میتوان ساخت.
پیاده سازی تبدیل توانی در سی شارپ
کد تبدیل توانی به صورت زیر است:
class MainClass
{
public static void Main (string[] args)
{
Bitmap myBitmap = new Bitmap("PoweLaw.jpg");
int width = myBitmap.Width;
int height = myBitmap.Height;
Bitmap output = new Bitmap(width, height);
for (int x = 0; x < width; x++)
{
for (int y = 0; y < height; y++)
{
int c = 80;
double Gamma = 10;
int red = myBitmap.GetPixel (x, y).R;
int green = myBitmap.GetPixel (x, y).G;
int blue = myBitmap.GetPixel (x, y).B;
int newred = (int) (c * Math.Pow(red, 1.0 / Gamma));
int newgreen = (int) (c * Math.Pow(green, 1.0 / Gamma));
int newblue = (int) (c * Math.Pow(blue, 1.0 / Gamma));
output.SetPixel(x, y, Color.FromArgb( newred,newgreen, newblue));
}
}
output.Save("PoweLawoutput.jpg");
Console.WriteLine ("Press any key to Finish Program....");
Console.ReadKey ();
}
}
در کد بالا تقریبا تمام مطالبی که در آموزشهای قبلی پردازش تصاویر آورده شده، استفاده کردیم. ابتدا تصویر را خوانده و بر روی پیکسلهای آن تبدیل توانی را انجام دادهایم. در آخر یک فایل خروجی به نام power law output.jpg برای تصویر تبدیل شده، ساختهایم. در تصویر زیر تبدیل انجام شده را میبینید (البته با تغییر گاما میتوانید کیفیت تصویر را بهتر کنید). در تصویر زیر c برابر با 80 و گاما برابر با 10 قرار داده شده است.
