تابع ترتیبی و غیر خطی Colfilt درمتلب (7)

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

تابع ترتیبی و غیر خطی در متلب

تابع Colfilt – nlfilter – Im2col – col2im درمتلب 

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

می خوانیم :

1- فیلتر ترتیبی 2 Ordfilt

2- فیلتر ترتیبی Colfilt

3- تعریف انحراف معیار

4- فیلتر sliding

5-تابع Im2col 

6- تابع col2im

7- تابع nlfilter 

 

تابع 2 Ordfilt یک تابع غیر خطی و ترتیبی :

G (x , y ) =  Ø (N ( x , y ) )

یک تابع غیر خطی  = تابع خطی

یک نمونه مستطیلی تابع انحراف معیار را بررسی میکنیم در این تابع همیشه مثبت نواحی یکنواخت تیره و تاریک نمایش داده میشود و نواحی دارای تنوع رنگی بالا روشن نمایش داده میشود .

نمایش تابع Colfilt در متلب همیشه به شکل تغییرات روی ستون ها انجام میشود .

 Column Filter : Colfilt

 

Column Filter متلب

تابع  Colfilt به دو روش عمل میکند وقتی به روش slaiding عمل کنیم در ازای هر  f (x y) یک مرکز فیلتر داریم وقتی به روش distend عمل میکنیم حتما اعداد باید به صورت 9 تایی باشد در اینجا هر نقطه ای را نمیتوانیم مرکز قرار دهیم .

تابع Colfilt به شکل آراء دو بعدی از طریق ستون کار میکند .

 تایع Im2col هم با آراء ستونی به فیلتر تصاویر می پردازد .

برای پردازش غیر خطی چیزی که اهمیت دارد توانایی سریع در تبدیل شدن به آراء ستونی است .

دو تابع col2im و Im2col در متلب بر عکس هم عمل میکنند .

اگر تصویری با ابعاد [9    100] داشته باشیم باید با کم کردن حجم اطلاعات بتوانیم 9 پیکسل را با دقت و سرعت بیشتری بسازیم پس اول ماتریس را به ابعاد [ 5   100] تبدیل میکنیم به این طریق حجم اطلاعات کم میشود .

تکنولوژی  JPEG2000  به روش قدیمی بالا عمل میکند .

توابع col2im و Im2col متلب

تابع Colfilt به طور اتومات این چرخه پردازش را انجام میدهد .

چرخه فیلتر Colfilt متلب

در تابع Colfilt اگر به عدد برسیم متوجه میشویم از روش sliding وارد عمل شده اگر به تعداد  [m n] برسیم از روش distinct وارد عمل شده است .

فرمول و تعریف انحراف معیار به زبان ریاضی :

روش distinct متلب

همیشه در روش Slaiding  ماتریس [3  3] باید داشته باشیم .

 

روش Slaiding متلب

در دستور برنامه نویسی علامت  @ std  به معنای حساب کردن خود آن تابع میباشد .

 

>> EnherafMeyar = @ std
Enheraf  Meyar =
@ std
>> X = [ 1 4 7 3 9 2 ]
X =
1         4          7        3        9           2
>> std ( X )
Undefined function or Variable  ‘X ‘ .
>> std ( X )
Ans =
  3 . 0768
>> Enheraf Meyar ( X )
Ans =
 3 . 0768

بررسی یک نمونه از تابع ترتیبی و غیر خطی Colfilt در متلب :

Clc;
Clear ;
Close all ;
Img 0 = imread ( ‘ rice . png ‘ ) ;
Img 0 = im2double ( img 0 ) ;
M =3 ;
N = 3 ;
Img 1 = colfilt (img0 , [M  N] , ‘sliding ‘ , @ std ) ;
Figure ;
Subplot (1, 2 , 1 ) ;
Imshow ( img 0 ) ;
Title ( ‘ Original Image ‘) ;
Subplot (1, 2 , 2) ;
Imshow ( img 1 ) ;
Title ( ‘ After  Colfilt With Std‘ ) ;

تابع Colfilt With Std‘متلب

ببینیم وقتی تابع را ارتقا دهیم چه طور میشود .

Clc;
Clear ;
Close all ;
Img 0 = imread ( ‘ rice . png ‘ ) ;
Img 0 = im2double ( img 0 ) ;
M =3 ;
N = 3 ;
Img 1 = colfilt (img0 , [M  N] , ‘sliding ‘ , @ std ) ;
Threshold = 0 . 2 * max ( img 1 ( : ) ) ;
Img 1 = double ( img 1 > Threshold ) ;
Figure ;
Subplot (1, 2 , 1 ) ;
Imshow ( img 0 ) ;
Title ( ‘ Original Image ‘) ;
Subplot (1, 2 , 2) ;
Imshow ( img 1 ) ;
Title ( ‘ After  Colfilt With Std‘ ) ;

تابع Colfilt With Std متلب

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

Clc;
Clear ;
Close all ;
Img 0 = imread ( ‘ rice . png ‘ ) ;
Img 0 = im2double ( img 0 ) ;
M =3 ;
N = 3 ;
Img 1 = colfilt (img0 , [M  N] , ‘distinct‘ , @ sort) ;
Figure ;
Subplot (1, 2 , 1 ) ;
Imshow ( img 0 ) ;
Title ( ‘ Original Image ‘) ;
Subplot (1, 2 , 2) ;
Imshow ( img 1 ) ;
Title ( ‘ After  Colfilt With SoRT ‘ ) ;

تابع Colfilt With SoRT متلب 

 

ماتریس [3  3] را از کوچک به بزرگ مرتب میکند .

 

بزرگ کردن تابع Colfilt متلب 

با بزرگ نمایی ابعاد [3  3] کاملا در تصویر دیده میشود .

در تابع Colfilt انجام روش sliding قابل لمس تر و بهتر است .

  1. Clear ;
    Close all ;
    Img 0 = imread ( ‘ rice . png ‘ ) ;
    Img 0 = im2double ( img 0 ) ;
    M = 3 ;
    N = 3 ;
    Img 1 = colfilt (img0 , [M  N] , ‘sliding ‘ , @MyNOnlinearFilter) ;
    %Threshold = 0 . 2 * max (img 1 ( : ) ) ;
    % img 1 = double ( img 1 > Threshold ) ;
    Img 1 = img 1 / max (img 1 ( : ) ) ;
    Figure ;
    Subplot (1, 2 , 1 ) ;
    Imshow ( img 0 ) ;
    Title ( ‘ Original Image ‘) ;
    Subplot (1, 2 , 2) ;
    Imshow ( img 1 ) ;
    Title ( ‘ After  Colfilt With SoRT ‘ ) ;
    
    
    تابع ترتیبی و غیر خطی Colfilt متلب 

تابع ترتیبی و غیر خطی Colfilt متلب برای بهتر نشان دادن لبه ها مفید است .

  1.  Clear ;
    Close all ;
    Img 0 = imread ( ‘ rice . png ‘ ) ;
    Img 0 = im2double ( img 0 ) ;
    M =3 ;
    N = 3 ;
    MyFun = @ (X) max ( X ) – min ( X ) ;
    Img 1 = colfilt ( img 0 , [ M N ] ,  ‘sliding ‘ , MyFun ) ;
    %Threshold = 0 . 2 * max (img 1 ( : ) ) ;
    % img 1 = double ( img 1 > Threshold ) ;
    Img 1 = img 1 / max (img 1 ( : ) ) ;
    Figure ;
    Subplot (1, 2 , 1 ) ;
    Imshow ( img 0 ) ;
    Title ( ‘ Original Image ‘) ;
    Subplot (1, 2 , 2) ;
    Imshow ( img 1 ) ;
    Title ( ‘ After  Colfilt With SoRT ‘ ) ;
    
    
    

