حذف نویز و اصلاح تصویر و تابع Wiener Filtering در متلب (12)

آموزش برنامه نویسی متلب

 حذف نویز و اصلاح تصویر و تابع Wiener Filtering در متلب

 آموزش پردازش تصویر و برنامه نویسی در متلب12

می خوانیم :

1- فیلترهای مکان و حذف نویز

2- تابع Wiener Filtering

3- روش آماری فیلتر NSPR  

4- تخمین زدن با روش آماری واریانس 

5- تابع deconvwnr

6-  روش J = deconvwnr ( I , PSF , NSR ) 

7- روش J = deconvwnr ( I , PSF , NCORR , ICORR )  

چگونگی اصلاح تصویر و حذف نویز و تابع Wiener Filtering و روش آماری فیلتر NSPR در متلب را بررسی میکنیم .

  فیلترهای مکان و حذف نویز:

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

 

فرمول اصلاح تصویر متلب

 به ترکیب پایه های فیلترینگ میپردازیم .

تصویر بدون نویز متلب

تصاویر متفاوت تغییرات متفاوتی روی نویزها دارند یعنی هر نویز برای هر تصویر ممکن است به گونه ای متفاوت عمل کند .

با قرار دادنMSE  به عنوان پایه عملکرد به تغییر ساختار عصبی شبکه می پردازیم .

متاسفانه با این روش حذف نویزها به خوبی انجام نمیشود .

باید روش های بهتری برای برگرداندن تصویر اصلی در حوزه فرکانس داشته باشیم ، Wiener Filtering یکی ازاین روش ها است .

روش حذف پیچیدگی متلب

با استفاده از تابع Wiener Filtering درصد خطای موجود را به پایین ترین حد ممکن میرسانیم .

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

در NSPR مجهول ما  F است برای رسیدن به جواب باید F را به توابع معلوم تبدیل کنیم تا بتوانیم شدت نسبی را به دست آوریم .

با برداشتن نماد خط صاف بالای NSPR ، NSPR ثابت را به نمایش میگذاریم .

نمایش  NSPR متلب

 به زبان آمار  NSPR این مدل میباشد .

ماتریس وزنی تبدیل مکانی راPSF میگوییم .

NSR اندازه نویز به سیگنال را نشان میدهد .

از NCORR برای نمایش رابطه نویز با نویز استفاده میکنیم  .

از ICORR برای نمایش رابطه تصویر با تصویراستفاده میکنیم  .

به خود موضوع حذف نویز میپردازیم :

  1. Clc ;
    Clear ;
    Close all ;
    % % Read Image
    f =imread ( ‘ Cameraman . tif ‘ ) ;
    f = im2double (f) ;
    % % Apply Motion Filter
    MotionLength = 7 ;
    MotionAngle = 45 ;
    PSF = fspecial ( ‘ motion ‘ , MotionLength , MotionAngle ) ;
    g1 = imfilter ( f , PSF) ;
    % % Add Noise
    NoiseMean = 0 ;
    NoiseVar = 0 . 01 ;
    g2 = imnoise ( g1 , ‘gaussian ‘ , NoiseMean , NoiseVar ) ;
    % % Wiener Deconvolution
    
    % % Results
    figure ;
    subplot ( 2 , 2 , 1 ) ;
    imshow ( f ) ;
    title ( ‘ Original Image ‘ ) ;
    subplot ( 2 , 2 , 2 ) ;
    imshow ( g1) ;
    title ( ‘ Blurred Image ‘ ) ;
    subplot ( 2 , 2 , 3) ;
    imshow ( g2) ;
    title ( ‘ Blurred and Noisey Image ‘ ) ;

 

اصلاح تصویر Wiener Filtering متلب

با کد نویسی به روش    J = deconvwnr ( I , PSF , NSR )  توانستیم چرخش 45 درجه ای تصویر را با فرض PSF معلوم حذف کنیم .

روش آماری واریانس راه دیگری برای حذف نویز :

  1. % % Wiener Deconvolution
    % ImageVar = Var (f(:)) ;
    % NSPR = NoiseVar ;
    Fhat 1 = deconvwnr (g2 , PSF , 0 ) ;
    % % Results
    figure ;
    subplot ( 2 , 3 , 1 ) ;
    imshow ( f ) ;
    title ( ‘ Original Image ‘ ) ;
    subplot ( 2 , 3 , 2 ) ;
    imshow ( g1) ;
    title ( ‘ Blurred Image ‘ ) ;
    subplot ( 2 , 3 , 3) ;
    imshow ( g2) ;
    title ( ‘ Blurred and Noisey Image ‘ ) ;
    subplot ( 2 , 3 , 4) ;
    imshow ( fhat1 ) ;
    title ( ‘ Recovered Image ( NPSR = 0 ) ‘ ) ;

 

اصلاح تصویر Wiener Filtering متلب

به کار بردن روش آماری بدون دادن نویزی به آن باعث مخدوش شدن تصویر میشود و کارایی ندارد .

