در این قسمت تیم کدگیت را با آموزش تبدیل لگاریتمی در سی شارپ همراهی کنید. در ابتدا تبدیل لگاریتمی را معرفی کرده و سپس یک مثال واقعی از این تبدیل خواهیم زد. پیش نیاز این آموزش شامل موارد زیر میباشد:
بهبود تصاویر در سی شارپ
تصاویر بهبود یافته در مقایسه با تصاویری که بهبود یافته نیستند، جزییات بیشتری را نشان میدهد و جالبتر اینکه در صنعت پزشکی و تصاویر جغرافیایی کاربردهای بسیاری نیز دارند. معمولا برای بهبود تصاویر از transformation یا تبدیلات استفاده میکنند. تبدیلات یک سری توابعی هستند که با تغییرات مختلف بر روی هر پیکسل از تصویر ما باعث تغییر و بهبود آنها میشوند.
تابع تبدیل به صورت زیر تعریف میشود:
s = T ( r )
r همان پیکسلهای تصویر اصلی ماست و T تابع تبدیل ما است که تغییراتی بر روی ورودی(r) خود میدهد و s هم تصویر بهبود یافته است که از تابع تبدیل T بدست آمده است. در این آموزش تبدیل لگاریتمی را پیاده سازی میکنیم.
تبدیل لگاریتمی در سی شارپ
تبدیل لگاریتمی برای روشن کردن تصاویر سیاه و سفید استفاده میشود. فرمول این تبدیل به صورت زیر است:
s = c log(r + 1)
در فرمول بالا c یک متغیر ثابت است که هر عددی میتوان به آن داد. متغیر r ورودی مسئله است و s خروجی این فرمول میباشد. برای پیاده سازی تبدیل لگاریتمی در سی شارپ از تصویر زیر استفاده شده است.

کد این تبدیل به صورت زیر میباشد:
class MainClass
{
public static void Main (string[] args)
{
Bitmap myBitmap = new Bitmap("LogTransformation.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 red = myBitmap.GetPixel (x, y).R;
int green = myBitmap.GetPixel (x, y).G;
int blue = myBitmap.GetPixel (x, y).B;
int c = 100;
int newred =(int) (c * Math.Log10(red + 1));
int newgreen =(int) (c * Math.Log10(green + 1));
int newblue =(int) (c * Math.Log10(blue + 1));
Color pixelColor = myBitmap.GetPixel(x, y);
output.SetPixel(x, y, Color.FromArgb( newred, newgreen, newblue));
}
}
output.Save("LogTransformation output.jpg");
Console.WriteLine ("Press any key to Finish Transformation....");
Console.ReadKey ();
}
}
در ابتدای کد بالا یک تصویر را خوانده و سپس تک تک پیکسلهای آن را با فرمول تبدیل لگاریتمی تغییر میدهیم (درون 2 حلقه For) در آخر عکس تبدیل شده را ذخیره میکنیم. متغیرهای newred و newgreen و newblue پیکسلهای جدید ما هستند. فایل خروجی به صورت زیر است:
