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

فیلتر نقطه میانی در پایتون (Midpoint Filter in Python)

فیلتر نقطه میانی در پایتون

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

  1. خواندن تصاویر در پایتون
  2. حلقه For در پایتون
  3. توابع در پایتون
  4. لیست در پایتون
  5. فیلتر مینیمم در پایتون
  6. فیلتر ماکزیمم در پایتون

فیلتر نقطه میانی

در فیلتر نقطه میانی رنگ هر پیکسل با مقدار میانگین مینیمم و ماکزیمم پیکسل‌های همسایگی خود تعیین می‌شود. به عنوان مثال تصویر زیر را ببینید. پیکسل‌های همسایه عدد 10 در آن برابر با 2 و 4 و 6 و 8 و 12 و 14 و 16 و 18 است. برای محاسبه نقطه میانی کافی است میانگین دو عدد ماکزیمم و مینیمم یعنی 2/(18+2) را محاسبه کنیم.

فیلتر نقطه میانی در پایتون

برای پیاده‌سازی فیلتر نقطه میانی در پایتون کافی است همسایگی پیکسل X و Y را خوانده و نقطه میانی آن را با توجه به فرمول بالا محاسبه و جایگزین پیکسل X و Y کنید. کد فیلتر میانی در پایتون به صورت زیر می‌باشد:

from PIL import Image 
import math
def midpointFilter(sourceAddress, destAddress):
    source = Image.open(sourceAddress)
    result = Image.new('RGB', source.size)
    
    width, height = source.size
    pixels = result.load()
    
    for i in range(1, width - 1, 1):
        for j in range(1, height - 1, 1):
            redMid = findRedMidpoint(source, i, j)
            greenMid = findGreenMidpoint(source, i, j)
            blueMid = findBlueMidpoint(source, i, j)
            pixels[i, j] = (redMid, greenMid, blueMid, 255)
    
    result.save(destAddress, "jpeg")
    
def findRedMidpoint(source, x, y):
    neighbour = [00] * 9
    neighbour[00] = source.getpixel((x - 1, y - 1))[00]
    neighbour[1] = source.getpixel((x + 1, y + 1))[00]
    neighbour[2] = source.getpixel((x, y - 1))[00]
    neighbour[3] = source.getpixel((x, y + 1))[00]
    neighbour[4] = source.getpixel((x - 1, y))[00]
    neighbour[5] = source.getpixel((x + 1, y))[00]
    neighbour[6] = source.getpixel((x - 1, y + 1))[00]
    neighbour[7] = source.getpixel((x + 1, y - 1))[00]
    neighbour[8] = source.getpixel((x, y))[00]
    maxRed = max(neighbour)
    minRed = min(neighbour)
    return  math.floor((maxRed + minRed) / 2)  
def findGreenMidpoint(source, x, y):
    neighbour = [00] * 9
    neighbour[00] = source.getpixel((x - 1, y - 1))[1]
    neighbour[1] = source.getpixel((x + 1, y + 1))[1]
    neighbour[2] = source.getpixel((x, y - 1))[1]
    neighbour[3] = source.getpixel((x, y + 1))[1]
    neighbour[4] = source.getpixel((x - 1, y))[1]
    neighbour[5] = source.getpixel((x + 1, y))[1]
    neighbour[6] = source.getpixel((x - 1, y + 1))[1]
    neighbour[7] = source.getpixel((x + 1, y - 1))[1]
    neighbour[8] = source.getpixel((x, y))[1]
    maxGreen = max(neighbour)
    minGreen = min(neighbour)
    return  math.floor((maxGreen + minGreen) / 2)  
def findBlueMidpoint(source, x, y):
    neighbour = [00] * 9
    neighbour[00] = source.getpixel((x - 1, y - 1))[2]
    neighbour[1] = source.getpixel((x + 1, y + 1))[2]
    neighbour[2] = source.getpixel((x, y - 1))[2]
    neighbour[3] = source.getpixel((x, y + 1))[2]
    neighbour[4] = source.getpixel((x - 1, y))[2]
    neighbour[5] = source.getpixel((x + 1, y))[2]
    neighbour[6] = source.getpixel((x - 1, y + 1))[2]
    neighbour[7] = source.getpixel((x + 1, y - 1))[2]
    neighbour[8] = source.getpixel((x, y))[2]
    maxBlue = max(neighbour)
    minBlue = min(neighbour)
    return  math.floor((maxBlue + minBlue) / 2)
if __name__ == '__main__':
    midpointFilter('Midpoint Filter input.jpg', 'Midpoint Filter output.jpg')
    print('convert image finished...')

متدهای مورد استفاده کد فوق:

  • تابع findRedMidpoint: این تابع میانگین ماکزیمم و مینیمم قرمز رنگ همسایگان پیکسل X و Y (پیکسل ورودی تابع) را در خروجی به ما می‌دهد.
  • تابع findGreenMidpoint: این تابع میانگین ماکزیمم و مینیمم سبز رنگ همسایگان پیکسل X و Y (پیکسل ورودی تابع) را در خروجی به ما می‌دهد.
  • تابع findBlueMidpoint: این تابع میانگین ماکزیمم و مینیمم آبی رنگ همسایگان پیکسل X و Y (پیکسل ورودی تابع) را در خروجی به ما می‌دهد.
  • تابع midpointFilter: در این تابع ادرس تصویر در ورودی دریافت و با اعمال فیلتر نقطه میانی بر روی تمامی پیکسل‌ها، تصویر را در آدرس خروجی ذخیره می‌کند. فایل خروجی پس از اجرای برنامه ایجاد می‌شود.

خروجی فیلتر نقطه میانی

خروجی کد فوق به صورت زیر می‌باشد:

همانطور که در تصویر خروجی می بینید فیلتر نقطه میانی برای تصاویری استفاده می‌شود که دنباله کوتاه (کم برد) استفاده می‌شود.

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

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

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