روش های فیلترینگ مکانی با تابع 2 Ordfilt در متلب  (6)

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

روش های فیلترینگ مکانی با تابع 2 Log – Laplacian – Ordfilt درمتلب  

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

می خوانیم :

1- تابع Laplacian 

2- فرمول مشتق 

3- مشتق گیری دو بعدی 

4- فیلتر Log

5-  فیلتر sobel

6- فیلتر prewitt 

7- فیلترunsharp

8-  فیلتر های غیر خطی 

9- فیلتر Ordfilt 2

10- تابعMedfilt 2

در ادامه آموزش روش های فیلترینگ مکانی به تابع 2 Log – Laplacian – Ordfilt درمتلب میپردازیم .

تابع Laplacian یک تقریب از مشتق مرتبه دو میباشد .

 

تابع Laplacian 

 

تابع Laplacian مشتق درجه 2

 

ماتریس تابع Laplacian 

مشتق گیری دو بعدی = ماتریس مشتق مرتبه دو

  1. Clc;
    Clear ;
    Close all ;
    Img 0 = imread ( ‘ rice . png ‘ ) ;
    Alpha 1 = 0 ;
    W1 = fspecial ( ‘ laplacian ‘ , alpha 1 ) ;
    Img 1 = imfilter ( img 0 , w1 , ‘ circular ‘ ) ;
    Alpha 2 = 0 . 2 ;
    W2 = fspecial ( ‘ laplacian ‘ , alpha 2 ) ;
    Img 2 = imfilter ( img 0 , w2 , ‘ circular ‘ ) ;
    Alpha 3 = 0 . 4 ;
    W3 = fspecial ( ‘ laplacian ‘ , alpha 3 ) ;
    Img 3 = imfilter ( img 0 , w3 , ‘ circular ‘ ) ;
    Alpha 4 = 0  . 8 ;
    W4 = fspecial ( ‘ laplacian ‘ , alpha 4 ) ;
    Img 4 = imfilter ( img 0 , w4 , ‘ circular ‘ ) ;
    Alpha5= 1 ;
    W5 = fspecial ( ‘ laplacian ‘ , alpha 5 ) ;
    Img 5 = imfilter ( img 0 , w5 , ‘ circular ‘ ) ;
    Figure ;
    Subplot (2, 3 , 1 ) ;
    Imshow ( img 0 ) ;
    Title ( ‘ Original Image ‘ ) ;
    Subplot (2, 3 , 2 ) ;
    Imshow ( img 1 ) ;
    Title ( [ ‘ Laplacian with / alpha = num 2 str(alpha 1 ) ] ) ;
    Subplot (2, 3 ,3) ;
    Imshow ( img 2 ) ;
    Title ( [ ‘ Laplacian with \ alpha = num 2 str(alpha 2 ) ] ) ;
    Subplot (2, 3 , 4) ;
    Imshow ( img 3 ) ;
    Title ( [ ‘ Laplacian with\ alpha = num 2 str(alpha 3 ) ] ) ;
    Subplot (2, 3 , 5) ;
    Imshow ( img 4 ) ;
    Title ( [ ‘ Laplacian with \ alpha = num 2 str(alpha 4 ) ] ) ;
    Subplot (2, 3 ,6) ;
    Imshow ( img 5 ) ;
    Title ( [ ‘ Laplacian with\alpha = num 2 str(alpha5) ] ) ;
    
    
    
    فیلترینگ مکانی 2 Log Laplacian Ordfilt متلب  

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

میخواهیم تصاویر را واضح تر کنیم :

  1. Functhon Xn = Normalize ( X , beta )
  2. If nargin < 2
    Beta = 1 ;
    End
    X min = min ( x ( : ) ) ;
    X max = max ( x ( : ) ) ;
    XN = ( ( X – X min ) / ( X max – X min ) ) . ^ beta ;
    
    
    

بتا را یک میگیریم تغییرات تصویر را ببینیم .

فیلترینگ مکانی 2 Log Laplacian Ordfilt متلب  

تصویر تغییر نمیکند فقط حالت خطی ایجاد میشود چون بتا برابر یک بود .

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

تغییر رنگ نقاط را با مشتق عادی به نمایش میگذاریم ، مشتق درجه دو یک فیلتر بالا گذر میباشد .

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

عدد با w لازم است که هم علامت باشند .

  1. Clc;
    Clear ;
    Close all ;
    Img 0 = imread ( ‘ rice . png ‘ ) ;
    Img 0 = im2double ( img 0 ) ;
    Alpha  = 0 ;
    W = fspecial ( ‘ laplacian ‘ , alpha  ) ;
    Img 1 = imfilter ( img 0 , w , ‘ circular ‘ ) ;
    C = -1 ;
    Img 2 = img 0 + c * img 1 ;
    Figure ;
    Subplot ( 1 , 3 , 1 ) ;
    Imshow ( img 0 ) ;
    Title ( ‘ Original Image ‘ ) ;
    Subplot ( 1 , 3 , 2) ;
    Imshow ( img 1 ) ;
    Title ([ ‘ Laplacian with \ alpha = ‘ num2str ( alpha) ] ) ;
    Subplot ( 1 , 3 , 3 ) ;
    Imshow ( img 2 ) ;
    Title ( ‘ Image Enhancement with Laplacian ‘ ) ;

 

نمونه تابع Laplacian متلب

از مجموع فیلتر Laplacian  با تصویر ارجینال چنین تصویر واضحی به دست می آوریم .

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

این فیلتر در نمایش تصویر تمام جاهایی که علامت مشتق تغییر کرده را نشان میدهد .

تابع Log  :

تابع Log حاصل اِعمال تابع Laplacian بر فیلتر Gaussian متلب است .

با Hsize , sigma میتوانیم سایز ماتریس را مشخص کنیم .

  1. Clc;
    Clear ;
    Close all ;
    Img 1 = imread ( ‘ rice . png ‘ ) ;
    Sigma = 1 ;
    W = fspecial ( ‘ Log ‘ , 5 , sigma );
    >> w =  fspecial ( ‘ Log ‘ , 100 ) ;
    >> w = w / max ( w ( : ) ) ;
    >> imshow ( w )
    
    
    

تابع Log متلب

 

  1. >> w =  fspecial ( ‘ Log ‘ , 100 , 10 ) ;
    >> w = w / max ( w ( : ) ) ;
    >> imshow ( w )
    
    
    
    نمونه دیگر تابع Log متلب

درروش های فیلترینگ مکانی تابع 2 Log – Laplacian – Ordfilt درمتلب منفی بودن مرکز در محاسبات تاثیری ندارد .

  1. >> w = Normalize ( w ) ;
    >> imshow ( w )

تابع Normalize متلب

دایره سیاه منفی ، دایره خاکستری خنثی ، دایره سفید مثبت را نشان میدهند .

تابع log در بزرگ کردن حواشی در تصویر مقصد کاربرد دارد .

فیلتر motion با Len طول حرکت و با theta زاویه حرکت لنز دوربین را تنظیم میکند .

  1. Clc;
    Clear ;
    Close all ;
    Img 0 = imread ( ‘ rice . png ‘ ) ;
    Img 0 = im2double ( img 0 ) ;
    W = fspecial ( ‘ motion ‘ , 40 , 45 ) ;
    Img = imfilter ( img 0 , w ,’circular ‘ ) ;
    Figure ;
    Subplot ( 1 , 2,1) ;
    Imshow ( img 0 ) ;
    Title ( ‘ Original Image ‘) ;
    Subplot ( 1 , 2,2) ;
    Imshow ( img 1 ) ;
    Title ( ‘ After Motion Filter ‘ ) ;

 

تابع After Motion Filter متلب

After Motion Filter یک فیلتر جهت دار ، منحرف شده پایین گذر است .

از دو فیلتر  prewitt , sobel برای قوی تر شدن حواشی تصویر در راستای عمود یا افق کمک میگیریم .

  1. >> w = fspecial ( ‘ prewitt ‘ )
    W =
    1 1 1
    0 0 0
    -1 -1 -1
    >> w = fspecial ( ‘ sobel ‘ )
    W =
    1 2 1
    0 0 0
    -1 -2 -1
    
    Clc;
    Clear ;
    Close all ;
    Img 0 = imread ( ‘ rice . png ‘ ) ;
    Img 0 = im2double ( img 0 ) ;
    Wp = fspecial ( ‘ prewitt ‘ ) ;
    Img 1= imfilter ( img 0 , wp ,’circular ‘ ) ;
    Ws = fspecial ( ‘ Sobel ‘ ) ;
    Img 2= imfilter ( img 0 , ws ,’circular ‘ ) ;
    Figure ;
    Subplot ( 1 , 3, 1) ;
    Imshow ( img 0 ) ;
    Title ( ‘ Original Image ‘) ;
    Subplot ( 1 , 3,2) ;
    Imshow ( img 1 ) ;
    Title ( ‘ After Prewitt Filter ‘ ) ;
    Subplot ( 1 , 3,3) ;
    Imshow ( img 2 ) ;
    Title ( ‘ After Sobel Filter ‘ ) ;

 

تابع After Sobel Filter متلب

دستور برنامه مربوط به خطوط افقی = نمایش بیشتر خط های افقی

  1. Clc;
    Clear ;
    Close all ;
    Img 0 = imread ( ‘ rice . png ‘ ) ;
    Img 0 = im2double ( img 0 ) ;
    Wp = fspecial ( ‘ prewitt ‘ ) ;
    Img 1= imfilter ( img 0 , wp ,’circular ‘ ) ;
    Img 2= imfilter ( img 0 , wp ,’circular ‘ ) ;
    Alpha = 0 . 3 ;
    Img 3= imfilter ( img 0 , alpha *wp + ( 1 – alpha ) * wp ‘ , ‘circular ‘ ) ;
    Ws = fspecial ( ‘ Sobel ‘ ) ;
    Img 4= imfilter ( img 0 , ws ,’circular ‘ ) ;
    Img 5= imfilter ( img 0 , ws ,’circular ‘ ) ;
    Figure ;
    Subplot (2, 3, 1) ;
    Imshow ( img 0 ) ;
    Title ( ‘ Original Image ‘) ;
    Subplot (2, 3,2) ;
    Imshow ( img 1 ) ;
    Title ( ‘ After H Prewitt Filter ‘ ) ;
    Subplot (2, 3,3) ;
    Imshow ( img 2 ) ;
    Title ( ‘ After V Prewitt Filter ‘ ) ;
    Subplot (2, 3,4) ;
    Imshow ( img 3 ) ;
    Title ( ‘ After Mixed HV Prewitt Filter ‘ ) ;
    Subplot (2, 3,5 ) ;
    Imshow ( img 4 ) ;
    Title ( ‘ After H Sobel Filter ‘ ) ;
    Subplot (2, 3,6 ) ;
    Imshow ( img 5 ) ;
    Title ( ‘ After V Sobel Filter ‘ ) ;
    
    

فیلترینگ مکانی 2 Log Laplacian Ordfilt متلب  

فیلتر Sobel از دقت و ظرافت بالاتری نسبت به فیلتر prewitt برخوردار است .

موءلفه alpha به فیلتر unsharp  مربوط میشود .

  1. Clc;
    Clear ;
    Close all ;
    Img 0 = imread ( ‘ rice . png ‘ ) ;
    Img 0 = im2double ( img 0 ) ;
    Alpha = 0 ;
    W = fspecial ( ‘unsharp‘ , alpha ) ;
    Img 1= imfilter ( img 0 , w ,’circular ‘ ) ;
    Figure ;
    Subplot (1, 2 , 1) ;
    Imshow ( img 0 ) ;
    Title ( ‘ Original Image ‘) ;
    Subplot (1, 2,2) ;
    Imshow ( img 1 ) ;
    Title ( ‘ After Unsharp Filter ‘ ) ;
    
    

تابع After Unsharp Filter متلب

 

  1. Clc;
    Clear ;
    Close all ;
    Img 0 = imread ( ‘ rice . png ‘ ) ;
    Img 0 = im2double ( img 0 ) ;
    Wp = fspecial ( ‘ prewitt ‘ ) ;
    Img 1= imfilter ( img 0 , wp ,’circular ‘ ) ;
    Img 2= imfilter ( img 0 , wp ,’circular ‘ ) ;
    % Alpha = 0 . 5;
    % img 3 = imfilter ( img 0 , alpha * wp + ( 1 – alpha ) * wp ‘ , ‘ circular ‘ ) ;
    Img 3= sqrt ( img 1 . ^ 2 + img 2 . ^ 2 ) ;
    Ws = fspecial ( ‘ Sobel ‘ ) ;
    Img 4= imfilter ( img 0 , ws ,’circular ‘ ) ;
    Img 5= imfilter ( img 0 , ws ,’circular ‘ ) ;
    Figure ;
    Subplot (2, 3, 1) ;
    Imshow ( img 0 ) ;
    Title ( ‘ Original Image ‘) ;
    Subplot (2, 3,2) ;
    Imshow ( img 1 ) ;
    Title ( ‘ After H Prewitt Filter ‘ ) ;
    Subplot (2, 3,3) ;
    Imshow ( img 2 ) ;
    Title ( ‘ After V Prewitt Filter ‘ ) ;
    Subplot (2, 3,4) ;
    Imshow ( img 3 ) ;
    Title ( ‘ After Mixed HV Prewitt Filter ‘ ) ;
    Subplot (2, 3,5 ) ;
    Imshow ( img 4 ) ;
    Title ( ‘ After H Sobel Filter ‘ ) ;
    Subplot (2, 3,6 ) ;
    Imshow ( img 5 ) ;
    Title ( ‘ After V Sobel Filter ‘ ) ;
    
    فیلترینگ مکانی 2 Log Laplacian Ordfilt متلب  

