آموزش پردازش تصویر – فصل چهارم کتاب پردازش تصویر گنزالس

آموزش پردازش تصویر – فصل چهارم کتاب پردازش تصویر گنزالس

در فصل سوم به بررسی فیلترهای حوزه مکانی پرداختیم؛ در این فصل به معرفی فیلترها در حوزه فرکانسی می پردازیم. فیلتر در حوزه فرکانس به این معنی است که ابتدا مقادیر را از حوزه مکان به حوزه فرکانس می بریم و سپس روی مقادیر فرکانسی فیلتر را اعمال می کنیم. اما در ابتدا توضیح مختصری بدهم که حوزه فرکانس به چه معناست.

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

 

آشنایی با تبدیل فوریه و مفهوم حوزه فرکانس

در فضای یک بعدی، یعنی در حالتی که یک رشته ای از مقادیر داشته باشیم، می توانیم این سیگنال یک بعدی را با استفاده از توابع پایه ای بازسازی کنیم. برای نمونه سیگنال x(t) زیر را (سمت راست) می توانیم براساس مجموع سه سیگنال x1 و x2 و x3 بازسازی کنیم.

در تبدیل فوریه سیگنال سینوسی و کسینوسی به عنوان توابع پایه ای استفاده می شوند. در واقع توابع نمایی هم شکل دیگر توایع سینوسی و کسینوسی است. بنابراین تبدیل فوریه یک سیگنال در بعد زمان یا مکان را به مجموعه ای از توابع سینوسی با فرکانس های مختلف تجزیه می کند. برای بازسازی سیگنال اصلی از روی تبدیل فوریه، چون توابع پایه ای ثابت می باشد(سینوسی)، تنها نیاز به دانستن مجموعه فرکانس هایی است که سیگنال اصلی شامل بوده است. بنابراین در اصل تبدیل فوریه نشان می دهد که سیگنال شامل چه فرکانس هایی می باشد. برای مثال سیگنالی که شامل نویز برق شهر می باشد، در فرکانس 50هرتز دارای مقدار زیادی است؛ و فیلتر گذاری در حوزه فرکانس به معنای تقویت و یا تضعیف فرکانس ها می باشد، که در این مثال برای حذف نویز برق شهر کافی است درحوزه فرکانس، فرکانس 50هرتز را حذف کرد و مجدد سیگنال را با عکس تبدیل فوریه بازسازی نمود.

 

روابط مربوط به تبدیل فوریه دوبعدی روی تصویر

 

رابطه تبدیل فوریه در دو بعد به صورت زیر است:

و رابطه عکس تبدیل فوریه دو بعدی به صورت زیر است:

مشاهده می شود که تبدیل فوریه تصویری با ابعاد تصویر اصلی است.

تبدیل فوریه دارای مقدار حقیقیR و موهومی I می باشد، که اندازه تبدیل فوریه به صورت زیر بدست می آید:

و زاویه فاز تبدیل برابر زیر است :

در واقع نمایش قطبی تبدیل فوریه را می توان به صورت زیراست:

طیف توان به عنوان مربع اندازه در نظر گرفته می شود، یعنی :

خاصیت مهمی که تبدیل فوریه دارد، اگر سیگنال ورودی حقیقی باشد، تبدیل فوریه مزدوج-متقارن است یعنی :

و

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

و همچنین خاصیت متناوب بودن برای معکوس تبدیل فوریه صادق است :

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

 

دستورات تبدیل فوریه دو بعدی در متلب و نحوه کار با آن ها

 

برای محاسبه تبدیل فوریه گستته (DFT) از الگوریتم FFT استفاده می شود. در اینجا از تبدیل فوریه سریع دو بعدی برای تصویر استفاده می کنیم:

 

با استفاده از دستورات زیر می توان قسمت حقیقی و موهومی، اندازه و فاز تبدیل فوریه را بدست آورد و نمایش داد :

 

 

تصویر ورودی به صورت زیر است :

baby_ultra

خروجی :

 

 

fft4

اگر دقت کنید گوشه های تصویر مشابه هم هستند و به این علت است که همانطور که گفته شد تبدیل فوریه متناوب است، برای شیفت تبدیل فوریه به صورتی که گوشه های تصویر به مرکز منتقل شوند از دستور fftshift(f) استفاده می شود :

 

نتیجه به صورت زیر می شود:

fftshift

 

برای بازسازی تصویر اولیه از روی تبدیل فوریه، از دستور

ifft2(f)

استفاده می شود.

 

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

 

