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

تبدیل سپیا رنگ در جاوا (پردازش تصویر)

تبدیل سپیا رنگ در جاوا

در این قسمت تیم کدگیت را با آموزش تبدیل سپیا رنگ در جاوا (پردازش تصویر) همراهی کنید. آموزش‌های گذشته پردازش تصویر در مورد بهبود تصاویر صحبت شد در ادامه همین مبحث در این جلسه آموزش تبدیل سپیا (sepia) رنگ را توضیح داده و در زبان برنامه‌نویسی جاوا آن را پیاده‌سازی خواهیم کرد. پیشنهاد می‌کنیم قبل از مطالعه این جلسه، آموزش‌های زیر را مطالعه کنید:

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

تبدیل سپیا رنگ در جاوا

رنگ سپیا (Sepia) به قهوه ای متمایل به قرمز گفته می شود. این رنگ در عکاسی کاربرد‌های فراوانی دارد. برای تبدیل تصاویر به این رنگ باید فرمول زیر را به کار ببریم:

newRed = 0.393*R + 0.769*G + 0.189*B

newGreen = 0.349*R + 0.686*G + 0.168*B

newBlue = 0.272*R + 0.534*G + 0.131*B

متغیر R و G و B به ترتیب رنگ قرمز و سبز و آبی درون پیکسل تصویر است با استفاده از فرمول فوق، الگوریتم تبدیل یک عکس به رنگ سپیا به صورت زیر می‌باشد:

  1. تمامی پیکسل تصویر رنگی را دریافت کرده
  2. با استفاده از پیکسل‌های ورودی newRed و newGreen و newBlue را محاسبه می‌کنیم.
  3. شرط زیر را برای مقادیر محابسبه شده در فرمول بالا به کار می‌بریم (متغیر R و G و B به ترتیب رنگ قرمز و سبز و آبی درون پیکسل تصویر است):
    • If newRed > 255 then R = 255 else R = newRed
    • If newGreen > 255 then G = 255 else G = newGreen
    • If newBlue > 255 then B = 255 else B = newBlue
  4. مقادیر RGB جدید را جایگزین مقادیر قبلی می‌کنیم.
  5. مراحل 1 تا 4 را برای تمامی پیکسل‌ها تکرار می‌کنیم.

پیاده‌سازی تبدیل سپیا رنگ در جاوا

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

public class Sepia {

     public static void main(String args[]) throws IOException {

          BufferedImage img = null;

          File f = null;

          System.out.println("Reading Image...");

          // read image

          try {

              f = new File("baboon.png");

              img = ImageIO.read(f);

          } catch (IOException e) {

              System.out.println(e);

          }



          // get width and height of the image

          int width = img.getWidth();

          int height = img.getHeight();

          System.out.println("converting to sepia Image...");

          // convert to sepia

          for (int y = 0; y < height; y++) {

              for (int x = 0; x < width; x++) {

                   int p = img.getRGB(x, y);

                  

                Color col = new Color(p, true);        



                   int a = col.getAlpha();

                   int R = col.getRed();

                   int G = col.getGreen();

                   int B = col.getBlue();



                   // calculate newRed, newGreen, newBlue

                   int newRed = (int) (0.393 * R + 0.769 * G + 0.189 * B);

                   int newGreen = (int) (0.349 * R + 0.686 * G + 0.168 * B);

                   int newBlue = (int) (0.272 * R + 0.534 * G + 0.131 * B);



                   // check condition

                   if (newRed > 255)

                        R = 255;

                   else

                        R = newRed;



                   if (newGreen > 255)

                        G = 255;

                   else

                        G = newGreen;



                    if (newBlue > 255)

                        B = 255;

                   else

                        B = newBlue;



                   // set new RGB value

                   col = new Color(R, G, B);  



                   img.setRGB(x, y, col.getRGB());

              }

          }



          // write image

          System.out.println("Creating new image...");

          try {

              f = new File("sepiababoon.jpg");

              ImageIO.write(img, "jpg", f);

          } catch (IOException e) {

              System.out.println(e);

          }

          System.out.println("Finishing...");

     }

}

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

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

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