تابع ترتیبی و غیر خطی Colfilt متلب 

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

 

  1. Clear ;
    Close all ;
    Img 0 = imread ( ‘ rice . png ‘ ) ;
    Img 0 = im2double ( img 0 ) ;
    M =10 ;
    N = 10 ;
    % MyFun = @ (X) max ( X ) – min ( X ) ;     % Use MyFun ( Without @ )
    Img 1 = colfilt (img0 , [M  N] , ‘sliding ‘ , @MyNOnlinearFilter) ;
    %Threshold = 0 . 2 * max (img 1 ( : ) ) ;
    % img 1 = double ( img 1 > Threshold ) ;
    Img 1 = img 1 / max (img 1 ( : ) ) ;
    Figure ;
    Subplot (1, 2 , 1 ) ;
    Imshow ( img 0 ) ;
    Title ( ‘ Original Image ‘) ;
    Subplot (1, 2 , 2) ;
    Imshow ( img 1 ) ;
    Title ( ‘ After  Colfilt With SoRT ‘ ) ;

 

تابع ترتیبی و غیر خطی Colfilt متلب 

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

 

  1. Clear ;
    Close all ;
    Img 0 = imread ( ‘ rice . png ‘ ) ;
    Img 0 = im2double ( img 0 ) ;
    M =5 ;
    N =5;
    % MyFun = @ (X) max ( X ) – min ( X ) ;     % Use MyFun ( Without @ )
    Img 1 = colfilt (img0 , [M  N] , ‘sliding ‘ , @MyNOnlinearFilter) ;
    %Threshold = 0 . 2 * max (img 1 ( : ) ) ;
    % img 1 = double ( img 1 > Threshold ) ;
    Img 1 = img 1 / max (img 1 ( : ) ) ;
    
    تابع ترتیبی و غیر خطی Colfilt متلب 

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

  1. >> size ( img 0 )
    Ans =
    256      256
    >> c = im2col ( img 0 , [3  3 ] , ‘ distinct ‘ ) ;
    >> size ( c )
    Ans =
      9                7396
    >> numel ( c )
    Ans =
      66564
    >> nume 1 ( img 0 )
    Ans =
      65536
    >> c = im2col (img 0 , [ 3  3 ] , ‘sliding ‘ ) ;
    >> size ( c )
    Ans =
       9          64516
    >> 65536 – 255 * 4
    Ans =
      64516

در روش  distinct چون عدد 65536 بر 9 بخش پذیر نیست آن را به نزدیک ترین عدد گرد میکنیم .

در روش sliding ستون و سطر آخر و اول را باید حذف کنیم  در نهایت به عدد  64516 میرسیم .

 

  1. > size ( img 0 )
    Ans =
       256             256
    >> C = im2col  ( img 0 , [12  12] , ‘ distinct ‘ ) ;
    >> size ( c )
    Ans =
         144             484
    >> imshow ( c )
    
    تابع sliding متلب
    

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

 

  1. >> C = im2col ( img 0 , [20     20 ] , ‘ distinct ‘ ) ;
    >> imshow ( c )
    Warning : Image is too big to fit on screen ; displaying at 50%
    >> In imuitools \ private \ initsize at 72
    >> In imshow at 259
    >> size ( c )
    Ans =
      400              169

 

تابع nlfilter متلب

 تابع nlfilter در متلب نوعی از فیلتر غیر خطی است که عملکرد آن شبیه تابع sliding  میباشد .

  1. A imread ( ‘ cameraman . tif ‘ ) ;
    Fun = @ ( x ) median ( x ( : ) ) ;
    B = nlfilter ( A , [ 3   3 ] , fun ) ;
    Imshow ( A ) , figure , imshow ( B )

تابع ترتیبی و غیر خطی Colfilt متلب در عمل سریعتر از تابع nlfilter میباشد .

فرمول تبدیل

کاربرد تابع bestblak در مورد سایز است .

 

  1. Siz = bestblak ( [ m  n ] , k )
    [ mb , nb ] = bestblak ( [ m n ] , k )

تابع bestblak با ارائه کمترین خروج از تصویر بهترین سایز و سرعت را به ما میدهد .

  1. Examples
    Siz = bestblk ( [640    800 ] , 72 )
    Siz =
         64                  50

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

هر نگاشت غیر خطی را با تابع colfilt میتوانیم بنویسیم و پیاده سازی کنیم .

در این نگاشت های غیر خطی آزادی عمل زیادی داریم .

 

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