fftshlog

با استفاده از دستور

fft2(X,MROWS,NCOLS)

می توان قبل از تبدیل فوریه به تصویر حاشیه صفر اضافه کرد.

 

فیلترینگ DFT تصویر

مطابق شکل زیر اعمال فیلتر در حوزه فرکانس شامل چند گام ساده است :

گام اول ) بدست آوردن مقدار حاشیه لازم برای تصویر با دستور

PQ=paddedsize(size(f))

 

گام دوم)بدست آوردن تبدیل فوریه تصویر

F=fft2(f,PQ(1),PQ(2))

 

گام سوم) تولید فیلتر در حوزه فرکانس (در ادامه توضیح داده خواهد شد) سپس شیفت فیلتر به صورت

H=fftshift(H)

 

گام چهارم) ضرب فیلتر در تبدیل فوریه تصویر

G=H.*F

گام پنجم) بدست آوردن قسمت حقیقی معکوس تبدیل فوریه

g=real(ifft2(G))

 

گام ششم) چون در ابتدا به تصویر حاشیه اضافه کردیم، در این مرحله لازم است تا حاشیه ها را حذف کنیم

g=g(1:size(f,1),1:size(f,2));

 

مراحل بالا به صورت یک تابع با نام

dftfilt(f,H1)

آماده شده است، f تصویر ورودی در حوزه مکان است، و H1 فیلتر در حوزه فرکانس.

برای بدست آوردن فیلتر در حوزه فرکانس از دستور freqz2 استفاده می کنیم. به صورت کلی اعمال یک فیلتر در حوزه فرکانس روی یک تصویر به صورت زیر پیاده سازی می شود:

 

 

در مثال ذکر شده، پاسخ فرکانسی فیلتر sobel محاسبه می شود، و با دستور dftfilt به تصویر اعمال می شود.

sobeldftfilt

روشی که در بالا برای اعمال فیلتر در حوزه فرکانس گفته شد، روش غیر مستقیم است به این دلیل که ابتدا فیلتر در حوزه مکان را داریم سپس معادل فیلتر در حوزه فرکانس را بدست می آوریم. این روش برای استفاده از فیلترهای مکانی که در فصل قبل گفته شد، بسیار کاربرد دارد، اما روش دوم یعنی روش مستقیم این امکان را می دهد تا فیلترهای رایج در حوزه فرکانس مانند فیلترهای پایین گذر یا بالاگذر را به صورت مستقیم اعمال کنیم.

 

اعمال فیلتر های فرکانسی روی تصویر به صورت مستقیم

در مثال زیر یک فیلتر پایین گذر گوسی روی تصویر اعمال می شود:

 

 

نکات :

دستور dftuv همانند دستور meshgrid عمل می کند با این تفاوت که نقاط مرکزی مقادیر بزرگتری دارند و هرچه به حاشیه نزدیکتر می شویم مقدار کم می شود.

D0 مقدار عرض تابع گوسی را مشخص می کند و H ماتریس فیلتر گوسی است.

gaussianfilt

با استفاده از تابع آماده شده کتاب گنزالس با نام lpfilter می توانیم ماتریس فیلتر گوسی مورد نظر را از بین سه فیلتر پایین گذر بدست اوریم؛ که شامل سه فیلتر پایین گذر ایده آل ، باترورث و گوسی می باشد. برای مثال :

 

f تصویر مورد نظر است. به جای Gaussian می توانیم از “ideal” ، “btw” استفاده کنیم.

 

فیلترهای بالاگذر به راحتی با کم کردن فیلتر پایین گذر از یک بدست می آید، یعنی :

 

یا به راحتی از تابع آماده فیلتر بالاگذر استفاده کنیم :

برای تاکید برفرکانس های بالا و جلوگیری از صفر شدن و حذف اطلاعات به صورت زیر عمل می کنند:

Hhfe=a+b*Hhp;

یعنی یک مقدار آفست و ضریبی به فیلتر می دهند.

 

  1. مطالب بسیار عالی و شفاف توضیح داده شده است.
    بخصوص ذکر مثال در هر بخش به فهم بهتر مسئله بسیار کمک می کند.
    با تشکر

  2. سلام و عرض ادب
    از ارائه این مطالب از شما سپاسگزارم۰سه ماهی هست که دارم از روی کتاب گنزالس میخونم ولی نوشتار شما در فهم آنچه خونده بودم بسیار موثر بود۰ممنون

دیدگاه شما

( الزامي )

(الزامي)