اجرای مستقیم عملیات غیر خطی در متلب ممکن نیست برای اجرای آن باید دو فیلتر غیر خطی بسازیم و  آر اِم اِس آن را حساب کنیم .

نمونه مهم فیلتر غیر خطی فیلتر ترتیبی است که روشن ترین نقطه مرجع آن است در اصلاح تصویر کارایی دارد و تصاویر کاملتری ارائه میدهد .

ببینیم کارایی فیلتر ترتیبی Ordfilt 2 چگونه است .

  1. Clc;
    Clear ;
    Close all ;
    Img 0 = imread ( ‘ rice . png ‘ ) ;
    Img 0 = im2double ( img 0 ) ;
    M = 5 ;
    N = 3 ;
    Domain = ones ( M , N ) ;
    Img 1 = ordfilt 2 ( img 0 , M * N , Domain ) ;
    Figure ;
    Subplot ( 1 , 2 , 1 ) ;
    Imshow ( img 0 ) ;
    Title ( ‘ Original Image ‘) ;
    Subplot ( 1 , 2 , 2) ;
    Imshow ( img 1 ) ;
    Title ( ‘ After  Order  Filter ‘ ) ;
    
    

تابع After  Order  Filter متلب

قرار دادن عدد بزرگتر [5  ،  3]  .

  1. Img 1 = ordfilt 2 ( img 0 ,  0 , Domain ) ;

تابع ordfilt 2 متلب

صفحه سیاه نتیجه قرار دادن عدد 0 در تابع Ordfilt 2 میباشد .

  1. Img 1 = ordfilt 2 ( img 0 ,  ( M * N + 1 ) / 2 , Domain ) ;

 

تابع ordfilt 2 متلب

ارائه تصویر بلوری و حذف گزینه های تصادفی با قرار گرفتن میانه حاصل میشود .

همیشه میانه در زیر مجموعه عضو ها قرار دارد ولی میانگین ممکن است نباشد .

  1. Clc;
    Clear ;
    Close all ;
    Img 0 = imread ( ‘ rice . png ‘ ) ;
    Img 0 = im2double ( img 0 ) ;
    M = 5 ;
    N = 3 ;
    Domain = ones ( M , N ) ;
    Img 1 = ordfilt 2 ( img 0 ,( M * N + 1 ) / 2  , Domain ) ;
    Img 2 = imnoise ( img 0 , ‘ salt  &  pepper ‘ ) ;
    Img 3 = ordfilt 2 ( img 2 , ( M * N  + 1 ) / 2 , Domain ) ;
    Figure ;
    Subplot (2 , 2 , 1 ) ;
    Imshow ( img 0 ) ;
    Title ( ‘ Original Image ‘) ;
    Subplot (2, 2 , 2) ;
    Imshow ( img 1 ) ;
    Title ( ‘ After  Order  Filter ‘ ) ;
    Subplot (2 , 2 , 3) ;
    Imshow ( img 2 ) ;
    Title ( ‘ Noisy  Image ‘) ;
    Subplot (2, 2 ,4) ;
    Imshow ( img 3 ) ;
    Title ( ‘Noisy  Image  After  Order  Filter ‘ ) ;
    
    

تابع Noisy  Image متلب

بر طرف کردن نویز با فیلتر .

 

  1. M = 5 ;
    N = 5 ;
    Img 1 = Medfilt 2 ( img 0  , [ M N] ) ;
    Img 2 = imnoise ( img 0 , ‘ salt  &  pepper ‘ ) ;
    Img 3 = medfilt 2 ( img 2 , [M N ] ) ;

فیلترینگ مکانی 2 Log Laplacian Ordfilt متلب  

با تابع Medfilt 2 راحت و سریع به جواب میرسیم .

جدول اسامی نویزها :

 

جدول نویزها

 

  1. I = imread ( ‘ eight . tif ‘ ) ;
    J = imnoise ( I , ‘ salt & pepper ‘ , 0 . 02 ) ;
    Figure , imshow ( I )
    Figure , imshow ( J )
    
    

تابع نویز متلب

فیلترینگ مکانی تابع 2 Log – Laplacian -Ordfilt درنرم افزار متلب در تصویر ی که نویز دارد انواع فرکانس ها را هم موجود دارد در رنگ ثابت هیچ فرکانسی موجود نیست .

ادامه آموزش در مبحث 7