image processing, java, پردازش تصویر, پردازش تصویر در جاوا, جاوا

تبدیل لگاریتمی در جاوا (Logarithmic Transformation)

تبدیل لگاریتمی در جاوا

در این قسمت تیم کدگیت  را با آموزش تبدیل لگاریتمی در جاوا همراهی کنید. در ابتدا تبدیل لگاریتمی را معرفی کرده و سپس یک مثال واقعی از این تبدیل خواهیم زد. پیش نیاز این آموزش شامل موارد زیر می‌باشد:

  1. خواندن و نوشتن تصاویر در جاوا
  2. فایل در جاوا
  3. استثناها در جاوا
  4. بهبود تصاویر در جاوا

بهبود تصاویر در جاوا

تصاویر بهبود یافته در مقایسه با تصاویری که بهبود یافته نیستند، جزییات بیشتری را نشان می‌دهد و جالب‌تر اینکه در صنعت پزشکی و تصاویر جغرافیایی کاربردهای بسیاری نیز دارند. معمولا برای بهبود تصاویر از transformation یا تبدیلات استفاده می‌کنند. تبدیلات یک سری توابعی هستند که با تغییرات مختلف بر روی هر پیکسل از تصویر ما باعث تغییر و بهبود آنها می‌شوند.

تابع تبدیل به صورت زیر تعریف می‌شود:

s = T ( r )

r همان پیکسلهای تصویر اصلی ماست و T تابع تبدیل ما است که تغییراتی بر روی ورودی(r) خود میدهد و s هم تصویر بهبود یافته است که از تابع تبدیل T بدست آمده است. در این آموزش تبدیل لگاریتمی را پیاده سازی می‌کنیم.

تبدیل لگاریتمی در جاوا

تبدیل لگاریتمی برای روشن کردن تصاویر سیاه و سفید استفاده می‌شود. فرمول این تبدیل به صورت زیر است:

s = c log(r + 1)

در فرمول بالا c یک متغیر ثابت است که هر عددی می‌توان به آن داد. متغیر r ورودی مسئله است و s خروجی این فرمول می‌باشد. برای پیاده سازی تبدیل لگاریتمی در جاوا از تصویر زیر استفاده شده است.

کد این تبدیل به صورت زیر می‌باشد:

public static void main(String[] args) {
          try {
              BufferedImage image = ImageIO.read(new File("log transform albert einstein.jpg"));
              for (int x = 0; x < image.getWidth(); x++) {
                   for (int y = 0; y < image.getHeight(); y++) {
                        int rgba = image.getRGB(x, y);
                        Color col = new Color(rgba, true);
                        int c = 100;
                        Double red = c * Math.log10(col.getRed() + 1);
                        Double green = c * Math.log10(col.getGreen() + 1);
                        Double blue = c * Math.log10(col.getBlue() + 1);
                        col = new Color(red.intValue(), green.intValue(), blue.intValue());
                        image.setRGB(x, y, col.getRGB());
                   }
              }

              File outputFile = new File("Log - albert.png");
              ImageIO.write(image, "png", outputFile);
          } catch (IOException e) {
              // TODO Auto-generated catch block
              e.printStackTrace();
          }

     }

در ابتدای کد بالا یک تصویر سیاه و سفید را خوانده و سپس تک تک پیکسل‌های آن را تبدیل لگاریتمی می‌کنیم (درون 2 حلقه For) در آخر عکس تبدیل شده را ذخیره می‌کنیم. فایل خروجی به صورت زیر است:

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *