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

تبدیل لگاریتمی در پایتون (Logarithmic transformation)

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

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

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

بهبود تصاویر

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

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

s = T ( r )

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

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

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

s = c log(r + 1)

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

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

from PIL import Image
import math
def logTransformation(sourceAddress,destAddress):
    source = Image.open(sourceAddress)
    result = Image.new('RGB', source.size)
    
    width, height = source.size
    pixels = result.load()
    
    c = 100
    for i in range(1, width-1, 1):
        for j in range(1, height-1, 1):
            red = source.getpixel((i,j))[0]
            
            green =source.getpixel((i,j))[1]
            blue = source.getpixel((i,j))[2]
            
            newRed = math.floor(c * math.log10(red+1))
            newGreen = math.floor(c * math.log10(green+1))
            newBlue = math.floor(c * math.log10(blue+1))
            pixels[i, j] = (newRed, newGreen, newBlue,255)
    
    
    result.save(destAddress, "jpeg")
if __name__ == '__main__':
    logTransformation('log transform input.jpg', 'log transform output.jpg')
    print('convert image finished...')

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

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

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

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