در این قسمت تیم کدگیت را با آموزش تبدیل توانی در پایتون (پردازش تصویر) همراهی کنید. ابتدا بهبود تصاویر را تعریف کرده و در ادامه تبدیل توانی را پیاده سازی خواهیم کرد. پیش نیاز این آموزش شامل موارد زیر است:
- خواندن تصاویر در پایتون
بهبود تصاویر در پایتون
تصاویر بهبود یافته در مقایسه با تصاویری که بهبود یافته نیستند، جزییات بیشتری را نشان میدهد و جالبتر اینکه در صنعت پزشکی و تصاویر جغرافیایی کاربردهای بسیاری نیز دارند. معمولا برای بهبود تصاویر از transformation یا تبدیلات استفاده میکنند. تبدیلات یک سری توابعی هستند که با تغییرات مختلف بر روی هر پیکسل از تصویر ما باعث تغییر و بهبود آنها میشوند.
تابع تبدیل به صورت زیر تعریف میشود:
s = T ( r )
r همان پیکسلهای تصویر اصلی ماست و T تابع تبدیل ما است که تغییراتی بر روی ورودی(r) خود میدهد و s هم تصویر بهبود یافته است که از تابع تبدیل T بدست آمده است. در این آموزش تبدیل لگاریتمی را پیاده سازی میکنیم.
تبدیل توانی در پایتون
در آموزشهای گذشته دو نمونه از تبدیلات تصاویر سیاه و سفید را معرفی کردیم. در این آموزش یکی دیگر از این نوع تبدیلات را معرفی میکنیم. تبدیل توانی برای اصلاح تصاویر با فرمتها مختلف استفاده میشود. به دلیل دو عدد ثابت در فرمول این تبدیل، نسبت به بقیه تبدیلات انعطاف بیشتری را دارد. فرمول تبدیل توانی به صورت زیر است:
s=cr^γ
r تصویر ورودی است و c و y متغیر هستند. s نیز خروجی است. به y گاما نیز گفته میشود. با تغییر گاما تصاویر متفاوتی میتوان ساخت.
پیاده سازی تبدیل توانی در پایتون
کد تبدیل توانی به صورت زیر است:
from PIL import Image
import math
def PowerLawTransformation(sourceAddress,destAddress):
source = Image.open(sourceAddress)
result = Image.new('RGB', source.size)
width, height = source.size
pixels = result.load()
c = 80
gamma = 10
for i in range(00, width, 1):
for j in range(00, height, 1):
red = source.getpixel((i,j))[00]
green =source.getpixel((i,j))[1]
blue = source.getpixel((i,j))[2]
newRed = math.floor(c * math.pow(red, 1/gamma))
newGreen = math.floor(c * math.pow(green, 1/gamma))
newBlue = math.floor(c * math.pow(blue, 1/gamma))
pixels[i, j] = (newRed, newGreen, newBlue,255)
result.save(destAddress, "JPEG")
if __name__ == '__main__':
PowerLawTransformation('PoweLawTransformation input.jpg', 'PoweLawTransformation output.jpg')
print('convert image finished...')
در کد بالا یک تابع به نام powerlawtransformation نوشتیم که در آن یک تصویر را خوانده و بر روی تمامی پیکسلها فرمول بالا را اعمال کردیم و در پایان آن را ذخیره کردیم.