با  NSPR کار میکنیم ببینیم چه طور میشود .

  1. % % Add Noise
    NoiseMean = 0 ;
    NoiseVar = 0 . 001 ;
    g2 = imnoise ( g1 , ‘gaussian ‘ , NoiseMean , NoiseVar ) ;
    % % Wiener Deconvolution
    NSPR1 = 0 ;
    Fhat 1 = deconvwnr (g2 , PSF , NSPR1 ) ;
    ImageVar = Var (f (:) ) ;
    NSPR2 = NoiseVar / ImageVar ;
    Fhat2 = deconvwnr (g2 , PSF , NSPR2 ) ;
    % % Results
    figure ;
    subplot ( 2 , 3 , 1 ) ;
    imshow ( f ) ;
    title ( ‘ Original Image ‘ ) ;
    subplot ( 2 , 3 , 2 ) ;
    imshow ( g1) ;
    title ( ‘ Blurred Image ‘ ) ;
    subplot ( 2 , 3 , 3) ;
    imshow ( g2) ;
    title ( ‘ Blurred and Noisey Image ‘ ) ;
    subplot ( 2 , 3 , 4) ;
    imshow ( fhat1 ) ;
    title ( ‘ Recovered Image ( NPSR = 0 ) ‘ ) ;
    subplot ( 2 , 3 , 5) ;
    imshow ( fhat2 ) ;
    title ( [ ‘ Recovered Image ( NPSR = ‘ num2str ( NSPR2) ‘ ) ‘  ] ) ;

 

اصلاح تصویر Wiener Filtering متلب

اگر واریانس نویز را 10 برابر کمتر کنیم چرخش 45 درجه ای آن از بین میرود و از نظر وضوح با تصویر اصلی برابری میکند حالا به رفع  اثر نویز می پردازیم .

  1. % % Wiener Deconvolution
    NSPR1 = 0 ;
    Fhat 1 = deconvwnr (g2 , PSF , NSPR1 ) ;
    ImageVar = Var (f (:) ) ;
    NSPR2 = NoiseVar / ImageVar ;
    Fhat2 = deconvwnr (g2 , PSF , NSPR2 ) ;
    NSPR3 = 0 .05 ;
    Fhat3 = deconvwnr (g2 , PSF , NSPR3 ) ;
    % % Results
    figure ;
    subplot ( 2 , 3 , 1 ) ;
    imshow ( f ) ;
    title ( ‘ Original Image ‘ ) ;
    subplot ( 2 , 3 , 2 ) ;
    imshow ( g1) ;
    title ( ‘ Blurred Image ‘ ) ;
    subplot ( 2 , 3 , 3) ;
    imshow ( g2) ;
    title ( ‘ Blurred and Noisey Image ‘ ) ;
    subplot ( 2 , 3 , 4) ;
    imshow ( fhat1 ) ;
    title ( ‘ Recovered Image ( NPSR = 0 ) ‘ ) ;
    subplot ( 2 , 3 , 5) ;
    imshow ( fhat2 ) ;
    title ( [ ‘ Recovered Image ( NPSR = ‘ num2str ( NSPR2) ‘ ) ‘  ] ) ;
    subplot ( 2 , 3 , 6) ;
    imshow ( fhat3 ) ;
    title ( [ ‘ Recovered Image ( NPSR = ‘ num2str ( NSPR3) ‘ ) ‘  ] ) ;

 

اصلاح تصویر Wiener Filtering متلب

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

از فیلترینگ در نرم افزار پلاک خوان برای استفاده در سیستم نرم افزار کنترل تردد خودرو و اتوماسیون پارکینگ جهت شفاف سازی و از بین بردن نویز استفاده میگردد.

از روش  J = deconvwnr ( I , PSF , NCORR , ICORR ) به کد نویسی میپردازیم   :

با یافتن طیف توانستیم نویز را به دست آوریم .

  1. SN = abs (fft2 (g2 – g1)) . ^2 ;
    NCORR = fftshift (real (ifft2 (SN)) ;
    SF = abs (fft2(f)) . ^2 ;
    FCORR = fftshift (real (ifft2 (SF))) ;
    NSPR = NCORR . / FCORR ;
    Fhat3 = deconvwnr ( g2 , PSF , NCORR , FCORR ) ;

 

تابع J = deconvwnr ( I , PSF , NCORR , ICORR )  متلب

در حالت کُریلیشن با خود نقاط مختلف تصویر همبستگی سیگنال متفاوتی ارائه میدهد .

تصویر از وضوح خوبی برخوردار است حالا از تابع J = edgetaper (I , PSF) برای رفع نویز حواشی تصویر استفاده میکنیم .

  1. PSF2 = fspecial (‘gaussian ‘ , 60 , 10 ) ;
    Fhat4 = edgetaper (fhat3 , PSF2 ) ;

 

تابع J = edgetaper (I , PSF) متلب

تابع J = edgetaper (I , PSF) توانست نویز اطراف تصویر را حذف کند و به بهترین راحت تصویر اصلی رسیدیم .

تابع Wiener Filtering و روش آماری فیلتر NSPR متلب نتایج متنوعی به ما میدهد .

به پایان آموزش متلب رسیدیم .