ادامه آموزش نرم افزار متلب بخش 21
در این مبحث آشنا میشویم با :
1- روش آماری NSPR
2- تخمین با روش آماری واریانس
3- فراخوانی به روش J = deconvwnr ( I , PSF , NSR )
4- فرا خوانی به روش J = deconvwnr ( I , PSF , NCORR , ICORR )
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 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 ) ‘ ) ;
با این فرض که هیچ نویزی وجود ندارد چنین تصویری میدهد که نتیجه رضایت بخشی برای ما نیست .
حالا بیایم و با استفاده از تحلیل آماری NSPR را پیدا کنیم .
% % 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 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) ‘ ) ‘ ] ) ;
نویز را بیشتر حذف کرده ولی حالت بلوری وتار شده اش بیشتراز قبلی است اما نسبت به تصاویر بالا شفافتر وبهتر است .
میخواهیم از روش دیگر J = deconvwnr ( I , PSF , NCORR , ICORR ) هم برای فرا خوانی استفاده کنیم .
اول طیف نویز را به دست میاوریم .
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 = edgetaper (I , PSF) استفاده میکنیم که بخشی از کناره های تصویر رابه حالت خاصی محو میکند .
PSF2 = fspecial (‘gaussian ‘ , 60 , 10 ) ; Fhat4 = edgetaper (fhat3 , PSF2 ) ;
حاشیه ها را محوتر کرد .
میبینیم با هر کدام از فیلتر ها چقدر نتیجه متفاوت حاصل میشود .