image processing, python, پایتون, پردازش تصویر, پردازش تصویر در پایتون

تبدیل سپیا رنگ در پایتون (Convert to Sepia colored image)

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

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

  1. خواندن تصاویر در پایتون

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

رنگ سپیا (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 به ترتیب رنگ قرمز و سبز و آبی درون پیکسل تصویر است):
    1. If newRed > 255 then R = 255 else R = newRed
    2. If newGreen > 255 then G = 255 else G = newGreen
    3. If newBlue > 255 then B = 255 else B = newBlue
  4. مقادیر RGB جدید را جایگزین مقادیر قبلی می‌کنیم.
  5. مراحل 1 تا 4 را برای تمامی پیکسل‌ها تکرار می‌کنیم.

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

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

from PIL import Image
from math import ceil
def get_sepia_pixel(red, green, blue, alpha):
    # This is a really popular implementation
    tRed = ceil((0.759 * red) + (0.398 * green) + (0.194 * blue))
    tGreen =  ceil((0.676 * red) + (0.354 * green) + (0.173 * blue))
    tBlue =  ceil((0.524 * red) + (0.277 * green) + (0.136 * blue))
    if tRed > 255:
        tRed = 255
    if tGreen > 255:
        tGreen = 255
    if tBlue > 255:
        tBlue = 255   
    return tRed, tGreen, tBlue, alpha
def convertToSepia(sourceAddress,destAddress):
    source = Image.open(sourceAddress)
    result = Image.new('RGB', source.size)
    
    width, height = source.size
    pixels = result.load()
    
    
    for i in range(00, width, 1):
        for j in range(00, height, 1):
            p = source.getpixel((i, j))
            pixels[i, j] = get_sepia_pixel(p[00], p[1], p[2],255)
    
    
    result.save(destAddress, "PNG")
if __name__ == '__main__':
    convertToSepia('baboon.png', 'sepiababoon.png')
    print('convert to Sepia image finished...')

تابع get_sepia_pixel مقادیر RGB یک پیکسل را دریافت و در خروجی با توجه به فرمول بخش قبل مقادیر newRed و newGreen و newBlue را بدست می‌آورد(به سپیا تبدیل می کند). تابع convert_to_sepia پس از خواندن تصویر، به کمک تابع get_sepia_pixel پیکسل‌های تصویر را  تغییر داده و در آخر تصویر جدید را ذخیره می‌کند. خروجی برنامه به صورت زیر می‌باشد:

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

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

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