Matlab Image Processing
Matlab Image Processing
اﻟﺒﻮﺻﻠﺔ اﻟﺘﻘﻨﻴﺔ
www.boosla.com
ﻣﺪﺧﻞ إﻟﻰ ﻣﻌﺎﻟﺠﺔ اﻟﺼﻮر ﻣﻊ اﻟﻤﺎﺗﻼب ـ ﺗﺮﺟﻤﺔ ﻓﮫﺪ أل ﻗﺎﺳﻢ [email protected]
اﻟﻤﺤﺘﻮى:
اﻟﻔﺼﻞ اﻟﺜﺎﻧﻲ ﻣﻌﺎﻟﺠﺔ اﻟﻨﻘﻄﺔ ..
اﻟﻔﺼﻞ اﻟﺜﺎﻟﺚ :ﻣﻌﺎﻟﺠﺔ اﻟﺠﻮار ..
اﻟﻔﺼﻞ اﻟﺮاﺑﻊ :ﺗﺤﻮﻳﻞ ﻓﻮرﻳﯿﻪ...
ﻣﻠﺨﺺ ﻟﻠﻔﺼﻮل ٥و٦و٧و :١٠اﺳﺘﻌﺎدة اﻟﺼﻮر اﻟﺘﻘﺴﯿﻢ وﻣﻌﺎﻟﺠﺔ اﻟﺼﻮر اﻟﻤﻠﻮﻧﺔ..
ﺣﯿﺚ ان اﻟﺪاﻟﺔ ) f(xﺗﻨﻄﻠﻖ ﻣﻦ اﻟﻤﺠﺎل 0……255إﻟﻰ ھﺬا اﻟﻤﺠﺎل ﻧﻔﺴﻪ ،ﺑﺎﻋﺘﺒﺎره اﻟﻤﺴﺘﻮﻳﺎت اﻟﺮﻣﺎدﻳﺔ
ﻟﻘﯿﻢ اﻟﺒﻜﺴﻼت ،ﺑﻨﻔﺲ اﻟﺘﺮﺗﯿﺐ ﻓﻲ اﻟﺼﻮرة طﺒﻌﺎ.
وﻛﻤﺜﺎل ﻋﻠﻰ ھﺬه اﻟﺪاﻟﺔ ﻳﻤﻜﻦ ﺗﻄﺒﯿﻖ اﺑﺴﻂ اﻟﻌﻤﻠﯿﺎت ﺑﺈﺿﺎﻓﺔ أو طﺮح ﻗﯿﻤﺔ ﺛﺎﺑﺘﺔ Cﻟﻜﻞ ﺑﻜﺴﻞ:
وﻛﻤﺜﺎل آﺧﺮ ﻋﻠﻰ اﻟﻌﻤﻠﯿﺎت اﻟﻤﻄﺒﻘﺔ ﻋﻠﻰ اﻟﻨﻘﻄﺔ ھﻨﺎك ﻋﻤﻠﯿﺔ ﺿﺮب اﻟﺜﺎﺑﺖ ﻓﻲ ﻛﻞ ﻗﯿﻢ ﺑﻜﺴﻼت اﻟﺼﻮرة:
وﺑﻄﺒﯿﻌﺔ اﻟﺤﺎل ﻓﺎﻟﻘﯿﻢ اﻟﻨﺎﺗﺠﺔ ﺗﺤﺘﺎج إﻟﻰ ﻣﻌﺎﻟﺠﺔ ﺑﺴﯿﻄﺔ ﺣﺘﻰ ﻧﻀﻤﻦ ان ﺗﻜﻮن ﻣﺨﺮﺟﺎت اﻟﺪاﻟﺔ ﺿﻤﻦ
اﻟﻨﻄﺎق اﻟﻤﺤﺪد ﻟﻠﺪاﻟﺔ ،اﻟﺬي ﻳﻤﺜﻞ ﻟﻨﺎ ﻣﺪى اﻟﻠﻮن اﻟﺮﻣﺎدي اﻟﻤﻔﺘﺮض ﻟﮫﺬا اﻟﻨﻮع ﻣﻦ اﻟﺼﻮر .وھﺬا ﻳﻌﻨﻲ ان
ﻗﯿﻢ yاﻟﺘﻲ ﺗﺘﺠﺎوز اﻟﻨﻄﺎق ﻳﺠﺐ ان ﺗﻜﻮن ﺿﻤﻦ اﻟﺸﺮط اﻟﺘﺎﻟﻲ:
اﻟﺮﺳﻢ اﻋﻼه ﻳﻮﺿﺢ اﻟﻌﻼﻗﺔ ﺑﯿﻦ اﻟﻘﯿﻢ اﻟﺠﺪﻳﺪة واﻟﻘﯿﻢ اﻟﻘﺪﻳﻤﺔ ﻟﻠﺒﻜﺴﻼت ﺑﻌﺪ ﻋﻤﻠﯿﺘﻲ اﻟﺠﻤﻊ واﻟﻄﺮح ﻛﻼ
ﻋﻠﻰ ﺣﺪه ،وﻛﯿﻒ ان ﺗﻄﺒﯿﻖ اﻟﺸﺮط اﻋﻼه ﻳﻘﻮم ﺑﻌﻤﻠﯿﺔ ﺗﺤﻮﻳﻞ اﻟﻘﯿﻢ اﻷﻛﺒﺮ ﻣﻦ ٢٥٥إﻟﻰ ٢٥٥واﻷﻗﻞ ﻣﻦ
اﻟﺼﻔﺮ إﻟﻰ ﺻﻔﺮ.
إن ﻗﯿﻤﺔ اﻟﺜﺎﺑﺖ اﻟﻤﻀﺎف واﻟﻤﻄﺮوح ﻓﻲ اﻟﺮﺳﻤﯿﻦ اﻟﺒﯿﺎﻧﯿﯿﻦ ھﻲ ،١٢٨ﻓﺒﺈﺿﺎﻓﺘﻪ ﻳﺘﻢ ﺗﺤﻮﻳﻞ ﻛﻞ ﻗﯿﻤﺔ
ﻟﻠﺒﻜﺴﻞ ﻣﻦ ١٢٧واﻋﻠﻰ إﻟﻰ ،٢٥٥ﻛﻤﺎ ﻓﻲ اﻟﺮﺳﻢ اﻷول .وﻋﻨﺪ طﺮح ﻗﯿﻤﺔ اﻟﺜﺎﺑﺖ ﻓﺈﻧﻨﺎ ﻧﻘﻮم ﺑﺘﺤﻮﻳﻞ ﻛﻞ
ﺑﻜﺴﻞ ﻗﯿﻤﺘﻪ اﻗﻞ ﻣﻦ ١٢٨أو ﺗﺴﺎوﻳﮫﺎ إﻟﻰ .٠
وھﺬﻳﻦ اﻟﺮﺳﻤﯿﯿﻦ ﻳﻮﺿﺤﺎن ﻟﻨﺎ اﻳﻀﺎ ان اﺿﺎﻓﺔ اﻟﺜﺎﺑﺖ اﻟﻤﻮﺟﺐ ﺳﻮف ﻳﺰﻳﺪ ﻣﻦ اﺿﺎء ﺳﻄﺢ اﻟﺼﻮرة ،lighten
أﻣﺎ اﻟﻄﺮح ﻓﺈﻧﻪ ﻳﻘﻮم ﻓﺈﻧﻪ ﻳﻌﻜﺲ اﻹﺿﺎءة وذﻟﻚ ﺑﺘﻐﻤﯿﻖ اﻟﺼﻮرة ،darkenوﻳﻤﻜﻦ ﺗﻄﺒﯿﻖ ذﻟﻚ ﻋﻠﻰ اﻟﻤﺎﺗﻼب
ﻋﻠﻰ اﺣﺪى اﻟﺼﻮرة اﻟﻘﯿﺎﺳﯿﺔ ﻣﻦ اﻟﻨﻮع اﻟﺮﻣﺎدي ،grayscaleواﻟﺘﻲ اﺳﻤﮫﺎ ،block.tifاﻟﻤﻮﺿﺤﺔ ﻓﻲ اﻟﺸﻜﻞ
ادﻧﺎه ،ﻛﻤﺎ ھﻮ ﻣﻮﺿﺢ ﻓﻲ اﻟﻜﻮد ﺑﻌﺪھﺎ.
ﻟﻘﺪ اﺳﺘﺨﺪﻣﻨﺎ اﻷﻣﺮ whos bﻟﻤﻌﺮﻓﺔ ﻧﻮع اﻟﺒﯿﺎﻧﺎت اﻟﻤﺨﺰﻧﺔ ﻓﻲ اﻟﻤﺼﻔﻮﻓﺔ ،bوھﺬا ﻣﮫﻢ ﻣﻦ أﺟﻞ ﻣﻌﺮﻓﺔ
ﻛﯿﻔﯿﺔ اﻟﺘﻌﺎﻣﻞ ﻣﻌﮫﺎ ،وواﺿﺢ اﻧﮫﺎ ﺗﺴﺘﺨﺪم ﺑﯿﺎﻧﺎت ﻣﻦ ﻧﻮع uint8وھﺬا اﻟﻨﻮع ﻣﻦ اﻟﺒﯿﺎﻧﺎت ﻳﺴﺘﺨﺪم ﻟﺘﺨﺰﻳﻦ
اﻟﺒﯿﺎﻧﺎت ﻓﻘﻂ ،ﻓﻼ ﻳﻤﻜﻨﻨﺎ اﺟﺮاء اﻟﻌﻤﻠﯿﺎت ﻋﻠﯿﻪ ﻣﺒﺎﺷﺮة ،إذا اﻧﻪ ﺳﯿﺼﺪر رﺳﺎﻟﺔ ﺧﻄﺄ.
>> b1=b+128
??? Error using ==> +
Function '+' not defined for variables of class 'uint8'.
وﻧﺴﺘﻄﯿﻊ ﺗﺠﺎوز ھﺬه اﻟﻤﻌﻀﻠﺔ ﺑﺎﺣﺪى طﺮﻳﻘﺘﯿﻦ ،إﻣﺎ ﻳﺘﺤﻮﻳﻞ اﻟﻤﺼﻔﻮﻓﺔ bإﻟﻰ ﻣﺼﻔﻮﻓﺔ ﻣﻦ اﻟﻨﻮع ، double
وﻣﻦ ﺛﻢ ﻧﻄﺒﻖ ﻋﻤﻠﯿﺔ اﻻﺿﺎﻓﺔ ﺛﻢ ﻧﺤﻮل اﻟﻨﺎﺗﺞ إﻟﻰ uint8ﻣﻦ أﺟﻞ ﻋﺮض اﻟﻨﺎﺗﺞ:
;)>> b1=uint8(double(b)+128
أو ﺑﻄﺮﻳﻘﺔ أﺧﺮى أﻛﺜﺮ أﻧﺎﻗﺔ ﺑﺎﺳﺘﺨﺪام داﻟﺔ اﻟﻤﺎﺗﻼب اﻟﺘﻲ ﺗﺘﻌﺎﻣﻞ ﻣﻊ اﻟﺼﻮر ﺑﺸﻜﻞ أدق ،ﺑﻐﺾ اﻟﻨﻈﺮ ﻋﻦ
ﻧﻮع ﺑﯿﺎﻧﺎت اﻟﺒﺴﻜﻼت ﻓﯿﮫﺎ ،وھﻲ اﻟﺪاﻟﺔ . imadd
;)>> b1=imadd(b,128
وﺑﺸﻜﻞ ﻣﺸﺎﺑﻪ ﻧﺴﺘﺨﺪم داﻟﺔ اﻟﻄﺮح :imsubtract
;)>> b2=imsubtract(b,128
ﺛﻢ ﻧﻘﻮم ﺑﻌﺮض اﻟﺼﻮرﺗﯿﻦ ﺑﺎﺳﺘﺨﺪام اﻟﻜﻮد:
)>> imshow(b1) , figure , imshow(b2
وﻓﯿﻤﺎ ﻳﻠﻲ ﻧﺮى اﻟﺼﻮرﺗﯿﻦ اﻟﻨﺎﺗﺠﺘﯿﻦ ﻋﻦ ﻋﻤﻠﯿﺘﻲ اﻟﻄﺮح واﻹﺿﺎﻓﺔ.
وﺑﺎﻹﻣﻜﺎن اﻳﻀﺎ اﺳﺘﺨﺪام اﻟﺪاﻟﺘﯿﻦ immultiplyو imdivideﻟﻀﺮب اﻟﺼﻮرة أو ﻗﺴﻤﺘﮫﺎ ﻋﻠﻰ اﻟﺘﺮﺗﯿﺐ ،ﻛﻤﺎ ھﻮ
ﻣﻮﺿﺢ ﻓﻲ اﻟﻤﻌﺎدﻻت اﻟﺘﺎﻟﯿﺔ:
ﺑﻌﺾ اﻟﻤﻌﺎدﻻت ھﺬه زادت ﻣﻦ ﺗﻌﺘﯿﻢ أو ﺗﻐﻤﯿﻖ اﻟﺼﻮرة وﺑﻌﻀﮫﺎ زادت ﻣﻦ اﻟﺴﻄﻮع ،واﻟﺮﺳﻮم اﻟﺒﯿﺎﻧﯿﺔ اﻟﺘﺎﻟﯿﺔ
ﺗﻮﺿﺢ ﻋﻤﻠﯿﺔ ﺗﻐﯿﯿﺮ اﻟﻘﯿﻢ ﺑﻌﺪ ﺗﻄﺒﯿﻖ اﻟﻌﻤﻠﯿﺎت ﻟﻜﻞ ﻣﻌﺎدﻟﺔ ،وﺑﻌﺪھﺎ ﺗﻮﺿﯿﺢ اﻟﺼﻮرة اﻟﺜﻼث اﻟﻨﺎﺗﺠﺔ ﺣﺴﺐ
اﻟﻜﻮد اﻟﺴﺎﺑﻖ:
ﻧﻼﺣﻆ أن ھﻨﺎك ﻣﻌﺎدﻻت أظﮫﺮت ﻧﺘﺎﺋﺞ ﻣﺒﺎﻟﻎ ﺑﮫﺎ ﻣﻦ ﺣﯿﺚ ﺿﯿﺎع ﺗﻔﺎﺻﯿﻞ اﻟﺼﻮرة وذﻟﻚ ﺑﺴﺒﺐ ﺗﻜﺒﯿﺮ ﻗﯿﻢ
ﻣﻌﻈﻢ اﻟﺒﻜﺴﻼت او ﺗﺼﻐﯿﺮھﺎ وھﺬا ﻳﻈﮫﺮ ﺧﺼﻮﺻﺎ ﻓﻲ اﻟﺼﻮر b2و b3و .b5
اﻟﺘﻜﺒﯿﺮ اﻟﻤﺒﺎﻟﻎ ﺑﻪ ﻳﺤﻮل ﺟﻤﯿﻊ اﻟﻘﯿﻢ اﻟﻜﺒﯿﺮة إﻟﻰ ) ٢٥٥أﺑﯿﺾ( وﻋﻜﺲ ذﻟﻚ ﻳﺤﻮل ﺟﻤﯿﻊ اﻟﻘﯿﻢ إﻟﻰ ٠
)أﺳﻮد(.
اﻹﺗﻤﺎم :Complements
إن ﻣﺘﻤﻢ اﻟﺼﻮرة ﻣﻦ اﻟﻨﻮع اﻟﺮﻣﺎدي grayscaleھﻮ اﻟﺼﻮرة اﻟﺴﻠﺒﯿﺔ ﻟﮫﺎ negativeﻛﻤﺎ ھﻮ ﻣﺼﻄﻠﺢ ﻋﻠﯿﻪ ﻓﻲ
أﻓﻼم اﻟﺘﺼﻮﻳﺮ اﻟﻘﺪﻳﻤﺔ ،ﻓﺈذا ﻛﺎﻧﺖ ﺑﯿﺎﻧﺎت اﻟﺼﻮرة ﻣﻦ اﻟﻨﻮع doubleﻓﺈن ﻗﯿﻤﮫﺎ اﻟﺮﻣﺎدﻳﺔ ﺳﻮف ﺗﻨﻌﻜﺲ ﺑﻄﺮح
ﻣﺼﻔﻮﻓﺔ اﻟﺼﻮرة ﻣﻦ اﻟﻮاﺣﺪ ،ھﻜﺬا:
>> 1-m
إﻣﺎ إذا ﻛﺎﻧﺖ ﻣﻦ اﻟﻨﻮع اﻟﺜﻨﺎﺋﻲ ﻓﻨﺴﺘﺨﺪم ﻣﺆﺛﺮ اﻟﻨﻔﻲ ~ ﺑﺎﻟﻜﻮد:
>> ~m
إﻣﺎ اذا ﻛﺎﻧﺖ ﺑﯿﺎﻧﺎت اﻟﺼﻮرة ﻣﻦ اﻟﻨﻮع اﻟﺼﺤﯿﺢ uint8ﻓﺈﻧﻨﺎ ﻧﺴﺘﺨﺪم اﻟﺪاﻟﺔ ،imcomplementو ھﺬا ھﻮ
اﻟﻤﺴﺘﺤﺴﻦ داﺋﻤﺎ ﻛﻤﺎ ﺑﺎﻟﻜﻮد:
;)>> bc=imcomplement(b
)>> imshow(bc
ﻓﯿﻤﺎ ﻳﻠﻲ ﺷﻜﻞ ﻳﻮﺿﺢ اﻟﺼﻮرة blocks.tifواﻟﺮﺳﻢ اﻟﺒﯿﺎﻧﻲ ﻟﺘﻄﺒﯿﻖ ﻋﻤﻠﯿﺔ اﻹﺗﻤﺎم ﻋﻠﯿﮫﺎ ،ﻻﺣﻆ ﻋﻤﻠﯿﺔ
اﻧﻌﻜﺎس اﻟﺒﯿﺎﻧﺎت ﻓﻲ ارﺳﻢ اﻟﺒﯿﺎﻧﻲ ﺣﯿﺚ ﺗﺤﻮﻟﺖ ﻛﻞ ﻗﯿﻤﺔ إﻟﻰ اﻟﻘﯿﻤﺔ اﻟﻤﻌﺎﻛﺴﺔ ﻟﮫﺎ.
اﻟﮫﯿﺴﺘﻮﺟﺮام :Histograms
إن اﻟﮫﯿﺴﺘﻮﺟﺮام ﻷي ﺻﻮرة ﻣﻠﻮﻧﺔ ھﻮ ﺷﻜﻞ ﺑﯿﺎﻧﻲ ﻳﻮﺿﺢ ﻧﺴﺒﺔ وﺟﻮد اﻷﻟﻮان ﻓﯿﮫﺎ ،ﺑﺤﯿﺚ ﻳﻜﻮن اﻟﻤﺤﻮر
اﻷﻓﻘﻲ ﻣﺒﯿﻨﺎ ﻟﻨﺴﺒﺔ ھﺬه اﻷوﻟﻮن ﺑﺸﻜﻞ ﻣﺘﺪرج واﻟﻤﺤﻮر اﻟﻌﻤﻮدي ھﻮ اﻟﻘﯿﻤﺔ اﻹﺟﻤﺎﻟﯿﺔ ﻟﻈﮫﻮر ذﻟﻚ اﻟﻠﻮن
ﻓﻲ اﻟﺼﻮرة ،وﺑﺎﻟﻨﺴﺒﺔ ﻟﺼﻮر اﻟﻠﻮن اﻟﺮﻣﺎدي ﻓﺈﻧﻨﺎ ﻧﺘﺤﺪث ﻋﻦ ﻣﺴﺘﻮﻳﺎت اﻟﺮﻣﺎدي ﺑﺪﻻ ﻣﻦ اﻷﻟﻮان ،ﻓﯿﻜﻮن
اﻟﮫﯿﺴﺘﻮﺟﺮام ھﻮ ﺗﻤﺜﯿﻞ ﺑﯿﺎﻧﻲ ﻟﻤﺴﺘﻮﻳﺎت اﻟﺮﻣﺎدي اﻟﻤﺨﺘﻠﻔﺔ ﻓﻲ اﻟﺼﻮرة .وﻋﻠﻰ ھﺬا ﻓﻠﻜﻞ ﻟﻮن )أو ﻗﯿﻤﺔ
رﻣﺎدﻳﺔ( ﻗﯿﻤﺔ ﻋﺪدﻳﺔ ﺗﻤﺜﻞ ﻓﻲ اﻟﺸﻜﻞ اﻟﺒﯿﺎﻧﻲ ھﻲ ﻗﯿﻤﺔ ﺣﺪوﺛﻪ ﻓﻲ اﻟﺼﻮرة ،وﺑﻤﻌﺎﻟﺠﺔ ﻧﺴﺐ اﻻﻟﻮان
واﻟﺘﺪرﺟﺎت ﻳﻤﻜﻦ ﻋﻤﻞ ﺗﺄﺛﯿﺮات ﻛﺜﯿﺮة ﻋﻠﻰ اﻟﺼﻮرة.
ﻓﻤﺜﻼ ﻓﻲ اﻟﺼﻮر اﻟﻐﺎﻣﻘﺔ أو اﻟﻤﻌﺘﻤﺔ dark imageﻣﻦ ﺻﻮر اﻟﻠﻮن اﻟﺮﻣﺎدي ﻓﺈن اﻟﮫﯿﺴﺘﻮﺟﺮام ﻳﻜﻮن ﻣﺘﺠﻤﻌﺎ
ﻓﻲ اﻟﻨﮫﺎﻳﺔ اﻟﺪﻧﯿﺎ ﻟﻪ ﺣﯿﺚ ﻳﻘﺘﺮب ﻣﻦ اﻟﻠﻮن اﻻﺳﻮد ،واﻟﻌﻜﺲ ﺑﺎﻟﻌﻜﺲ ،اﻣﺎ اﻟﺼﻮر ذات اﻟﺘﺒﺎﻳﻦ اﻟﺠﯿﺪ ﻓﺈﻧﮫﺎ
ﺗﻜﻮن ﻣﻮزﻋﺔ ﺑﺸﻜﻞ اﻓﻀﻞ ﻓﻲ ﺑﯿﺎن اﻟﮫﯿﺴﺘﻮﺟﺮام.
ﻧﺴﺘﻄﯿﻊ إﻳﺠﺎد ھﯿﺴﺘﻮﺟﺮام اﻟﺼﻮرة ﻓﻲ اﻟﻤﺎﺗﻼب ﺑﺎﺳﺘﺨﺪام اﻟﺪاﻟﺔ ،imhistﻛﺎﻟﺘﺎﻟﻲ:
;)'>> p=imread('pout.tif
;)>> imshow(p),figure,imhist(p
واﻟﻨﺘﺎﺋﺞ ﻣﺒﯿﻨﺔ ﻓﻲ اﻟﺸﻜﻞ اﻟﺘﺎﻟﻲ :
ﻻﺣﻆ أن اﻟﻘﯿﻢ اﻟﺮﻣﺎدﻳﺔ ﻗﺪ ﺗﺠﻤﻌﺖ ﻓﻲ ﻣﺮﻛﺰ اﻟﮫﯿﺴﺘﻮﺟﺮام ،وھﺬا ﻳﻌﻨﻲ ان اﻟﺘﺒﺎﻳﻦ contrastedاﻟﺨﺎص ﺑﮫﺎ
ﺳﻲء ،وﻓﯿﻤﺎ ﻳﻠﻲ ﺳﻨﺮى أن ﺗﺤﺴﯿﻦ اﻧﺘﺸﺎر أﻋﻤﺪة اﻟﮫﯿﺴﺘﻮﺟﺮام ﻳﻨﻌﻜﺲ ﺗﻠﻘﺎﺋﯿﺎ ﻋﻠﻰ ﺗﺒﺎﻳﻦ اﻟﺼﻮرة ﻣﻤﺎ
ﻳﺴﺎﻋﺪ ﻋﻠﻰ ﺗﺤﺴﯿﻨﮫﺎ.
ﻟﻨﻔﺘﺮض أن ﻟﺪﻳﻨﺎ ﺻﻮرة ﻟﮫﺎ اﻟﮫﯿﺴﺘﻮﺟﺮام اﻟﻤﻮﺿﺢ ﻓﻲ اﻟﺸﻜﻞ أدﻧﺎه ،ﺣﯿﺚ ان ﻗﯿﻢ اﻟﻤﺴﺘﻮى اﻟﺮﻣﺎدي
اﻟﻤﻮﺟﻮدة ﻓﯿﻪ ﺗﺮﺗﺒﻂ ﻣﻊ اﻟﻘﯿﻢ niاﻟﻤﻘﺎﺑﻠﺔ ﻟﮫﺎ ﺣﺴﺐ اﻟﺠﺪول اﻟﺘﺎﻟﻲ.
ﻋﻤﻠﯿﺔ اﻟﺘﻮﺳﯿﻊ ﺗﺘﻢ ﺑﺘﻄﺒﯿﻖ ﻣﺎ ﻳﺴﻤﻰ ﺑﺪاﻟﺔ اﻟﻘﻄﻌﺔ اﻟﺨﻄﯿﺔ piecewise linear functionاﻟﻤﻮﺿﺤﺔ ﻋﻠﻰ
ﻳﻤﯿﻦ اﻟﺸﻜﻞ اﻟﺴﺎﺑﻖ ،ﺣﯿﺚ ﻧﺴﺘﻄﯿﻊ ﻋﻦ طﺮﻳﻘﮫﺎ ﺗﻮﺳﯿﻊ اﻟﻤﺴﺘﻮى اﻟﺮﻣﺎدي ﻣﻦ اﻟﻤﺪى اﻟﻤﻮﺿﺢ ﻓﻲ
اﻟﮫﯿﺴﺘﻮﺟﺮام وھﻮ ﻣﻦ ، ٩ -٥إﻟﻰ ﻣﺪى أوﺳﻊ وھﻮ ، ١٤-٢وھﺬه اﻟﻤﻌﺎدﻟﺔ ھﻲ:
ﺣﯿﺚ أن iھﻲ اﻟﻘﯿﻤﺔ اﻟﺤﺎﻟﯿﺔ ﻟﻤﺴﺘﻮى اﻟﺮﻣﺎدي و jھﻲ اﻟﻘﯿﻤﺔ اﻟﺠﺪﻳﺪة ﺑﻌﺪ اﻟﺘﺤﻮﻳﻞ .وﻗﺪ ﻧﺘﺠﺖ ﻟﻨﺎ ﻗﯿﻤﺎ
ﺟﺪﻳﺪة ﻧﺴﺘﻄﯿﻊ اﻵن ﺗﻄﺒﯿﻘﮫﺎ ﻋﻠﻰ اﻟﮫﯿﺴﺘﻮﺟﺮام اﻟﺠﺪﻳﺪ ،ﻣﻊ ﻣﻼﺣﻈﺔ ان اﻟﻘﯿﻢ اﻷﺧﺮى ﺧﺎرج اﻟﻤﺪى
اﻟﻤﺤﻮل إﻣﺎ ان ﺗﺘﺮك ﻛﻤﺎ ھﻲ )ﻛﻤﺎ ﻓﻲ ﺣﺎﻟﺘﻨﺎ ھﺬه( او ﺗﺪﻣﺞ ﻓﻲ ﻋﻤﻠﯿﺔ اﻟﺘﺤﻮﻳﻞ:
أﻣﺎ اﻟﮫﯿﺴﺘﻮﺟﺮام اﻟﺠﺪﻳﺪ ﻓﺴﯿﻜﻮن ﺑﺎﻟﻘﯿﻢ اﻟﺠﺪﻳﺪة اﻟﺘﻲ ﻳﺠﺐ أن ﺗﻜﻮن ﺗﺒﺎﻳﻨﮫﺎ أﻓﻀﻞ ﻣﻦ اﻷوﻟﻰ:
ﻛﻤﺎ أن ھﺬه اﻟﺪاﻟﺔ ﺗﻌﻤﻞ ﺑﺸﻜﻞ ﺟﯿﺪ ﻋﻠﻰ اﻟﺼﻮر ﻣﻦ اﻟﺘﻲ ﻧﻮع ﺑﯿﺎﻧﺎﺗﮫﺎ doubleأو uint8أو uint16ﻛﻤﺎ أن
ﻗﯿﻢ اﻟﻤﺘﻐﯿﺮات a,b,c,dﻳﺠﺐ ان ﺗﻜﻮن ﺑﯿﻦ اﻟﺼﻔﺮ واﻟﻮاﺣﺪ ،ﺑﺤﯿﺚ ﺗﻘﻮم اﻟﺪاﻟﺔ ﺑﺘﺤﻮﻳﻠﮫﺎ ﺣﺴﺐ اﻟﺤﺎﺟﺔ.
ﻟﻜﻦ ھﺬه اﻟﺪاﻟﺔ ﺗﺨﺘﻠﻒ ﻗﻠﯿﻼ ﻋﻦ ﻣﺎ ذﻛﺮﻧﺎ اﻋﻼه ﺣﯿﺚ اﻧﮫﺎ ﺗﺤﻮل ﺟﻤﯿﻊ اﻟﻘﯿﻢ أﻗﻞ ﻣﻦ aإﻟﻰ ،cوﺟﻤﯿﻊ
اﻟﻘﯿﻢ اﻛﺒﺮ ﻣﻦ bإﻟﻰ .dﻟﮫﺬا ﻧﻘﻮم ﻋﺎدة ﻋﻨﺪ ﻛﺘﺎﺑﺔ اﻟﻜﻮد ﻓﻲ اﻟﻤﺎﺗﻼب إﻣﺎ ﺑﺬﻛﺮ اﻟﻤﺪى ﻛﺎﻣﻼ ] ،[0,1أو ﺑﺘﺮك
اﻟﻘﻮﺳﯿﻦ ﺑﺪون ][ ،ﻓﺎﻟﺴﻄﺮ اﻟﺘﺎﻟﻲ ﻣﺜﻼ ﻻ ﻳﻨﻔﺬ ﺷﻲء:
;)][>> imadjust(im,[],
أﻣﺎ اﻟﺴﻄﺮ اﻟﺘﺎﻟﻲ:
)]>> imadjust(im,[],[1,0
ﻓﯿﻘﻮم ﺑﻌﻜﺲ ﻣﺴﺘﻮﻳﺎت اﻟﺮﻣﺎدي ﻟﻠﺼﻮرة ﺑﺤﯿﺚ ﺗﺘﺤﻮل إﻟﻰ اﻟﺼﻮرة اﻟﺴﻠﺒﯿﺔ photographic negativeاﻟﺘﻲ
ﻧﻔﺬﻧﺎ ﻋﻠﯿﮫﺎ ﺳﺎﺑﻘﺎ ﻋﻤﻠﯿﺔ اﻟﺘﺤﻮﻳﻞ إﻟﻰ اﻟﻤﺘﻤﻢ .
وﻷداء أﻓﻀﻞ ﻟﮫﺬه اﻟﺪاﻟﺔ ﻧﺴﺘﺨﺪم اﻟﺒﺎراﻣﯿﺘﺮ أو اﻟﻮﺳﯿﻂ اﻟﺮاﺑﻊ اﻟﺬي ﻟﻢ ﻳﺴﺘﺨﺪم ﻓﻲ اﻟﻤﺜﺎﻟﯿﻦ أﻋﻼه ،ﺣﯿﺚ
أن ﻗﯿﻤﺘﻪ اﻟﺘﻠﻘﺎﺋﯿﺔ defaultھﻲ اﻟﻮاﺣﺪ ،ﺣﯿﺚ ان ھﺬا اﻟﻤﺆﺗﺮ ﻳﺘﺤﻜﻢ ﺑﺸﻜﻞ ﻣﺴﺘﻘﯿﻢ اﻟﺘﺤﻮﻳﻞ ﻛﻤﺎ ﻓﻲ
اﻟﺸﻜﻞ اﻟﺒﯿﺎﻧﻲ اﻟﺴﺎﺑﻖ اﻟﺬي ﻳﻜﻮن ﻛﺬﻟﻚ ﻋﻨﺪ ﺗﻜﻮن ﻗﯿﻤﺔ اﻟﻮﺳﯿﻂ )اﻟﺬي ﻳﺴﻤﻰ ﺟﺎﻣﺎ (gammaﻣﺴﺎوﻳﺔ
ﻟﻠﻮاﺣﺪ ،وھﻮ اﻟﺘﺤﻮﻳﻞ اﻟﺨﻄﻲ.
وﻛﻠﻤﺎ ﻛﺎﻧﺖ ﻗﯿﻤﺔ اﻟﻮﺳﯿﻂ ﺟﺎﻣﺎ اﻛﺒﺮ ﻣﻦ واﺣﺪ ﻛﺎن اﻟﺘﺤﻮﻳﻞ أﻛﺜﺮ ﺗﻘﻌﺮا ﻟﻸﺳﻔﻞ ،وﻛﻠﻤﺎ ﻛﺎﻧﺖ ﻗﯿﻤﺘﻪ أﻗﻞ ﻣﻦ
اﻟﻮاﺣﺪ ﻛﺎن اﻟﺘﺤﻮﻳﻞ أﻛﺜﺮ ﺗﻘﻌﺮا ﻟﻸﻋﻠﻰ ،ﻛﻤﺎ ھﻮ ﻣﻮﺿﺢ ﺑﺎﻟﺸﻜﻞ اﻟﺘﺎﻟﻲ:
وﻗﯿﻤﺔ ﺟﺎﻣﺎ ﻓﻲ اﻟﺪاﻟﺔ imadjustھﻲ ﻗﯿﻤﺔ اﻷس ﻓﻲ اﻟﺸﻜﻞ اﻟﻌﺎم ﻟﻠﺪاﻟﺔ اﻟﻤﻮﺿﺢ ﺑﺎﻟﻤﻌﺎدﻟﺔ:
ﻻﺣﻆ طﺒﻌﺎ أن ھﻨﺎك اﺧﺘﻼف طﻔﯿﻔﺎ ﺑﯿﻦ ھﺬه اﻟﺪاﻟﺔ وﺑﯿﻦ اﻟﺘﻄﺒﯿﻖ اﻟﻤﺴﺘﺨﺪم ﻓﻲ اﻟﺘﺤﻮﻳﻞ أﻋﻼه.
اﻟﻜﻮد اﻟﺘﺎﻟﻲ ﻳﻮﺿﺢ ﻣﺜﺎﻻ ﺑﺎﺳﺘﺨﺪام ﺟﺎﻣﺎ ﻓﻘﻂ:
;)'<<t=imread('tire.tif
;)<<th=imadjust(t,[],[],0.5
)<<imshow(t),figure,imshow(th
ﻛﻤﺎ أﻧﻪ ﻣﻦ اﻟﻤﻤﻜﻦ رؤﻳﺔ اﻟﺸﻜﻞ اﻟﺒﯿﺎﻧﻲ ﻟﻠﻌﻼﻗﺔ ﺑﯿﻦ اﻟﻘﯿﻢ اﻟﺠﺪﻳﺪة واﻟﻘﯿﻢ اﻟﻘﺪﻳﻤﺔ ﻟﻤﺴﺘﻮﻳﺎت اﻟﺮﻣﺎدي
ﺑﺎﺳﺘﺨﺪام اﻟﺪاﻟﺔ plotاﻟﺘﻲ ﺗﺮﺳﻢ اﻟﺮﺳﻢ اﻟﺒﯿﺎﻧﻲ ﻟﻠﻌﻼﻗﺔ ﺑﯿﻦ اﻟﻘﯿﻤﺘﯿﻦ .
>> plot(t,th,'.'),axis tight
اﻟﺸﻜﻞ اﻟﺘﺎﻟﻲ ﻳﻮﺿﺢ اﻟﺼﻮرة tire.tifاﻟﻤﺴﺘﺨﺪﻣﺔ ﻓﻲ اﻟﻤﺜﺎل اﻟﺴﺎﺑﻖ واﻟﺘﺤﺴﯿﻦ اﻟﻄﺎرئ ﻋﻠﯿﮫﺎ ﻋﻨﺪﻣﺎ
:gamma=0.5
أﻣﺎ داﻟﺔ اﻟـ plotﻓﻲ اﻟﻜﻮد أﻋﻼه ﻓﺴﻮف ﺗﻈﮫﺮ ﺑﺎﻟﺸﻜﻞ اﻟﺒﯿﺎﻧﻲ:
داﻟﺔ اﻟﺘﻮﺳﯿﻊ اﻟﺨﻄﻲ ﺣﺴﺐ اﻟﻘﻄﻌﺔ A piecewise linear stretching function
وﻋﻮدة إﻟﻰ داﻟﺔ اﻟﺘﻮﺳﯿﻊ اﻟﺨﻄﻲ ﺣﺴﺐ اﻟﻘﻄﻌﺔ اﻟﺘﻲ ﺗﺒﺪو ﻓﻲ ﺑﻌﺾ اﻟﺤﺎﻻت اﻧﺴﺐ ﻣﻦ داﻟﺔ اﻟﻀﺒﻂ
، imadjustﻓﺈﻧﻨﺎ ﺳﻨﻮﺿﺢ ﻓﯿﻤﺎ ﻳﻠﻲ ﻛﯿﻔﯿﺔ ﻛﺘﺎﺑﺔ داﻟﺔ ﻓﻲ اﻟﻤﺎﺗﻼب ﻟﺘﻨﻔﯿﺬ ﻓﻜﺮﺗﮫﺎ ،ﺛﻢ طﺮﻳﻘﺔ اﺳﺘﺪﻋﺎء اﻟﺪاﻟﺔ.
ﺳﻨﺴﺘﺨﺪم اﻟﺪاﻟﺔ findاﻟﻤﺤﺠﻮزة اﻟﺘﻲ ﺗﺘﻌﺎﻣﻞ ﻣﻊ اﻟﻤﺼﻔﻮﻓﺎت ،وﺗﺴﺘﺨﺪم ﻹﻳﺠﺎد ﻗﯿﻢ اﻟﺒﻜﺴﻼت ﻓﻲ
اﻟﺼﻮرة ،وﺗﻌﯿﺪ داﻟﺔ findﻣﻮﻗﻊ اﻟﻌﻨﺼﺮ اﻟﻤﻄﻠﻮب وﺗﺘﻌﺎﻣﻞ اﻟﻤﺼﻔﻮﻓﺔ ﻛﺄﻧﮫﺎ ﻣﺘﺠﻪ ،ھﺬه اﻟﺒﻜﺴﻼت اﻟﺘﻲ ﺗﻜﻮن
ﺑﯿﻦ aiو ، ai+1ﺣﯿﺚ ان اﻟﺨﻂ ﺑﯿﻦ اﻻﺣﺪاﺛﻲ ) (ai,biو ) (ai+1, bi+1ﻳﻌﺘﻤﺪ ﻋﻠﻰ اﻟﻤﻌﺎدﻟﺔ:
وﺳﯿﺘﻢ ﺗﻨﻔﯿﺬ اﻟﻤﻌﺎدﻟﺔ ھﺬه ﺑﺎﺳﺘﺨﺪام ﻛﻮد اﻟﻤﺎﺗﻼب اﻟﺬي ﻳﺴﺘﺨﺪم اﻟﺪاﻟﺔ findﺿﻤﻦ داﻟﺔ ﻣﻦ ﺗﻌﺮﻳﻔﻨﺎ
اﺳﻤﮫﺎ histpwlواھﻢ اﺳﻄﺮ ھﺬه اﻟﺪاﻟﺔ ھﻲ اﻟﺠﺰء اﻟﺬي ﻳﺒﺤﺚ ﻋﻦ اﻟﻘﯿﻢ ﺛﻢ ﻳﺴﺘﺪﻋﻲ داﻟﺔ اﻟﻘﻄﻌﺔ
اﻟﺨﻄﯿﺔ:
;))pix=find(im >= a(i) & im < a(i+1
;)out(pix)=(im(pix)-a(i))*(b(i+1)-b(i))/(a(i+1)-a(i))+b(i
ﺣﯿﺚ ان imھﻲ اﻟﺼﻮرة اﻟﻤﺪﺧﻠﺔ ،و outھﻲ اﻟﺼﻮرة اﻟﻨﺎﺗﺠﺔ ﻋﻦ ﻋﻤﻠﯿﺔ اﻟﺘﺤﻮﻳﻞ transformation
.operation
وﺳﯿﺘﻢ اﺳﺘﺪﻋﺎء اﻟﺪاﻟﺔ histpwlﺿﻤﻦ ﻛﻮد اﻟﻤﺎﺗﻼب اﻟﺘﺎﻟﻲ:
;)]>> th=histpwl(t,[0 .25 .5 .75 1],[0 .75 .25 .5 1
)>> imshow(th
>> figure,plot(t,th,'.'),axis tight
ﺑﺎﻓﺘﺮاض ان thھﻲ اﻟﺼﻮرة tire.tifاﻟﻤﺴﺘﺨﺪﻣﺔ ﺳﺎﺑﻘﺎ ،وﻓﯿﻤﺎ ﻳﻠﻲ ﻛﻮد اﻟﺪاﻟﺔ : histpwl
)function out = histpwl(im,a,b
%
% HISTPWL(IM,A,B) applies a piecewise linear transformation to the pixel values
% of image IM, where A and B are vectors containing the x and y coordinates
% of the ends of the line segments. IM can be of type UINT8 or DOUBLE,
% and the values in A and B must be between 0 and 1.
%
% For example:
%
)]%histpwl(x,[0,1],[1,0
%
%simply inverts the pixel values.
%
;classChanged = 0
if ~isa(im, 'double'),
;classChanged = 1
;)im = im2double(im
end
)if length(a) ~= length (b
;)'error('Vectors A and B must be of equal size
end
;)N=length(a
;))out=zeros(size(im
for i=1:N-1
;))pix=find(im>=a(i) & im<a(i+1
;)out(pix)=(im(pix)-a(i))*(b(i+1)-b(i))/(a(i+1)-a(i))+b(i
end
;))pix=find(im==a(N
;)out(pix)=b(N
if classChanged==1
;)out = uint8(255*out
end
ﻟﻠﺘﺬﻛﯿﺮ ﻓﻘﻂ :اﻟﺮﻣﺰ %ﻳﺴﺘﺨﺪم ﻟﻌﻤﻞ اﻟﺘﻌﻠﯿﻘﺎت commentsﺑﯿﻦ اﻟﻤﺒﺮﻣﺠﯿﻦ ،ﻛﻤﺎ أن اھﻤﯿﺘﻪ ﻓﻲ اﻟﻤﺎﺗﻼب
ﺗﻜﻤﻦ ﻓﻲ أن وﺟﻮده ﻓﻲ ﺑﺪاﻳﺔ اﻟﺪاﻟﺔ ﻳﻔﯿﺪ ﻓﻲ ﺗﺨﺰﻳﻦ ﺗﻌﻠﯿﻤﺎت اﻟـ helpاﻟﺨﺎﺻﺔ ﺑﺎﻟﺪاﻟﺔ.
ﻣﺴﺎواة اﻟﮫﯿﺴﺘﻮﺟﺮام Histogram equalization
ﻣﺸﻜﻠﺔ ﻛﻞ واﺣﺪة ﻣﻦ اﻟﻄﺮق اﻟﺴﺎﺑﻘﺔ ﻓﻲ ﺗﻮﺳﯿﻊ اﻟﮫﯿﺴﺘﻮﺟﺮام أﻧﮫﺎ ﺗﺤﺘﺎج إدﺧﺎﻻت اﻟﻤﺴﺘﺨﺪم اﻟﻤﺨﺼﺼﺔ
ﻟﻜﻞ ﺣﺎﻟﺔ ﻋﻠﻰ ﺣﺪه ،ﻓﻲ ﺣﯿﻦ اﻧﻪ ﻛﻄﺮﻳﻘﺔ أﻓﻀﻞ ﻳﺘﻢ اﺳﺘﺨﺪام ﻣﺴﺎواة او ﺗﺴﻮﻳﺔ اﻟﮫﯿﺴﺘﻮﺟﺮام ،ﻛﺄﺟﺮاء
آﻟﻲ ﺗﻤﺎﻣﺎ ،واﻟﻔﻜﺮه ھﻨﺎ ھﻲ ﺗﻐﯿﯿﺮ اﻟﮫﯿﺴﺘﻮﺟﺮام ﺑﺸﻜﻞ ﻣﻮﺣﺪ ﺑﺤﯿﺚ ﻳﺼﺒﺢ ﻋﻠﻰ ﺟﺰء ﻣﻦ أﻋﻤﺪة
اﻟﮫﯿﺴﺘﻮﺟﺮام ﺑﻨﻔﺲ اﻟﻄﻮل ،او ﺑﻜﻠﻤﺔ أﺧﺮى ﺗﻜﻮن ﻣﺴﺘﻮﻳﺎت اﻟﺮﻣﺎدي ﻓﻲ اﻟﺼﻮرة ﻛﻠﮫﺎ ﺑﻨﻔﺲ اﻟﺘﻜﺮار .ﻣﻦ
اﻟﻨﺎﺣﯿﺔ اﻟﻌﻤﻠﯿﺔ ھﺬا ﻣﻤﻜﻦ ﻋﻤﻮﻣﺎ ،ﻣﻊ اﻧﻨﺎ ﻗﺪ ﻧﺠﺪ ان ﻧﺘﺎﺋﺞ ذﻟﻚ ﺟﯿﺪة ﺟﺪا.
ﻟﻨﻔﺘﺮض ان ﻟﺪﻳﻨﺎ ﺻﻮرة ﻓﯿﮫﺎ ﻣﺴﺘﻮﻳﺎت رﻣﺎدي ﻣﺨﺘﻠﻔﺔ ﻋﺪدھﺎ Lﻣﻦ ،٠،١،٢ﺣﺘﻰ ،L-1وان ذﻟﻚ اﻟﺘﺪرج
اﻟﺮﻣﺎدي ﻟﯿﻜﻦ iﻗﺪ ظﮫﺮ niﻣﺮة ﻓﻲ ھﺬه اﻟﺼﻮرة ،وأن اﻟﻌﺪد اﻹﺟﻤﺎﻟﻲ ﻟﻠﺒﻜﺴﻼت ﻓﻲ اﻟﺼﻮرة ھﻮ ،nوھﺬا
ﻳﻌﻨﻲ أن:
وأﻧﻪ ﻟﻜﻲ ﻧﺤﻮل اﻟﻤﺴﺘﻮﻳﺎت اﻟﺮﻣﺎدﻳﺔ ﻟﻠﺤﺼﻮل ﻋﻠﻰ أﻓﻀﻞ ﺗﺒﺎﻳﻦ ﻟﻠﺼﻮرة ﻓﺈﻧﻨﺎ ﻧﻐﯿﺮ اﻟﻤﺴﺘﻮى اﻟﺮﻣﺎدي iإﻟﻰ:
ﻛﻤﺎ ان اﻟﻌﺪد اﻟﻨﺎﺗﺞ ﺳﻮف ﺗﻘﺮﻳﺒﻪ )ﺗﺪوﻳﺮه (roundedإﻟﻰ أﻗﺮب ﻋﺪد ﺻﺤﯿﺢ .integer
ﻣﺎ ﺳﺒﻖ ﻳﻌﺘﺒﺮ ﺗﻌﺮﻳﻔﺎ رﻳﺎﺿﯿﺎ ،وﻟﺘﻮﺿﯿﺤﻪ أﻛﺜﺮ ﻟﻨﻨﻈﺮ ﻟﻠﻤﺜﺎل اﻟﺘﺎﻟﻲ:
ﻟﯿﻜﻦ ﻟﺪﻳﻨﺎ ﺻﻮرة ﻣﻦ ﻧﻮع ﺗﺪرج اﻟﺮﻣﺎدي grayscaleطﻮل ﻗﯿﻤﺔ اﻟﺒﻜﺴﻞ ﻓﯿﮫﺎ ،4-bitاﻟﮫﯿﺴﺘﻮﺟﺮام اﻟﺨﺎص
ﺑﮫﺎ ﻣﻮﺿﺢ ﻓﻲ اﻟﻤﺜﺎل ادﻧﺎه ،وذﻟﻚ وﻓﻖ اﻟﻘﯿﻢ اﻟﻤﻮﺿﺤﺔ ﻓﻲ اﻟﺠﺪول اﻟﺘﺎﻟﻲ:
وﻓﻲ اﻟﺠﺪول اﻟﺴﺎﺑﻖ اﻟﻨﺘﯿﺠﺔ اﻟﺤﺎﺻﻠﺔ ﻣﻦ ﻋﻤﻠﯿﺔ ﻣﺴﺎواة اﻟﮫﯿﺴﺘﻮﺟﺮام ﺑﺘﻄﺒﯿﻖ اﻟﺼﯿﻐﺔ ﻓﻲ اﻟﺘﻌﺮﻳﻒ.
ﻛﻞ ھﺬا ﻳﻤﻜﻦ ﺗﻠﺨﯿﺼﻪ ﺑﺎﻟﺠﺪول اﻟﻨﮫﺎﺋﻲ اﻟﺘﺎﻟﻲ اﻟﺬي ﻳﺒﯿﻦ اﻟﻘﯿﻢ اﻷوﻟﻰ واﻟﻘﯿﻢ اﻟﻨﮫﺎﺋﯿﺔ:
ﻛﻞ ھﺬا ﻳﻤﻜﻦ ﺗﻄﺒﯿﯿﻘﻪ ﻓﻲ اﻟﻤﺎﺗﻼب ﺑﺎﺳﺘﺨﺪام اﻟﺪاﻟﺔ histeqﻛﻤﺎ ﻓﻲ اﻷﺳﻄﺮ اﻟﺘﺎﻟﯿﺔ:
;)'>> p=imread('pout.tif
;)>> ph=histeq(p
>> imshow(ph),figure,imhist(ph),axis tight
وﺑﺎﻟﺘﺄﻛﯿﺪ ﻓﺈن ﻧﺘﯿﺠﺔ ﻣﺴﺎواة اﻟﮫﯿﺴﺘﻮﺟﺮام ھﻨﺎ ھﻲ اﻓﻀﻞ اﻟﻨﺘﺎﺋﺞ ﻛﻤﺎ ﻳﻮﺿﺢ اﻟﺸﻜﻞ اﻟﺘﺎﻟﻲ ،ﻟﻜﻨﻨﺎ ﻧﺆﻛﺪ ان
اﻟﻄﺮق اﻟﻤﺨﺘﻠﻔﺔ ﺗﻈﮫﺮ ﻧﺘﺎﺋﺞ ﻣﺨﺘﻠﻔﺔ ﻋﻠﻰ اﻟﺤﺎﻻت اﻟﻤﺨﺘﻠﻔﺔ ﻣﻤﺎ ﻳﻌﻨﻲ اﻧﻪ ﻗﺪ ﻧﺤﺼﻞ ﻋﻠﻰ ﻧﺘﺎﺋﺞ اﻓﻀﻞ ﻓﻲ
ﺑﻌﺾ اﻟﺤﺎﻻت اﻟﺨﺎﺻﺔ رﻏﻢ اﻋﺘﺒﺎرﻧﺎ ان ھﺬه اﻟﻄﺮﻳﻘﺔ ھﻲ اﻟﻄﺮﻳﻘﺔ اﻻﻛﺜﺮ ﺗﻌﻤﯿﻤﺎ وﻟﺬﻟﻚ ﻓﮫﻲ اﻷﺳﮫﻞ ﺗﻄﺒﯿﻘﺎ.
اﻟﺠﺪول اﻟﻤﺮﺟﻌﻲ Lookup tables
ﻳﻤﻜﻦ اﻧﺠﺎز ﻣﻌﺎﻟﺠﺔ اﻟﻨﻘﻄﺔ ﺑﺸﻜﻞ ﻓﻌﺎل ﺑﺎﺳﺘﺨﺪام ﺟﺪول اﻟﻨﻈﺮ )اﻟﺠﺪول اﻟﻤﺮﺟﻌﻲ( ،واﻟﺬي ﻳﻌﺮف اﺧﺘﺼﺎرا
ﺑـ ،LUTﻓﻠﻠﺘﻌﺎﻣﻞ ﻣﻊ ﺻﻮرة ﻧﻮع ﺑﯿﺎﻧﺎﺗﮫﺎ ﺻﺤﯿﺤﺔ ، uint8ﻳﻜﻮن اﻟﺠﺪول اﻟﻤﺴﺘﺨﺪم ﻣﺼﻔﻮﻓﺔ اﺣﺎدﻳﺔ طﻮﻟﮫﺎ
٢٥٥ﻗﯿﻤﺔ ،ﻛﻞ واﺣﺪة ﻣﻦ ھﺬه اﻟﻘﯿﻢ ﻗﯿﻤﺔ ﺻﺤﯿﺤﺔ ﻣﻦ اﻟﻤﺪى ،٢٥٥.....٠وﺑﮫﺬا ﺗﻜﻮن اﻟﻌﻤﻠﯿﺔ اﻟﻤﻄﺒﻘﺔ
ﻋﻠﻰ اﻟﺼﻮرة ﻣﺘﻤﺜﻠﺔ ﺑﺘﺒﺪﻳﻞ ﻛﻞ ﻗﯿﻤﺔ ﺑﻜﺴﻞ pﺑﺎﻟﻘﯿﻤﺔ اﻟﻤﻨﺎظﺮة ﻓﻲ اﻟﺠﺪول .tp
وﻛﻤﺜﺎل ﻋﻠﻰ ذﻟﻚ ﻟﯿﻜﻦ ﻟﺪﻳﻨﺎ ﺟﺪول اﻟـ LUTاﻟﺘﺎﻟﻲ اﻟﺬي ﻳﻨﺎظﺮ ﺗﻄﺒﯿﻖ ﻋﻤﻠﯿﺔ اﻟﻘﺴﻤﺔ ﻋﻠﻰ اﺛﻨﯿﻦ:
وھﺬا ﻳﻌﻨﻲ أن اﻟﻘﯿﻤﺔ ٤ﻣﺜﻼ ﺳﻮف ﺗﺴﺘﺒﺪل ﺑﺎﻟﻘﯿﻤﺔ ،٢واﻟﻘﯿﻤﺔ ٢٥٣ﺳﻮف ﺗﺴﺘﺒﺪل ﺑـ ،١٢٦وﻧﻄﺒﻖ ذﻟﻚ
ﻓﻲ اﻟﻤﺎﺗﻼب ﺑﺎﻋﺘﺒﺎر أن اﻟﺠﺪول اﻟﻤﺮﺟﻌﻲ ھﻮ اﻟﻤﺼﻔﻮﻓﺔ ،Tوأن اﻟﺼﻮرة ھﻲ imﻓﺈﻧﻨﺎ اﻟﺠﺪول اﻟﻤﺮﺟﻌﻲ
ﻳﻄﺒﻖ ﺑﺒﺴﺎطﺔ ﺑﺎﻷﻣﺮ ،T(im) :وﻟﻨﻘﻢ ﻋﻠﻰ ﺳﺒﯿﻞ اﻟﻤﺜﺎل ﺑﺘﻄﺒﯿﻖ اﻟﺠﺪول اﻋﻼه ﻓﺈﻧﻨﺎ ﻧﻨﺸﺊ اﻟﺠﺪول ﺑﺎﻷﻣﺮ:
;)>> T=uint8(floor(0:255)/2
واﻟﺘﻄﺒﯿﻖ ﺳﯿﻜﻮن ﺑﺎﻷﻣﺮ:
;)>> b2=T(b
ﻓﺘﻜﻮن اﻟﺼﻮرة b2ﻣﻦ اﻟﻨﻮع unit8وﻳﻤﻜﻨﻨﺎ ﻋﻨﺪﺋﺬ اﻻطﻼع ﻋﻠﻰ ھﺬه اﻟﺼﻮرة ﺑﺎﻷﻣﺮ .imshow
ﺗﻤﺎرﻳﻦ
ﻣﺪﺧﻞ إﻟﻰ ﻣﻌﺎﻟﺠﺔ اﻟﺼﻮر ﻣﻊ اﻟﻤﺎﺗﻼب ـ ﺗﺮﺟﻤﺔ ﻓﮫﺪ أل ﻗﺎﺳﻢ [email protected]
ﻓﺈذا ﻛﺎﻧﺖ اﻟﺪاﻟﺔ اﻟﻤﺴﺘﺨﺪﻣﺔ ﻟﺘﻐﯿﯿﺮ اﻟﻘﯿﻢ ﺗﺤﺖ اﻟﻘﻨﺎع داﻟﺔ ﺧﻄﯿﺔ ، linear functionﻓﺈﻧﻨﺎ اﻟﻔﻠﺘﺮ ﻳﺴﻤﻰ
ﻓﻠﺘﺮا ﺧﻄﯿﺎ ،وﻳﻤﻜﻨﻨﺎ ﺗﻄﺒﯿﻖ ﻓﻠﺘﺮا ﺧﻄﯿﺎ ﻋﻦ طﺮﻳﻖ ﺿﺮب ﻛﻞ ﻋﻨﺎﺻﺮ اﻟﻘﻨﺎع ﺑﺎﻟﻌﻨﺎﺻﺮ اﻟﻤﻘﺎﺑﻠﺔ ﻓﻲ اﻟﺠﻮار ،ﺛﻢ
إﺿﺎﻓﺔ ﺟﻤﯿﻊ ﻧﺘﺎﺋﺞ اﻟﻀﺮب.
ﻟﻨﻔﺘﺮض أن ﻟﺪﻳﻨﺎ ﻗﻨﺎﻋﺎ أﺑﻌﺎده ٥×٣ﻛﻤﺎ ھﻮ ﻣﻮﺿﺢ ﺑﺎﻟﺸﻜﻞ اﻟﺴﺎﺑﻖ ،وأن ﻗﯿﻢ اﻟﻘﻨﺎع ﺗﻌﻄﻰ ﻋﻦ طﺮﻳﻖ:
اﻟﻤﺨﻄﻂ اﻟﺘﺎﻟﻲ ﻳﻮﺿﺢ ﻋﻤﻠﯿﺔ ﺗﻨﻔﯿﺬ اﻟﻔﻠﺘﺮة اﻟﺤﯿﺰﻳﺔ )اﻟﻔﺮاﻏﯿﺔ( ،spatial filteringوھﻮ ﻳﺤﺘﺎج إﻟﻰ ﺛﻼث
ﺧﻄﻮات:
.١وﺿﻊ اﻟﻘﻨﺎع ﻓﻮق اﻟﺒﻜﺴﻞ اﻟﺤﺎﻟﻲ.
.٢ﻣﻄﺎﺑﻘﺔ ﻛﻞ ﻧﺘﺎﺋﺞ اﻟﻔﻠﺘﺮ اﻟﻤﻀﺮوﺑﺔ ﻣﻊ اﻟﻌﻨﺎﺻﺮ اﻟﻤﻨﺎظﺮة ﻓﻲ اﻟﺠﻮار.
.٣ﺟﻤﻊ ﻛﻞ اﻟﻨﺘﺎﺋﺞ.
وﻳﺠﺐ ﺗﻜﺮار ذﻟﻚ ﻋﻠﻰ ﻛﻞ اﻟﺒﻜﺴﻼت ﻓﻲ اﻟﺼﻮرة.
وھﻨﺎك ﻋﻤﻠﯿﺔ ﺷﺒﯿﮫﺔ ﺑﺎﻟﻔﻠﺘﺮة اﻟﺤﯿﺰﻳﺔ ﺗﺴﻤﻰ اﻻﻟﺘﻔﺎف اﻟﺤﯿﺰي ، spatial convolutionوﻳﺘﻢ اﻧﺠﺎز اﻻﻟﺘﻔﺎف
اﻟﺤﯿﺰي ﺑﺸﻜﻞ ﻣﺸﺎﺑﻪ ﻟﻠﻔﻠﺘﺮة اﻟﺤﯿﺰﻳﺔ ﻋﺪا اﻧﻪ ﻳﺠﺐ ﻋﻤﻞ ﺗﺪوﻳﺮ ﻟﻠﻔﻠﺘﺮ ١٨٠درﺟﺔ ﻗﺒﻞ ﻋﻤﻠﯿﺘﻲ اﻟﻀﺮب
واﻹﺿﺎﻓﺔ.
وﺑﺎﺳﺘﺨﺪام اﻟﺮﻣﺰﻳﻦ ) m(i,jو) p(i,jﻛﻤﺎ ﺳﺒﻖ ،ﺳﺘﻜﻮن ﻣﺨﺮﺟﺎت اﻻﻟﺘﻔﺎف اﻟﺤﯿﺰي ﻋﻠﻰ ﻗﻨﺎع ٥×٣اﻟﻤﻄﺒﻖ
ﻋﻠﻰ ﺑﻜﺴﻞ واﺣﺪ ھﻲ:
ﻻﺣﻆ اﻹﺷﺎرة اﻟﺴﺎﻟﺒﺔ ﻓﻲ ﻋﻨﺎﺻﺮ mواﻟﺘﻲ ﻳﻤﻜﻦ اﺳﺘﺒﺪاﻟﮫﺎ ﺑﺈﺟﺮاء ﻋﻤﻠﯿﺎت اﻟﻄﺮح ﻓﻲ ﻋﻨﺎﺻﺮ .p
ﻣﺜﺎل ﺗﺨﻄﯿﻄﻲ ﻳﻮﺿﺢ ﻓﻜﺮة اﻟﻔﻠﺘﺮة اﻟﺤﯿﺰﻳﺔ
وﻛﻤﺜﺎل ﻋﻠﻰ اﻟﻔﻼﺗﺮ اﻟﺸﮫﯿﺮة اﻟﻔﻠﺘﺮ ' ' averageھﺬا اﻟﻔﻠﺘﺮ اﻟﺬي اﺻﻐﺮ أﺣﺠﺎﻣﻪ 3×3وﻳﻤﻜﻦ ان ﻳﻜﻮن اﻛﺒﺮ
ﻣﻦ ذﻟﻚ ﺑﺄي ﺣﺠﻢ ،وﻳﻜﻮن ﻏﺎﻟﺒﺎ ﻣﺮﺑﻌﺎ ،ﻳﻘﻮم ھﺬا اﻟﻔﻠﺘﺮ ﺑﺄﺧﺬ ﻣﺘﻮﺳﻂ ﻛﻞ اﻟﻘﯿﻢ اﻟﺘﺴﻌﺔ اﻟﺘﻲ ﻓﻲ اﻟﺠﻮار
اﻟﻤﻄﺒﻖ ﻋﻠﯿﻪ ،وﻳﻘﻮم ﺑﻌﺪ ذﻟﻚ اﻟﻘﯿﻢ اﻟﻤﺘﻮﺳﻄﺔ ﺗﻠﻚ ھﻲ اﻟﻘﯿﻤﺔ اﻟﺠﺪﻳﺪة ﻟﻠﻨﻘﻄﺔ اﻟﻤﺮﻛﺰﻳﺔ ﻓﻲ اﻟﺠﻮار.
وﻛﻤﺜﺎل آﺧﺮ اﻟﻔﻠﺘﺮ اﻟﺸﮫﯿﺮ اﻟﺘﺎﻟﻲ:
ﻻﺣﻆ ﻛﯿﻒ ﻳﻘﻮم اﻟﻔﻠﺘﺮ ﻋﺎﻟﻲ اﻟﻌﺒﻮر ﺑﺘﻐﯿﯿﺮ اﻟﻤﻨﺎطﻖ اﻟﻤﻨﺨﻔﻀﺔ اﻟﺘﻜﺮار وﺗﻘﻠﯿﻞ ﻗﯿﻤﮫﺎ ﺣﺘﻰ ﺻﺎرت اﻗﺮب إﻟﻰ
اﻟﺼﻔﺮ ،وھﺬا ھﻮ ﺳﺒﺐ ظﮫﻮر اﻟﻠﻮن اﻷﺳﻮد ﻓﻲ اﻟﺼﻮرﺗﯿﻦ اﻷﺧﯿﺮﻳﺘﻦ ،أﻣﺎ اﻟﻔﻠﺘﺮ ﻣﻨﺨﻔﺾ اﻟﻌﺒﻮر ﻓﮫﻮ ﻳﻘﻮم
ﺑﺘﻘﻠﯿﻞ ﻗﯿﻢ اﻟﻤﻜﻮﻧﺎت اﻟﻤﺮﺗﻔﻌﺔ ﻣﻤﺎ ﻳﻌﻨﻲ اﻗﺘﺮاب اﻟﺼﻮرة ﻣﻦ اﻟﻤﺴﺘﻮى اﻟﺮﻣﺎدي اﻟﻤﺘﻮﺳﻂ أﻛﺜﺮ وأﻛﺜﺮ.
ﻻﺣﻆ ﻗﺴﻤﺔ اﻟﻤﺼﻔﻮﻓﺔ puﻋﻠﻰ 255ﻗﺒﻞ ﻋﺮﺿﮫﺎ ﺑﺴﺒﺐ زﻳﺎدة ﻗﯿﻢ اﻟﺼﻮرة ﻋﻦ اﻟﻘﯿﻤﺔ اﻟﻘﺼﻮى ﻟﻠﻮن
اﻟﺮﻣﺎدي.
وﺑﻄﺒﯿﻌﺔ اﻟﺤﺎل ﻓﻜﻞ ﺻﻮرة ﺗﺤﺘﺎج إﻟﻰ ﻗﯿﻤﺔ ﻣﻨﺎﺳﺒﺔ ﻟﺘﻌﺪﻳﻞ اﻟﻘﯿﻢ ،ﻓﻲ ﺣﯿﻦ ﻳﺘﻢ اﺳﺘﺨﺪام اﻟﺪاﻟﺔ im2gray
ﺑﻌﺾ اﻷﺣﯿﺎن ﻟﺘﻘﻮم ﺑﻨﻔﺲ اﻟﺪور.
اﻟﻔﻼﺗﺮ ﻏﯿﺮ اﻟﺨﻄﯿﺔ :Non-linear filters
ﻛﻤﺎ ﺗﺤﺪﺛﻨﺎ ﺳﺎﺑﻘﺎ ﻓﺈن اﻟﺪاﻟﺔ اﻟﻤﺴﺘﺨﺪﻣﺔ ﻓﻲ اﻟﻘﻨﺎع ھﻲ اﻟﺘﻲ ﺗﺤﺪد ﻧﻮع اﻟﻔﻠﺘﺮ ﻓﺈذا ﻛﺎﻧﺖ اﻟﺪاﻟﺔ ﺧﻄﯿﺔ ﻓﺈن
اﻟﻔﻠﺘﺮ ﻳﻐﺪو ﺧﻄﯿﺎ وإذا ﻛﺎﻧﺖ اﻟﺪاﻟﺔ ﻏﯿﺮ ﺧﻄﯿﺔ ﻓﺈﻧﻨﺎ ﻧﺴﻤﻲ اﻟﻔﻠﺘﺮ ﻓﻠﺘﺮا ﻏﯿﺮ ﺧﻄﯿﺎ ،ﻛﻤﺎ ھﻮ ﺣﺎل ھﺬا اﻟﻨﻮع
ﻣﻦ اﻟﻔﻼﺗﺮ .وﺗﺘﻤﯿﺰ ﻋﻨﮫﺎ اﻟﻔﻼﺗﺮ اﻟﺨﻄﯿﺔ ﺑﺄﻧﮫﺎ أﺳﮫﻞ ﻓﻲ اﻟﺘﻮﻟﯿﺪ وأﺳﺮع ﻓﻲ اﻟﺘﻨﻔﯿﺬ.
ﻳﺘﻢ ﺗﻄﺒﯿﻖ اﻟﻔﻼﺗﺮ ﻏﯿﺮ اﻟﺨﻄﯿﺔ ﺑﺎﺳﺘﺨﺪام اﻟﺪاﻟﺔ nlfilterواﺑﺴﻂ أﻣﺜﻠﺔ اﻟﻔﻼﺗﺮ ﻏﯿﺮ اﻟﺨﻄﯿﺔ ﻓﻠﺘﺮ اﻟﻘﯿﻤﺔ
اﻟﻌﻈﻤﻰ maximumﺣﯿﺚ ﻳﻘﻮم ﺑﺎﺳﺘﺒﺪال ﻗﯿﻤﺔ اﻟﺒﻜﺴﻞ ﺑﺄﻛﺒﺮ ﻗﯿﻤﺔ ﻣﻦ اﻟﺠﻮار ،وﻋﻜﺲ ذﻟﻚ ﻳﻘﻮم ﻓﻠﺘﺮ
اﻟﻘﯿﻤﺔ اﻟﺼﻐﺮى .minimumوﻛﻼ اﻟﻔﻠﺘﺮﻳﻦ ﻳﻘﻮﻣﺎن ﺑﺠﺰء ﻣﻦ ﻣﮫﺎم اﻟﻔﻠﺘﺮ rank-orderاﻟﺬي ﻳﺮﺗﺐ ﻗﯿﻢ ﺟﻮار
اﻟﻨﻘﻄﺔ اﻟﻤﻄﺒﻖ ﻋﻠﯿﮫﺎ ﺗﺼﺎﻋﺪﻳﺎ ﺑﺤﯿﺚ ﺗﻜﻮن اﻟﻘﯿﻤﺔ اﻷوﻟﻰ ھﻲ اﻟﻌﻈﻤﻰ واﻷﺧﯿﺮى ھﻲ اﻟﺼﻐﺮى.
اﻟﻤﺜﺎل اﻟﺘﺎﻟﻲ ﻳﺴﺘﺨﺪم اﻟﺪاﻟﺔ nlfilterﻣﻦ أﺟﻞ ﺗﻄﺒﯿﻖ ﻓﻠﺘﺮ اﻟﻘﯿﻤﺔ اﻟﻌﻈﻤﻰ ﻋﻠﻰ اﻟﺼﻮرة :c
;)'))>> cmax=nlfilter(c,[3,3],'max(x(:
واﻟﻜﻮد اﻟﺘﺎﻟﻲ ﻳﻄﺒﻖ ﻓﻠﺘﺮ اﻟﻘﯿﻤﺔ اﻟﺼﻐﺮى:
;)'))>> cmin=nlfilter(c,[3,3],'min(x(:
ﻻﺣﻈﻨﺎ اﻧﻨﺎ ﻣﺮرﻧﺎ اﺳﻢ اﻟﺼﻮرة وﺣﺠﻢ اﻟﻘﻨﺎع وداﻟﺔ ﺗﺤﺪد ﻧﻮع اﻟﻔﻠﺘﺮ ﻋﻠﻰ ﻣﺘﻐﯿﺮ اﻓﺘﺮاﺿﻲ .x
اﻟﺪاﻟﺔ nlfilterﺗﻌﺘﺒﺮ داﻟﺔ ﺑﻄﯿﺌﺎ ﻧﻮﻋﺎ ﻣﺎ ﺧﺎﺻﺔ إذا ﻛﻠﻤﺎ ﻛﺒﺮ ﺣﺠﻢ ﻗﻨﺎع اﻟﻔﻠﺘﺮ ،ﻟﮫﺬا اﻟﺴﺒﺐ ﺳﻨﺴﺘﺨﺪم اﻟﺪاﻟﺔ
colfiltﻟﺘﻄﺒﯿﻖ اﻷﻣﺮ اﻟﺴﺎﺑﻖ ﺑﺴﺮﻋﺔ اﻛﺒﺮ:
;)>> cmax=colfilt(c,[3,3],'sliding',@max
وﻟﻔﻠﺘﺮ اﻟﻘﯿﻤﺔ اﻟﺼﻐﺮى ،ﺳﻨﺴﺘﺨﺪم اﻟﺒﺎراﻣﯿﺘﺮ @min
أﻣﺎ اﻟﺪاﻟﺔ ordfilt2ﻓﺘﻘﻮم ﺑﺘﻄﺒﯿﻖ ﺗﻘﻨﯿﺔ rank-orderاﻟﺘﻲ ﻳﻤﻜﻨﻨﺎ ﻣﻦ ﺧﻼﻟﮫﺎ اﻟﺤﺼﻮل ﻋﻠﻰ ﻓﻠﺘﺮ اﻟﻘﯿﻤﺔ
اﻟﻌﻈﻤﻲ او اﻟﺼﻐﺮى واﻷھﻢ ﻣﻦ ذﻟﻚ أي ﻗﯿﻤﺔ ﺑﯿﻨﮫﻤﺎ ،ﻛﻔﻠﺘﺮ اﻟﻘﯿﻤﺔ اﻟﻮﺳﻄﻰ ذا اﻷھﻤﯿﺔ اﻷﻛﺒﺮ ﻣﻨﮫﻤﺎ ،ﻛﻠﻤﺎ
ﻓﻲ اﻷﻣﺮ ان ﻋﻠﯿﻨﺎ اﺧﺘﯿﺎر اﻟﺮﻗﻢ اﻟﻮﺳﯿﻂ اﻟﺜﺎﻧﻲ ﺑﻌﺪ اﻟﺼﻮرة ،اﻟﺮﻗﻢ ﺗﺴﻌﺔ اﻟﺘﺎﻟﻲ ﻳﺤﺪد اﻟﻘﯿﻤﺔ اﻟﻌﻈﻤﻰ ﺑﯿﻦ
٩ﻗﯿﻢ ﺣﯿﺚ أن ﺣﺠﻢ اﻟﻔﻠﺘﺮ ھﻮ :٣×٣
;))>> cmax=ordfilt2(c,9,ones(3,3
أﻣﺎ اﻟﺮﻗﻢ ١ﻓﯿﺤﺪد ﻓﻠﺘﺮ اﻟﻘﯿﻤﺔ اﻟﺼﻐﺮى:
;))>> cmin=ordfilt2(c,1,ones(3,3
وﻟﻠﺤﺼﻮل ﻋﻠﻰ ﻓﻠﺘﺮ اﻟﻘﯿﻤﺔ اﻟﻮﺳﻄﻰ ﻧﺨﺘﺎر اﻟﺮﻗﻢ اﻷوﺳﻂ وﻓﻲ ھﺬا اﻟﻤﺜﺎل اﻟﺮﻗﻢ :٥
;))>> cmed=ordfilt2(c,5,ones(3,3
وھﻨﺎك داﻟﺔ أﺧﺮى ﺗﺴﺘﺨﺪم ﻓﻠﺘﺮ اﻟﻘﯿﻤﺔ اﻟﻮﺳﻄﻰ ھﻲ medfilt2وﻧﺤﺘﺎﺟﮫﺎ ﻣﻦ أﺟﻞ ازاﻟﺔ اﻟﺘﺸﻮش ﻛﻤﺎ
ﺳﯿﺄﺗﻲ ﻓﻲ اﻟﻔﺼﻞ اﻟﺨﺎﻣﺲ ،رﻏﻢ ان ھﺬه اﻟﺪاﻟﺔ اﺻﻼ ﺗﺴﺘﺪﻋﻰ اﻟﺪاﻟﺔ اﻷﺻﻠﯿﺔ ordfilt2وﻟﮫﺬا ﻳﺴﺘﺤﺴﻦ
اﺳﺘﺨﺪام اﻟﺪاﻟﺔ اﻷﺻﻠﯿﺔ واﺧﺘﯿﺎر اﻟﻘﯿﻤﺔ اﻟﻤﺘﻮﺳﻄﺔ إن أﻣﻜﻦ ذﻟﻚ.
ﻓﯿﻤﺎ ﺻﻮرة رﺟﻞ اﻟﻜﺎﻣﯿﺮا ﺑﻌﺪ ﺗﻄﺒﯿﻖ ﻓﻠﺘﺮي اﻟﻘﯿﻤﺔ اﻟﺼﻐﺮى واﻟﻌﻈﻤﻰ ﻋﻠﯿﻪ.
================
اﻧﺘﮫﻰ ﺑﺤﻤﺪ ﷲ وﺗﻮﻓﯿﻘﻪ ،اﻋﺪاد وﺗﺮﺟﻤﺔ ﻓﮫﺪ ال ﻗﺎﺳﻢ.
ﻣﺪﺧﻞ إﻟﻰ ﻣﻌﺎﻟﺠﺔ اﻟﺼﻮر ﻣﻊ اﻟﻤﺎﺗﻼب ـ ﺗﺮﺟﻤﺔ ﻓﮫﺪ أل ﻗﺎﺳﻢ [email protected]
ﺣﺴﺐ اﻟﺸﻜﻞ:
ﻛﻠﻣﺔ )اﻟﺗﺣوﯾل( ﻓﻲ ھذا اﻟﻔﺻل ﯾﻘﺻد ﺑﮭﺎ داﺋﻣﺎ )ﺗﺣوﯾل ﻓورﯾﯾﮫ( وﻟﯾس أي ﺗﺣوﯾل آﺧر ...ﺣﺳب ﻧوع اﻟﺗﺣوﯾل اﻟﻣﻔﮭوم ﻣن اﻟﺳﯾﺎق.
١
ﻓﻲ اﻟﺸﻜﻞ اﻟﺴﺎﺑﻖ ،ﻗﻤﻨﺎ ﺑﺄﺧﺬ اﻷﺟﺰاء اﻷرﺑﻌﺔ اﻷوﻟﻰ ﻓﻘﻂ ﻣﻦ أﺟﻞ ﻋﻤﻠﯿﺔ اﻟﺘﻘﺮﻳﺐ ،وﻛﻠﻤﺎ أﺧﺬﻧﺎ أﺟﺰاء
أﻛﺜﺮ ،ﻛﻠﻤﺎ ﻛﺎن ﻧﺎﺗﺞ ﻣﺠﻤﻮع اﻟﺪوال أﻗﺮب إﻟﻰ اﻟﺪاﻟﺔ اﻷﺻﻠﯿﺔ.
وﺑﺎﻟﻤﻨﺎﺳﺒﺔ ﻓﺈن اﻟﺘﺮددات أو اﻟﺘﻜﺮارات ﻋﻠﻰ ﻣﺴﺘﻮى اﻟﺼﻮرة او اﻟﻤﺼﻔﻮﻓﺔ ﺧﺼﻮﺻﺎ ﻳﻘﺼﺪ ﺑﮫﺎ :ﻣﻘﯿﺎس
ﻟﻤﻘﺪار اﻟﺘﻐﯿﺮ ﻓﻲ ﻗﯿﻢ اﻟﺼﻮرة ﻓﺈذا ﻛﺎﻧﺖ اﻟﺘﻐﯿﺮات ﻛﺜﯿﺮة ﻋﻠﻰ ﻣﺴﺘﻮى اﻟﻘﯿﻢ ﻛﺎﻧﺖ اﻟﺘﻜﺮارات frequencies
ﻛﺜﯿﺮة واﻟﻌﻜﺲ ﺑﺎﻟﻌﻜﺲ.
ﺗﺤﻮﻳﻞ ﻓﻮرﻳﯿﻪ اﻟﻤﺘﻘﻄﻊ ﻣﻦ أﺣﺎدي اﻟﺒﻌﺪ
The one-dimensional discrete Fourier transform
ﻋﻨﺪﻣﺎ ﻧﻘﻮم ﺑﺎﻟﺘﻌﺎﻣﻞ ﻣﻊ اﻟﺪاﻟﺔ اﻟﻤﺘﻘﻄﻌﺔ ،ﻛﻤﺎ ﺳﻮف ﻧﻔﻌﻞ ﻣﻊ اﻟﺼﻮر ،ﻓﺈﻧﻨﺎ اﻟﺤﺎﻟﺔ ﺳﺘﻜﻮن ﻓﯿﮫﺎ اﺧﺘﻼف
ﺑﺴﯿﻂ ﻋﻦ اﻟﺤﺎﻟﺔ اﻟﺴﺎﺑﻘﺔ ،ﺣﯿﺚ أن ﻟﺪﻳﻨﺎ ﻓﻘﻂ ﻋﺪد ﻣﺤﺪد ﻣﻦ اﻟﻘﯿﻢ ،وﻧﺤﺘﺎج إﻟﻰ ﻋﺪد ﻣﺤﺪود ﻣﻦ اﻟﺪوال
ﻟﺘﻘﺮﻳﺒﮫﺎ.
ﻟﻨﺄﺧﺬ ﻓﻲ اﻻﻋﺘﺒﺎر اﻟﻤﺘﺴﻠﺴﻠﺔ اﻟﻤﺘﻘﻄﻌﺔ اﻟﺘﺎﻟﯿﺔ:
1, 1, 1, 1, -1, -1, -1, -1
ﺳﻨﻘﻮم ھﻨﺎ ﺑﺘﺤﻮﻳﻞ اﻟﻤﺘﺴﻠﺴﻠﺔ )ﺗﻘﺮﻳﺒﮫﺎ( وﻓﻖ اﻟﺸﻜﻞ اﻟﺘﺎﻟﻲ ،اﻟﺬي ﻳﻮﺿﺢ ھﺬه اﻟﻤﺘﺴﻠﺴﻠﺔ ﻛﻤﺠﻤﻮﻋﺔ
ﻣﻦ داﻟﺘﻲ ﺟﯿﺐ sinﻓﻘﻂ ،ﻓﺘﺤﻮﻳﻞ ﻓﻮرﻳﯿﻪ ﻳﺴﻤﺢ ﻟﻨﺎ ﺑﺎﻟﺤﺼﻮل ﻋﻠﻰ دوال اﻟﺠﯿﺐ ھﺬه وﺣﺪھﺎ ﺣﯿﺚ ﺗﺘﺤﻮل
ﻓﻲ داﻟﺔ اﻟﺠﻤﻊ إﻟﻰ اﻟﺪاﻟﺔ أو اﻟﻤﺘﺴﻠﺴﻠﺔ اﻷﺻﻠﯿﺔ.
وﻷﻧﻨﺎ ﺳﻮف ﻧﮫﺘﻢ ﺑﺎﻟﺴﻼﺳﻞ اﻟﻤﺘﻘﻄﻌﺔ وھﺬا ﻳﻨﻄﺒﻖ ﻋﻠﻰ اﻟﺼﻮر ،ﻓﺈﻧﻨﺎ ﺳﻮف ﻧﺘﺤﺪث ﻋﻦ ﺗﺤﻮﻳﻞ ﻓﻮرﻳﯿﻪ
اﻟﻤﺘﻘﻄﻊ discrete Fourier transformﻓﻘﻂ واﻟﺬي ﻳﺨﺘﺼﺮ إﻟﻰ .DFT
اﻟﺘﻌﺮﻳﻒ اﻟﺮﻳﺎﺿﻲ ﻟﺘﺤﻮﻳﻞ ﻓﻮرﻳﺮ اﺣﺎدي اﻟﺒﻌﺪ one dimensional DFT
ﻟﯿﻜﻦ ﻟﺪﻳﻨﺎ
ھﻲ ﻣﺘﺴﻠﺴﻠﺔ ﻣﻦ اﻟﻄﻮل Nوﻧﻌﺮف ﺗﺤﻮﻳﻞ ﻓﻮرﻳﯿﻪ اﻟﻤﺘﻘﻄﻊ اﻟﻤﻘﺎﺑﻞ ﻟﮫﺎ ﺑﺄﻧﻪ:
إذا ﻗﻤﻨﺎ ﺑﻤﻘﺎرﻧﺔ داﻟﺔ اﻟﺘﺤﻮﻳﻞ واﻟﺪاﻟﺔ اﻟﻌﻜﺴﯿﺔ ﻟﮫﺎ ﺳﻮف ﻧﺠﺪ أن ھﻨﺎك ﻓﺮﻗﯿﻦ ﺑﺴﯿﻄﯿﻦ ھﻤﺎ:
وﺑﮫﺬا ﺗﻜﻮن اﻟﺪاﻟﺔ اﻷﺻﻠﯿﺔ fھﻲ ﻣﻌﻜﻮس اﻟﺘﺤﻮﻳﻞ أي ﻣﻌﻜﻮس اﻟﺪاﻟﺔ Fوﺗﻜﺘﺐ:
وﻛﻤﺎ ﺷﺎھﺪﻧﺎ ﺳﺎﺑﻘﺎ ﺣﯿﺚ أن اﻟﺪاﻟﺔ أﺣﺎدﻳﺔ اﻟﺒﻌﺪ ﻳﻤﻜﻦ ان ﺗﻜﺘﺐ ﻛﻤﺠﻤﻮع ﻣﻦ دوال اﻟﺠﯿﺐ وﺟﯿﺐ اﻟﺘﻤﺎم،
وﻧﻌﻠﻢ أن اﻟﺼﻮرة اﻟﻤﻌﻄﺎة ﻳﻤﻜﻦ اﻟﻨﻈﺮ إﻟﯿﮫﺎ ﻛﺪاﻟﺔ ﻣﺼﻔﻮﻓﺔ ﺛﻨﺎﺋﯿﺔ اﻟﺒﻌﺪ ) ، f(x,yﻓﺈﻧﻪ ﻣﻦ اﻟﻤﺒﺮر أن ﻧﻔﺘﺮض
أﻧﮫﺎ ﻳﻤﻜﻦ أن ﺗﻜﺘﺐ ﻛﻤﺠﻤﻮع ﻣﻦ اﻟﺪوال اﻟﻤﺠﻌﺪة corrugation functionsاﻟﺘﻲ ﻟﮫﺎ اﻟﺸﻜﻞ اﻟﻌﺎم:
وھﺬا ﺑﺎﻟﻀﺒﻂ ﻣﺎ ﺗﻔﻌﻠﻪ دوال ﺗﺤﻮﻳﻞ ﻓ ﻮرﻳﯿﻪ ﺛﻨﺎﺋﯿﺔ اﻟﺒﻌﺪ ،ﺣﯿﺚ أﻧﮫﺎ ﺗﻘﻮم ﺑـﺈﻋﺎدة ﻛﺘﺎﺑﺔ اﻟﺪاﻟﺔ اﻷﺻﻠﯿﺔ إﻟﻰ
ﻣﺠﻤﻮﻋﺔ ﻣﻦ ھﺬه اﻷﺟﺰاء /اﻟﺘﺠﻌﺪات.
إن ﺗﻌﺮﻳﻒ ﺗﺤﻮﻳﻞ ﻓﻮرﻳﯿﻪ اﻟﻤﺘﻘﻄﻊ ﺛﻨﺎﺋﻲ اﻟﺒﻌﺪ ﻳﻜﻮن ﻣﺸﺎﺑﮫﺎ ﻟﻠﺘﺤﻮﻳﻞ أﺣﺎدي اﻟﺒﻌﺪ ،ﺣﯿﺚ ﺳﯿﻜﻮن اﻟﺘﺤﻮﻳﻞ
وﻋﻜﺲ اﻟﺘﺤﻮﻳﻞ ﻟﻤﺼﻔﻮﻓﺔ ﻣﻦ اﻟﺒﻌﺪ ، M×Nﺣﯿﺚ ﺳﻨﻔﺘﺮض ﻷﺟﻞ اﻟﺘﺮﻣﯿﺰ أن اﻟﺪﻟﯿﻞ xﻗﯿﻤﻪ ﻣﻦ 0إﻟﻰ M-
،1وأن اﻟﺪﻟﯿﻞ yﻗﯿﻤﻪ ﻣﻦ 0إﻟﻰ ،N-1ﻓﯿﻜﻮن ﻟﺪﻳﻨﺎ:
ﻳﺠﺪر اﻹﺷﺎرة أن اﻟﺼﯿﻐﺔ اﻟﺴﺎﺑﻘﺔ ﻟﯿﺴﺖ ﻣﺴﺘﺨﺪﻣﺔ ﻣﻦ ﻗﺒﻞ ﺟﻤﯿﻊ اﻟﻤﺆﻟﻔﯿﻦ ،ھﻨﺎك اﺧﺘﻼﻓﺎت ﺟﺰﺋﯿﺔ ﻛﺜﯿﺮة.
ﺑﻌﺾ ﺧﺼﺎﺋﺺ ﺗﺤﻮﻳﻞ ﻓﻮرﻳﯿﻪ ﺛﻨﺎﺋﻲ اﻟﺒﻌﺪ Some properties of the two dimensional DFT
ﻛﻞ ﺧﺼﺎﺋﺺ اﻟﺘﺤﻮﻳﻞ أﺣﺎدﻳﺔ اﻟﺒﻌﺪ ﺗﻈﮫﺮ ھﻨﺎ ،وﻟﻜﻦ ھﻨﺎك ﺑﻌﺾ اﻟﺨﺼﺎﺋﺺ اﻟﺘﻲ ﻟﻢ ﻧﺘﻄﺮق ﻟﮫﺎ ﺳﺎﺑﻘﺎ ،ﺧﺎﺻﺔ
ﺗﻠﻚ اﻟﻤﺘﻌﻠﻘﺔ ﺑﻤﻌﺎﻟﺠﺔ اﻟﺼﻮر ،وﻣﻨﮫﺎ:
اﻟﺘﺸﺎﺑﻪ Similarityﻧﻼﺣﻆ اوﻻ أن اﻟﺘﺤﻮﻳﻞ واﻟﺘﺤﻮﻳﻞ اﻟﻌﻜﺴﻲ ﻣﺘﺸﺎﺑﻪ ﺟﺪا ،ﺑﺎﺳﺘﺜﻨﺎء ﻣﻌﺎﻣﻞ اﻟﺘﺪرج
ﻓﻲ داﻟﺔ اﻟﺘﺤﻮﻳﻞ اﻟﻌﻜﺴﯿﺔ ،واﻹﺷﺎرة اﻟﺴﺎﻟﺒﺔ ﻓﻲ اﻷس ﺑﺪاﻟﺔ اﻟﺘﺤﻮﻳﻞ )وﺗﺴﻤﻰ ﺑﺪاﻟﺔ اﻟﺘﺤﻮﻳﻞ
اﻷﻣﺎﻣﯿﺔ .(forward transform
وھﺬا ﻳﻌﻨﻲ أن ﻧﻔﺲ اﻟﺨﻮارزﻣﯿﺔ ﺳﻮف ﺗﺴﺘﺨﺪم ،ﺑﺎﺳﺘﺜﻨﺎء ﺑﻌﺾ اﻟﻀﺒﻂ اﻟﺒﺴﯿﻂ ،ﻟﻜﻼ اﻟﺘﺤﻮﻳﻠﯿﻦ اﻷﻣﺎﻣﻲ
واﻟﻌﻜﺴﻲ.
اﺳﺘﺨﺪام اﻟـ DFTﻛﻔﻠﺘﺮ ﺣﯿﺰي :ﻻﺣﻆ اﻟﺼﯿﻐﺔ
وﻻﺣﻆ أن ﺣﺴﺎﺑﮫﺎ ﺳﯿﻜﻮن ﻣﺴﺘﻘﻼ ﻋﻦ اﻟﻘﯿﻤﺘﯿﻦ fو Fوھﺬا ﻳﻌﻨﻲ اﻧﻪ ﺑﺎﻹﻣﻜﺎن ﺣﺴﺎﺑﮫﺎ ﻣﺴﺒﻘﺎ ،ووﺿﻌﮫﺎ
ﻓﻘﻂ ﺑﻌﺪ ذﻟﻚ ﻓﻲ اﻟﺼﯿﻐﺔ أﻋﻼه ،وﻳﻌﻨﻲ أﻳﻀﺎ أن ﻛﻞ ﻗﯿﻤﺔ ﻓﻲ ) F(u,vﻳﻤﻜﻦ اﻟﺤﺼﻮل ﻋﻠﯿﮫﺎ ﺑﻀﺮب ﻛﻞ ﻗﯿﻤﺔ
ﻓﻲ ) f(x,yﺑﻘﯿﻤﺔ ﺛﺎﺑﺘﺔ ،وإﺿﺎﻓﺔ ﻛﻞ اﻟﻨﺘﺎﺋﺞ .وﻟﻜﻦ ھﺬا ﺑﻜﻞ دﻗﺔ ھﻮ ﻣﺎ ﺗﻔﻌﻠﻪ اﻟﻔﻠﺘﺮة اﻟﺤﯿﺰﻳﺔ اﻟﺨﻄﯿﺔ linear
،spatial filterإﻧ ﮫﺎ ﻛﻤﺎ رأﻳﻨﺎ ﺳﺎﺑﻘﺎ ﺗﻘﻮم ﺑﻀﺮب ﻛﻞ اﻟﻌﻨﺎﺻﺮ ﺗﺤﺖ اﻟﻘﻨﺎع ﺑﻘﯿﻢ ﺛﺎﺑﺘﺔ ﺛﻢ ﺗﻀﯿﻒ اﻟﻨﺘﺎﺋﺞ ﻣﻊ
ﺑﻌﺾ ،ﺑﻤﻌﻨﻰ اﻧﻪ ﻳﻤﻜﻨﻨﺎ اﻋﺘﺒﺎر أن اﻟـ DFTﻛﻔﻠﺘﺮ ﺣﯿﺰي ﺧﻄﻲ ﻳﻜﻮن ﻛﺒﯿﺮا ﻛﻠﻤﺎ ﻛﺒﺮت اﻟﺼﻮرة .وﻟﻠﺘﻌﺎﻣﻞ ﻣﻊ
ﻣﺸﻜﻠﺔ ﺣﻮاف اﻟﺼﻮرة ،image edgesﺳﻮف ﻧﻔﺘﺮض أن اﻟﺼﻮرة ﻗﺪ ﻣﻄﺖ ﻓﻲ ﻛﻞ اﻻﺗﺠﺎھﺎت ﺑﺤﯿﺚ ﻳﻜﻮن
اﻟﻘﻨﺎع maskﻗﺎدرا ﻋﻠﻰ رؤﻳﺔ ﻗﯿﻢ ﻟﻠﺼﻮرة ﻟﻜﻲ ﻳﺴﺘﺨﺪﻣﮫﺎ.
ﻗﺎﺑﻠﯿﺔ اﻟﻔﺼﻞ separability
ﻻﺣﻆ أن )ﻋﻨﺎﺻﺮ اﻟﻔﻠﺘﺮ( ﻓﻲ ﺗﺤﻮﻳﻞ ﻓﻮرﻳﯿﻪ ﻳﻤﻜﻦ أن ﻳﺼﺎغ ﻛﺠﺪاء ﻋﻤﻠﯿﺎت ﺿﺮب ﻣﻨﻔﺼﻠﺔ:
ﻣﻌﺘﻤﺪة ﻋﻠﻰ ﻗﯿﻤﺘﻲ xو uوﻣﺴﺘﻘﻠﺔ ﻋﻦ اﻟﻘﯿﻤﺘﯿﻦ yو . vوﺑﺸﻜﻞ ﻣﻌﺎﻛﺲ ﻧﺴﺘﻄﯿﻊ ﻣﻼﺣﻈﺔ اﻟﺠﺪاء
اﻟﺜﺎﻧﻲ
ﺣﯿﺚ ﺗﻌﺘﻤﺪ ﻋﻠﻰ ﻗﯿﻤﺘﻲ yو ،vوھﻲ ﻣﺴﺘﻘﻠﺔ ﻋﻦ xو ،uوھﺬا ﻳﻌﻨﻲ أﻧﻨﺎ ﻳﻤﻜﻦ أن ﻧﺠﺰئ اﻟﺼﯿﻐﺔ أﻋﻼه
إﻟﻰ ﺻﯿﻎ أﺑﺴﻂ ﺗﻌﻤﻞ ﻓﻘﻂ ﻋﻠﻰ ﺻﻒ rowsواﺣﺪ أو ﻋﻤﻮد columnsواﺣﺪ ﻛﺎﻟﺘﺎﻟﻲ :
ﻓﺈذا ﻗﻤﻨﺎ ﺑﺘﺒﺪﻳﻞ xو uﺑﺎﻟﻤﺘﻐﯿﺮﻳﻦ yو ،vﻓﺴﻨﺤﺼﻞ ﻋﻠﻰ اﻟﺼﯿﻐﺔ اﻟﻤﻘﺎﺑﻠﺔ ﻟﻠﺘﺤﻮﻳﻞ DFTﻋﻠﻰ أﻋﻤﺪة
اﻟﻤﺼﻔﻮﻓﺔ ،ھﺬه اﻟﺼﯿﻎ ﺗﻌﺮف ﺗﺤﻮﻳﻞ DFTاﻟﻤﺘﻘﻄﻊ أﺣﺎدي اﻟﺒﻌﺪ one-dimensionalﻟﻤﺘﺠﻪ ، vectorوھﻮ ﻣﺎ
ﻧﺨﺘﺼﺮه ﺑـ .DFT
ﻳﻤﻜﻨﻨﺎ إذن ﺣﺴﺎب ﺗﺤﻮﻳﻞ ﻓﻮرﻳﯿﻪ ﺛﻨﺎﺋﻲ اﻟﺒﻌﺪ ) (2-D DFTﺑﺎﺳﺘﺨﺪام ھﺬه اﻟﺨﺎﺻﯿﺔ ) ﻗﺎﺑﻠﯿﺔ اﻟﻔﺼﻞ
(separabilityﻣﻦ أﺟﻞ اﻟﺤﺼﻮل ﻋﻠﻰ ﻣﺼﻔﻮﻓﺔ اﻟـﺘﺤﻮﻳﻞ ،ﻓﻨﻘﻮم أوﻻ ﺑﺤﺴﺎب اﻟـ ) DFTأﺣﺎدﻳﺔ اﻟﺒﻌﺪ( ﻟﻜﻞ
اﻟﺼﻔﻮف ،ﺛﻢ ﻧﺤﺴﺒﮫﺎ ﻟﻜﻞ اﻷﻋﻤﺪة اﻟﻨﺎﺗﺠﺔ ،ﻛﻤﺎ ھﻮ ﻣﻮﺿﺢ ﺑﺎﻟﺸﻜﻞ اﻟﺘﺎﻟﻲ:
ﺣﯿﺚ أن kﻋﻨﺼﺮ وﺣﯿﺪ )ﻣﺘﺠﻪ ﺑﻌﻨﺼﺮ واﺣﺪ ،(scalarﺑﯿﻨﻤﺎ اﻟﺪوال fو gھﻲ ﻣﺼﻔﻮﻓﺎت ،وﻛﻞ ﺻﯿﻐﺔ أﻋﻼه ﺗﻨﺘﺞ
ﻣﺒﺎﺷﺮة ﻣﻦ اﻟﺘﻌﺮﻳﻒ اﻟﻤﻌﻄﻰ ﻓﻲ اﻟﻤﻌﺎدﻟﺔ ٤.٤ﺳﺎﺑﻘﺎ ،ھﺬه اﻟﺨﺎﺻﯿﺔ ﻟﮫﺎ اﺳﺘﺨﺪاﻣﺎت ﻛﺒﯿﺮة ﻟﻠﺘﻌﺎﻣﻞ ﻣﻊ
اﻟﺼﻮر ﻛﻤﺎ ﻓﻲ ،image degradationﻛﺎﻟﻀﻮﺿﺎء noiseاﻟﺘﻲ ﻳﻤﻜﻦ ﻧﻤﺬﺟﺘﮫﺎ ﻛﺎﻟﻤﺠﻤﻮع:
d=f+n
ﺣﯿﺚ أن fھﻲ اﻟﺼﻮرة اﻷﺻﻠﯿﺔ ،و nھﻲ اﻟﻀﺠﯿﺞ ،أﻣﺎ dﻓﮫﻲ اﻟﺼﻮرة اﻟﻨﺎﺗﺠﺔ ﻣﻦ ﺗﺠﺮﻳﺪ اﻟﺼﻮرة degraded
imageﻣﻦ اﻟﻀﺠﯿﺞ ،ﺣﯿﺚ أن:
ورﻏﻢ أﻧﮫﺎ ﻗﺪ ﺗﺒﺪو طﺮﻳﻘﺔ ﻣﻜﻠﻔﺔ وﻏﯿﺮ ﻣﻼﺋﻤﺎ ﻟﺤﺴﺎب أﻣﺮ ﻳﺒﺪو ﺑﺴﯿﻄﺎ ﻛﻤﺎ ﻧﻌﺮف ﻋﻦ ﻓﻠﺘﺮ اﻻﻟﺘﻔﺎف ،ﻓﺈﻧﻪ
ﺗﻤﻜﻨﻨﺎ أن ﻧﺤﺼﻞ ﻋﻠﻰ ﻣﯿﺰة ﺳﺮﻋﺔ ﻋﺎﻟﯿﺔ إذا ﻛﺎﻧﺖ Sﻛﺒﯿﺮة.
ﻣﺜﻼ ،ﻟﯿﻜﻦ ﻟﺪﻳﻨﺎ رﻏﺒﺔ ﻓﻲ ﺣﺴﺎب اﻻﻟﺘﻔﺎف ﻋﻠﻰ ﺻﻮرة ﺑﻌﺪھﺎ ،512 × 512ﻣﻊ ﻓﻠﺘﺮ ﺑﻌﺪه ،٣٢×٣٢ﻟﻔﻌﻞ
ذﻟﻚ ﺑﺎﻟﻄﺮﻳﻘﺔ اﻟﻤﺒﺎﺷﺮة ﻓﺈﻧﻪ ﻳﺘﻄﻠﺐ ٣٢٢أي ١٠٢٤ﻋﻤﻠﯿﺔ ﺿﺮب ﻟﻜﻞ ﺑﻜﺴﻞ أي ، 512 × 512 =٢٦٢١٤٤
وھﺬا ﻳﻌﻄﯿﻨﺎ أﺟﻤﺎﻟﻲ ﻣﻦ ﻋﻤﻠﯿﺎت اﻟﻀﺮب ﻗﺪره ٢٦٨٤٣٥٤٥٦ﻋﻤﻠﯿﺔ ﺿﺮب ﻣﻄﻠﻮﺑﺔ ﻓﻲ اﻟﻄﺮﻳﻘﺔ اﻟﻤﺒﺎﺷﺮة.
واﻵن ﺑﺎﻟﻨﻈﺮ إﻟﻰ ﻛﻠﻔﺔ اﺳﺘﺨﺪام اﻟـ ) DFTﺑﺎﺳﺘﺨﺪام اﻟﺨﻮارزﻣﯿﺔ ،(FFTﺣﯿﺚ ﺳﯿﻜﻮن ﻟﺪﻳﻨﺎ ٤٦٠٨ﻋﻤﻠﯿﺔ
ﻟﻜﻞ ﺻﻒ ،ﺑﺎﻟﻨﻈﺮ إﻟﻰ اﻟﺠﺪول ٤.١أﻋﻼه اﻟﺬي ﻳﻮﺿﺢ ﻣﯿﺰات ﺧﻮارزﻣﯿﺔ اﻟﺘﺤﻮﻳﻞ اﻟﺴﺮﻳﻌﺔ ،وﻷن ﻣﻌﻨﺎ ٥١٢ﺻﻔﺎ
ﻓﮫﺬا ﻳﻌﻨﻲ ٢٣٥٩٢٩٦ =٤٦٠٨×٥١٢ﻋﻤﻠﯿﺔ ﺿﺮب ،وﻣﺜﻠﮫﺎ ﺑﺎﻟﻨﺴﺒﺔ ﻟﻀﺮب اﻷﻋﻤﺪة ،وھﺬا ﻳﻌﻨﻲ اﻧﻨﺎ ﻧﺤﺘﺎج
ﻟﻠﺤﺼﻮل ﻋﻠﻰ اﻟﺘﺤﻮﻳﻞ DFTإﻟﻰ ٤٧١٨٥٩٢ﻋﻤﻠﯿﺔ ﺿﺮب ،وﻣﺜﻠﮫﺎ ﻟﻠﺘﺤﻮﻳﻞ اﻟﺨﺎص ﺑﺎﻟﻔﻠﺘﺮ ،إﺿﺎﻓﺔ إﻟﻰ اﻳﺠﺎد
ﻣﻌﻜﻮس اﻟﻔﻠﺘﺮ،وأﺧﯿﺮا ﻧﺤﺘﺎج إﻟﻰ 512 × 512ﻋﻤﻠﯿﺔ ﺿﺮب ﻣﻦ أﺟﻞ إﻧﺠﺎز ﺿﺮب اﻟﺘﺤﻮﻳﻠﯿﻦ ﻹﻳﺠﺎد اﻟﺠﺪاء
اﻟﻨﮫﺎﺋﻲ.
وھﻜﺬا ﻓﺈن إﺟﻤﺎل ﻋﻤﻠﯿﺎت اﻟﻀﺮب اﻟﺘﻲ ﻧﺤﺘﺎﺟﮫﺎ ﻹﻧﺠﺎز اﻻﻟﺘﻔﺎف convolutionﺑﺎﺳﺘﺨﺪام DFTھﻲ:
وھﻲ ﻗﯿﻤﺔ ﺗﻌﻨﻲ ﺗﻮﻓﯿﺮا ﻛﺒﯿﺮا ﻓﻲ اﻟﻜﻠﻔﺔ ﻣﻘﺎرﻧﺔ ﺑﺎﻟﻄﺮﻳﻘﺔ اﻟﻤﺒﺎﺷﺮة اﻟﺘﻲ أوﺿﺤﻨﺎ ﺳﺎﺑﻘﺎ أﻧﮫﺎ
.
اﻟﻤﻌﺎﻣﻞ دي ﺳﻲ :DC coefficient
إن ﻗﯿﻤﺔ ) F(0,0ﻟﻠﺘﺤﻮﻳﻞ DFTﻳﺴﻤﻰ ﺑﺎﻟﻤﻌﺎﻣﻞ دي ﺳﻲ ) ،(DC coefficientﻓﺈذا وﺿﻌﻨﺎ u=v=0ﻓﻲ
اﻟﺘﻌﺮﻳﻒ اﻟﻤﻌﻄﻰ ﺑﺎﻟﻤﻌﺎدﻟﺔ ،٤.٤ﻓﺈﻧﻨﺎ ﻧﺤﺼﻞ ﻋﻠﻰ :
وذﻟﻚ ﻷي ﻋﺪدﻳﻦ ﺻﺤﯿﺤﯿﻦ pو ،qأﻣﺎ Mو Nﻓﮫﻤﺎ ﻛﻤﺎ ﻧﻌﻠﻢ ﺑﻌﺪا اﻟﻤﺼﻔﻮﻓﺔ اﻷﺻﻠﯿﺔ.
اﻟﻤﺼﻔﻮﻓﺔ اﻟﻨﺎﺗﺠﺔ ﺗﺪل ﻋﻠﻰ أن ﻧﺼﻒ اﻟﺘﺤﻮﻳﻞ ھﻮ ﻧﺴﺨﺔ ﻣﻌﻜﻮﺳﺔ ،ﻛﺼﻮرة ﻓﻲ اﻟﻤﺮآة ،ﻻﻗﺘﺮان اﻟﻨﺼﻒ
اﻵﺧﺮ ،ﻧﺴﺘﻄﯿﻊ أن ﻧﻔﻜﺮ أن اﻟﻨﺼﻔﯿﻦ اﻟﻌﻠﻮي واﻟﺴﻔﻠﻲ أو أن اﻟﻨﺼﻔﯿﻦ اﻟﯿﻤﯿﻦ واﻟﺸﻤﺎل ھﻤﺎ ﻧﺴﺨﺔ
ﻣﻌﻜﻮﺳﺔ ﻟﻼﻗﺘﺮان اﻟﻨﺎﺗﺞ ﻣﻦ اﻟﻨﺼﻒ اﻵﺧﺮ .اﻟﺸﻜﻞ اﻟﺘﺎﻟﻲ ﻳﻮﺿﺢ ھﺬا اﻟﺘﻨﺎظﺮ اﻟﻤﺘﻌﻠﻖ ﺑﺎﻟﺘﺤﻮﻳﻞ اﻟﻤﺒﺪل
،shifted DFTوﻛﻤﺎ ﻓﻲ اﻟﺸﻜﻞ اﻟﺴﺎﺑﻖ ﻓﺈن اﻟﻤﺮﺑﻊ اﻷﺳﻮد اﻟﺼﻐﯿﺮ ﻳﻮﺿﺢ ﻣﻮﻗﻊ اﻟﻤﻌﺎﻣﻞ ،DCواﻟﻤﻘﺼﻮد
ﺑﺎﻟﺘﻨﺎظﺮ أن اﻟﻤﻌﻠﻮﻣﺎت ﻳﻤﻜﻦ أن ﺗﻌﻄﻰ ﻟﻨﺼﻒ واﺣﺪ وﺗﻜﺮر ﻓﻘﻂ ﻟﻠﻨﺼﻒ اﻟﺜﺎﻧﻲ.
ﻻﺣﻆ ﻣﻌﺎﻣﻞ DCاﻟﻤﻌﺮف ﺳﺎﺑﻘﺎ ﺑﺄﻧﻪ ﻣﺠﻤﻮع ﻗﯿﻢ ﻋﻨﺎﺻﺮ اﻟﻤﺼﻔﻮﻓﺔ اﻷﺻﻠﯿﺔ ،وأﻧﻪ أو ﻋﻨﺎﺻﺮ اﻟﺘﺤﻮﻳﻞ.
Example 2 أﻣﺜﻠﺔ.٢
واﻵن ﻟﻨﻄﺒﻖ ﻋﻠﻰ ﻣﺼﻔﻮﻓﺔ ﺗﺘﻜﻮن ﻣﻦ ﺗﺠﻌﺪات ﻓﺮدﻳﺔ ،وﻟﺬﻟﻚ ﻧﻔﺘﺮض اﻟﻤﺼﻔﻮﻓﺔ aاﻟﺼﻐﯿﺮة ﺛﻢ ﻧﻘﻮم ﺑﻌﻤﻞ
ﺗﻜﺒﯿﺮ ﻟﮫﺎ ﻋﺒﺮ اﻟﺪاﻟﺔ repmatاﻟﺘﻲ ﺗﻮﻟﺪ ﻣﺼﻔﻮﻓﺔ اﻛﺒﺮ ﺣﺠﻤﺎ ﺑﺘﻜﺮار ﻗﯿﻢ ﻣﺼﻔﻮﻓﺔ ﺳﺎﺑﻘﺔ.
;]>> a = [100 200; 100 200
)>> a = repmat(a,4,4
وﺳﯿﻨﺘﺞ ﻋﻦ ذﻟﻚ اﻟﻤﺼﻔﻮﻓﺔ:
=a
أﻣﺎ ﻧﺎﺗﺞ ﺗﻄﺒﯿﻖ اﻟﺘﺤﻮﻳﻞ ﻋﻠﯿﮫﺎ ﻓﺴﻮف ﻳﻮﻟﺪ ﻟﻨﺎ اﻟﻤﺼﻔﻮﻓﺔ afﻛﻤﺎ ﻓﻲ اﻟﻜﻮد اﻟﺘﺎﻟﻲ:
)>> af = fft2(a
= af
ﻳﺒﺪو ﻣﺎ ﻓﻌﻠﻨﺎه ھﻨﺎ ﻛﺄﻧﻨﺎ ﺟﻤﻌﻨﺎ ﻣﺼﻔﻮﻓﺘﯿﻦ ،اﻟﻤﺼﻔﻮﻓﺔ اﻟﺜﺎﺑﺘﺔ اﻟﺘﻲ ﺗﺴﺎوي ١٥٠واﻟﻤﺼﻔﻮﻓﺔ اﻟﻤﺠﻌﺪة اﻟﺘﻲ
ﺗﺘﺒﺎدل ﻗﯿﻤﮫﺎ ﺑﯿﻦ ٥٠و ٥٠-ﻣﻦ اﻟﯿﺴﺎر إﻟﻰ اﻟﯿﻤﯿﻦ .اﻟﻤﺼﻔﻮﻓﺔ اﻟﺜﺎﺑﺘﺔ ﺳﻮف ﺗﻨﺘﺞ ﻟﻨﺎ ﻛﻤﺎ ﻓﻲ اﻟﻤﺜﺎل
اﻟﺴﺎﺑﻖ اﻟﻤﻌﺎﻣﻞ DCوﺣﯿﺪا وﻗﯿﻤﺘﻪ ،٩٦٠٠=١٥٠×٦٤ﻗﯿﻤﺔ اﻟﺘﺠﻌﺪ اﻟﻮﺣﯿﺪة .corrugation a single value
ووﻓﻖ اﻟﺨﺎﺻﯿﺔ اﻟﺨﻄﯿﺔ linearityﻓﺴﻮف ﻳﻜﻮن اﻟﺘﺤﻮﻳﻞ ﻋﺒﺎرة ﻋﻦ ﻗﯿﻤﺘﯿﻦ ﻓﻘﻂ.
Example 2 أﻣﺜﻠﺔ.٢
وﺳﻮف ﻧﺄﺧﺬ ھﻨﺎ ﻣﺼﻔﻮﻓﺔ أﺣﺎدﻳﺔ اﻟﺤﺎﻓﺔ ،أو ﺣﺎﻓﺔ ﻣﻦ ﺧﻄﻮة واﺣﺪة single step edge
])>> a = [zeros(8,4) ones(8,4
=a
اﻵن ﺳﻮف ﻧﻨﺠﺰ ﺗﺤﻮﻳﻞ ﻓﻮرﻳﯿﻪ ﻣﻊ اﻟﺘﺒﺪﻳﻞ ،وذﻟﻚ ﻟﺠﻌﻞ ﻣﻌﺎﻣﻞ DCﻓﻲ اﻟﻤﺮﻛﺰ ،وﺣﯿﺚ أﻧﻪ ﻳﺤﺘﻮي ﻋﻠﻰ
ﺑﻌﺾ اﻟﻘﯿﻢ اﻟﻤﺮﻛﺒﺔ ،ﻓﺴﻮف ﻧﻘﻮم ﻟﺘﺒﺴﯿﻂ ذﻟﻚ ﺑﻌﺮض اﻟﻘﯿﻢ اﻟﻤﻄﻠﻘﺔ اﻟﻤﺤﻮﻟﺔ.
;))>> af=fftshift(fft2(a
))>> round(abs(af
= ans
إن ﻣﻌﺎﻣﻞ DCھﻮ ﺑﺎﻟﻄﺒﻊ ﻣﺠﻤﻮع ﺟﻤﯿﻊ ﻗﯿﻢ ،aأﻣﺎ ﺑﺎﻗﻲ اﻟﻘﯿﻢ ﻓﯿﻤﻜﻦ اﻋﺘﺒﺎرھﺎ ﻣﻌﺎﻣﻼت دوال اﻟﺠﯿﺐ sin
اﻟﻤﻄﻠﻮﺑﺔ ﻟﺘﺸﻜﯿﻞ اﻟﺤﺎﻓﺔ ،edgeﻛﻤﺎ ھﻮ ﻣﻌﻄﻰ ﻓﻲ اﻟﻤﻌﺎدﻟﺔ .٤.١أﻣﺎ ﻧﺴﺦ اﻟﻘﯿﻢ ﺣﻮل اﻟﻤﻌﺎﻣﻞ DCﻓﮫﻮ
ﻧﺘﯿﺠﺔ ﻟﻠﺘﻨﺎظﺮ اﻟﻤﻮﺟﻮد ﻓﻲ اﻟﺘﺤﻮﻳﻞ .DFT
ﺗﺤﻮﻳﻞ ﻓﻮرﻳﯿﻪ ﻣﻊ اﻟﺼﻮر Fourier transforms of images
ﺳﻮف ﻧﻨﺸﺊ اﻟﻘﻠﯿﻞ ﻣﻦ اﻟﺼﻮر اﻟﺒﺴﯿﻄﺔ ،وﺳﻮف ﻧﺮى ﻣﺎ ﻳﻨﺘﺞ ﻋﻦ ﻣﻌﺎﻣﻞ ﻓﻮرﻳﯿﻪ ﻋﻨﺪﻣﺎ ﻳﻄﺒﻖ ﻋﻠﯿﮫﺎ.
اﻟﻤﺜﺎل :١ﺳﻮف ﻧﻨﺸﺊ ﺻﻮرة ﺑﺴﯿﻄﺔ ﻣﻜﻮﻧﺔ ﻣﻦ ﺣﺎﻓﺔ واﺣﺪة.
;])>> a=[zeros(256,128) ones(256,128
إذا ﻧﻈﺮﻧﺎ إﻟﻰ ھﺬه اﻟﻤﺼﻔﻮﻓﺔ ﺑﺎﻋﺘﺒﺎرھﺎ ﺻﻮرة ﻓﺴﻮف ﺗﻜﻮن ﻋﺒﺎرة ﻋﻦ ﺻﻮرة ﻧﺼﻔﮫﺎ اﻷﻳﻤﻦ أﺳﻮد واﻟﻨﺼﻒ
اﻷﻳﺴﺮ أﺑﯿﺾ ،واﻵن ﻟﻨﺄﺧﺬ ﺗﺤﻮﻳﻞ اﻟﺼﻮرة ﺛﻢ ﻧﻄﺒﻖ ﻋﻠﯿﮫﺎ اﻟﺘﺒﺪﻳﻞ.
;))>> af=fftshift(fft2(a
اﻵن ﺳﻮف ﻧﻌﺮض طﯿﻒ اﻟﺘﺤﻮﻳﻞ spectrumوذﻟﻚ ﺑﻄﺮﻳﻘﺘﯿﻦ:
اﻷوﻟﻰ:
;))afl=log(1+abs(af
))imshow(afl/afl(129,129
اﺳﺘﺨﺪﻣﻨﺎ اﻟﺴﻄﺮ اﻷول ﻟﻜﻲ ﻳﺴﻤﺢ اﻟﺴﻄﺮ اﻟﺜﺎﻧﻲ ﺑﻌﺮض اﻟﻤﺼﻔﻮﻓﺔ وذﻟﻚ ﺑﻌﺪ أن ﺗﺨﻠﺼﻨﺎ ﻣﻦ اﻟﻘﯿﻢ
اﻟﻤﺮﻛﺒﺔ وﺑﺎﻟﻄﺒﻊ ﺑﻌﺪ اﻟﺘﺒﺪﻳﻞ ﻓﺈن اﻟﻤﻌﺎﻣﻞ DCﺳﻮف ﻳﻜﻮن ﻓﻲ اﻟﻤﻮﻗﻊ ) ،(x,y)=(129,129وﻟﻘﺪ ﻗﻤﻨﺎ
ﺑﺘﻮﺳﯿﻊ اﻟﺘﺤﻮﻳﻞ ﺑﺎﺳﺘﺨﺪام اﻟﻠﻮﻏﺎرﻳﺘﻢ logوﺗﻘﺴﯿﻢ اﻟﻨﺘﯿﺠﺔ ﻋﻠﻰ اﻟﻘﯿﻤﺔ اﻟﻤﺘﻮﺳﻄﺔ ﻟﻠﺤﺼﻮل ﻋﻠﻰ
ﻣﺼﻔﻮﻓﺔ ﻣﻦ اﻟﻨﻮع doubleﻣﻊ ﻗﯿﻢ ﻓﻲ اﻟﻤﺪى ،0.0-0.1وھﺬا ﻳﺠﻌﻞ اﻟﻤﺼﻔﻮﻓﺔ ﻗﺎﺑﻠﺔ ﻟﻠﻌﺮض ﺑﺎﺳﺘﺨﺪام
داﻟﺔ ﻋﺮض اﻟﺼﻮر.imshow
اﻟﺜﺎﻧﯿﺔ:
))))imshow(mat2gray(log(1+abs(af
وﻛﻤﺎ ﺷﺎھﺪﻧﺎ ﻓﻲ اﻟﻔﺼﻞ اﻟﺜﺎﻟﺚ ﻓﺈن اﻟﺪاﻟﺔ mat2grayﺗﻘﻮم ﺑﺸﻜﻞ ﺗﻠﻘﺎﺋﻲ ﺑﺘﻜﺒﯿﺮ اﻟﻤﺼﻔﻮﻓﺔ ﻟﻠﻌﺮض
ﻛﺼﻮرة.
وﻓﻲ اﻟﺤﻘﯿﻘﺔ ﻣﻦ اﻟﻤﺘﻌﺎرف ﻋﻠﯿﻪ أن ﻳﺘﻢ ﻛﺘﺎﺑﺔ داﻟﺔ ﺻﻐﯿﺮة ﻣﻦ ﻗﺒﻞ اﻟﻤﺒﺮﻣﺞ ﻟﻤﺸﺎھﺪة اﻟﺘﺤﻮﻳﻞ ،وھﺬه
اﻟﺪاﻟﺔ fftshowاﻟﻤﻮﺿﺤﺔ أدﻧﺎه ﻧﻘﺪﻣﮫﺎ ﻋﻠﻰ ﺳﺒﯿﻞ اﻟﻤﺜﺎل.
)function fftshow(f,type
)% Usage: FFTSHOW(F,TYPE
%
% Displays the fft matrix F using imshow, where TYPE must be one of
% 'abs' or 'log'. If TYPE='abs', then then abs(f) is displayed; if
% TYPE='log' then log(1+abs(f)) is displayed. If TYPE is omitted, then
% 'log' is chosen as a default.
%% Example:
;)'% c=imread('cameraman.tif
;))% cf=fftshift(fft2(c
)'% fftshow(cf,'abs
%
if nargin<2,
;'type='log
end
)'if (type=='log
;))fl = log(1+abs(f
;))fm = max(fl(:
))imshow(im2uint8(fl/fm
)'elseif (type=='abs
;)fa=abs(f
;))fm=max(fa(:
)imshow(fa/fm
else
;)'error('TYPE must be abs or log.
;end
ﺑﺎﻟﻨﺴﺒﺔ ﻟﻠﺘﺤﻮﻳﻞ afﻓﺈﻧﻨﺎ ﺳﻮف ﻧﺴﺘﺪﻋﻲ اﻟﺪاﻟﺔ fftshowﻋﻠﻰ ﺧﯿﺎرﻳﻦ ،إﻣﺎ:
;)'>>fftshow(af,'log
ﺳﻮف ﺗﻌﺮض اﻟﺼﻮرة ﺑﻌﺪ ﺗﻌﺪﻳﻠﮫﺎ ﺑﺪاﻟﺔ اﻟﻠﻮﻏﺎرﻳﺘﻢ ،أو:
;)'>>fftshow(af,'abs
اﻟﺘﻲ ﺳﺘﻌﺮض اﻟﺼﻮرة ﺑﺎﺳﺘﺨﺪام داﻟﺔ اﻟﻤﻘﯿﺎس ،absواﻟﺸﻜﻞ اﻟﺘﺎﻟﻲ ﻳﻮﺿﺢ اﻟﺼﻮرة ﻗﺒﻞ وﺑﻌﺪ اﻟﺘﺤﻮﻳﻞ:
اﻟﻤﺜﺎل :٢
واﻵن ﺳﻮف ﻧﻨﺸﺊ ﺻﻨﺪوﻗﺎ )ﻣﺮﺑﻌﺎ( واﻟﺘﺤﻮﻳﻞ اﻟﺨﺎص ﺑﻪ
>> ;)a=zeros(256,256
>> ;a(78:178,78:178)=1
>> )imshow(a
>> ;))af=fftshift(fft2(a
>> )'figure,fftshow(af,'abs
اﻟﺸﻜﻞ اﻟﺘﺎﻟﻲ ﻳﻮﺿﺢ اﻟﺼﻮرة اﻟﻤﻘﺼﻮدة ،واﻟﺘﺤﻮﻳﻞ ﻋﻠﻰ اﻟﯿﻤﯿﻦ.
اﻟﻤﺜﺎل :٣واﻵن ﺳﻮف ﻧﻨﻈﺮ إﻟﻰ اﻟﺼﻨﺪوق اﻟﻤﺮﺑﻊ ﺑﻌﺪ ﺗﺪوﻳﺮه ﺑﺤﯿﺚ ﻳﺼﺒﺢ ﻣﻌﯿﻨﺎ )اﻟﻤﺎﺳﻲ اﻟﺸﻜﻞ
(diamond
;)>> [x,y]=meshgrid(1:256,1:256
;)>> b=(x+y<329)&(x+y>182)&(x-y>-67)&(x-y<73
)>> imshow(b
;))>> bf=fftshift(fft2(b
)>> figure,fftshow(bf
ﺗﻘﻮم اﻟﺪاﻟﺔ meshgridﺑﺘﻮﻟﯿﺪ ﻣﺼﻔﻮﻓﺘﯿﻦ اﻋﺘﻤﺎدا ﻋﻠﻰ ﺗﻜﺮار ﻣﻌﯿﻦ ﻟﻘﯿﻢ اﻟﻤﺘﺠﮫﯿﻦ اﻟﻤﺪﺧﻠﯿﻦ إﻟﯿﮫﺎ ،وﻏﺎﻟﺒﺎ
ﻣﺎ ﺗﻜﻮن ھﻨﺎك ﻋﻼﻗﺔ ﺑﯿﻦ ھﺎﺗﯿﻦ اﻟﻤﺼﻔﻮﻓﺘﯿﻦ ﺗﺴﺘﺨﺪم ﻓﻲ رﺳﻢ دوال ﻣﻌﯿﻨﺔ ،ﻓﻲ ھﺬا اﻟﻤﺜﺎل ﻗﻤﻨﺎ ﺑﺘﻮﻟﯿﺪ
اﻟﻤﺼﻔﻮﻓﺘﯿﻦ xو yﻣﻦ أﺟﻞ ﻋﺮض اﻟﻤﺼﻔﻮﻓﺔ ﻛﺎﻟﺼﻮرة اﻟﻤﻄﻠﻮﺑﺔ.
وﻧﺘﯿﺠﺔ ذﻟﻚ ﻣﻮﺿﺤﺔ ﺑﺎﻟﺸﻜﻞ اﻟﺘﺎﻟﻲ اﻟﺼﻮرة اﻷﺻﻠﯿﺔ واﻟﺘﺤﻮﻳﻞ ،ﻻﺣﻆ أن اﻟﺘﺤﻮﻳﻞ ھﻮ ﺗﺪوﻳﺮ اﻟﺘﺤﻮﻳﻞ اﻟﺨﺎص
ﺑﺎﻟﺼﻮرة اﻟﺴﺎﺑﻘﺔ.
اﻟﻤﺜﺎل :٤
ﺳﻮف ﻧﻨﺸﺊ ﻓﻲ ھﺬا اﻟﻤﺜﺎل داﺋﺮة ،ﺛﻢ ﻧﻘﺪم اﻟﺘﺤﻮﻳﻞ اﻟﺨﺎص ﺑﮫﺎ.
;)>> [x,y]=meshgrid(-128:217,-128:127
;)>> z=sqrt(x.^2+y.^2
;)>> c=(z<15
اﻟﻜﻮد اﻟﺴﺎﺑﻖ ﻗﺎم ﺑﺘﻮﻟﯿﺪ اﻟﻤﺼﻔﻮﻓﺔ cاﻟﺘﻲ ﺗﻈﮫﺮ ﺻﻮرﺗﮫﺎ ﻓﻲ اﻟﺸﻜﻞ أدﻧﺎه ﻛﺪاﺋﺮة ﺑﯿﻀﺎء داﺧﻞ ﻣﺤﯿﻂ اﺳﻮد.
أﻣﺎ ﺗﺤﻮﻳﻞ ﻓﻮرﻳﯿﻪ اﻟﺨﺎص ﺑﮫﺎ ﻓﻜﺎﻟﺘﺎﻟﻲ:٢
ﻻﺣظ أن أول ﺳطر ﻓﻲ ھذا اﻟﻣﻘطﻊ اﻟﺑرﻣﺟﻲ ﻣﻛﺗوب ﻓﻲ اﻟﻣﺎدة اﻷﺻﻠﯾﺔ ﺑﺷﻛل ﺧﺎطﺊ.
٢
;))>> cf=fftshift(fft2(c
;)'>> fftshow(cf,'log
ﻻﺣﻆ وﺟﻮد ﺗﻘﻄﻌﺎت ﻓﻲ ﺣﻮاف ﺻﻮرة اﻟﺘﺤﻮﻳﻞ ،ﺳﻮاء ﻓﻲ ﺻﻮرة اﻟﺪاﺋﺮة أو اﻟﻤﺮﺑﻊ ﻓﻲ اﻟﻤﺜﺎل اﻟﺴﺎﺑﻖ ،ﻳﻤﻜﻨﻨﺎ
اﻋﺘﺒﺎر اﻟﺘﻘﻄﻌﺎت اﻟﺘﻲ ﻋﻠﻰ اﻟﺨﻂ ﻣﻌﺎﻣﻼت دوال اﻟﺘﺠﻌﺪ ﻓﻲ اﻟﺘﺤﻮﻳﻞ ،اﻣﺎ ﺑﺎﻟﻨﺴﺒﺔ ﻟﻠﺪاﺋﺮة ھﻨﺎك ﺧﻄﻮط
ﻟﻠﻘﯿﻢ ﺗﺸﻊ ﻣﻦ اﻟﺪاﺋﺮة ،ﻣﻤﺎ ﻳﺠﻌﻠﮫﺎ ﺗﻈﮫﺮ ﻛﺄﻧﮫﺎ دواﺋﺮ ﻓﻲ اﻟﺘﺤﻮﻳﻞ.
إذا ﻛﺎﻧﺖ اﻟﺘﻘﻄﻌﺎت ﻓﻲ اﻟﺪاﺋﺮة ﺧﻔﯿﻔﺔ ﻧﻮﻋﺎ ﺑﺤﯿﺚ ﺗﻈﮫﺮ اﻟﺤﻮاف ﻛﺄﻧﮫﺎ ﻣﻠﻄﺨﺔ ،ﻓﺴﯿﻜﻮن اﻟﺘﺤﻮﻳﻞ ﺑﺪون
ﺣﻠﻘﺎت ،داﺋﺮة ﻛﮫﺬه ﻳﻤﻜﻦ اﻟﺤﺼﻮل ﻋﻠﯿﮫﺎ ﺑﺎﻟﻤﻌﺎدﻟﺔ اﻟﺘﺎﻟﯿﺔ )اﻋﺘﻤﺎدا ﻋﻠﻰ ﻗﯿﻤﺔ zﻻ .(c
;)b=1./(1+(z./15).^2
وﻟﻨﺠﺮب ﺗﺤﻮﻳﻞ ھﺬه اﻟﺼﻮرة ﻛﯿﻒ ﺳﯿﺒﺪو.
;))>> cf=fftshift(fft2(b
;)'>> fftshow(cf,'log
ﻓﻠﺘﺮة اﻟﻨﻄﺎق اﻟﻤﺘﻜﺮر Filtering in the frequency domain
ﻟﻘﺪت ﺗﻌﻠﻤﻨﺎ ﺳﺒﺎﺑﻘﺎ ﻣﯿﺰة اﺳﺘﺨﺪام ﺗﺤﻮﻳﻞ ﻓﻮرﻳﯿﻪ ﻓﻲ ﺗﺤﺴﯿﻦ ﻧﻈﺮﻳﺔ اﻻﻟﺘﻔﺎف ،ﺣﯿﺚ ﻳﺘﻢ اﻧﺠﺎز اﻟﻔﻠﺘﺮة
اﻟﺤﯿﺰﻳﺔ ﺑﺎﺳﺘﺨﺪام اﻟﻀﺮب ﺣﺴﺐ اﻟﻌﻨﺼﺮ ﺑﻤﺼﻔﻮﻓﺔ ﻓﻠﺘﺮ ﺗﺤﻮﻳﻞ ﺧﺎﺻﺔ.
ﻓﻲ ھﺬا اﻟﺠﺰء ﺳﻮف ﻧﺮى ﻧﺘﻔﺤﺺ ﺑﻌﺾ طﺮق اﻟﻔﻠﺘﺮة ﺑﺎﺳﺘﺨﺪام ﺗﺤﻮﻳﻞ ﻓﻮرﻳﯿﻪ.
اﻟﻔﻠﺘﺮة اﻟﻤﺜﺎﻟﯿﺔ Ideal filtering
اﻟﻔﻠﺘﺮة ﻣﻨﺨﻔﻀﺔ اﻟﻌﺒﻮر Low pass filtering
ﻟﯿﻜﻦ ﻟﺪﻳﻨﺎ ﻣﺼﻔﻮﻓﺔ ﺗﺤﻮﻳﻞ ﻓﻮرﻳﯿﻪ ،واﻧﻨﺎ ﻗﻤﻨﺎ ﺑﺘﺒﺪﻟﮫﺎ ﻓﺄﺻﺒﺢ ﻣﻌﺎﻣﻞ DCﻓﻲ ﻣﺮﻛﺰ اﻟﻤﺼﻔﻮﻓﺔ ،ﻓﺈذا ﻛﺎﻧﺖ
اﻟﻤﻜﻮﻧﺎت ﻣﻨﺨﻔﻀﺔ اﻟﻨﻄﺎق /اﻟﺘﺮدد ﺣﻮل اﻟﻤﺮﻛﺰ،ﻓﺈﻧﻨﺎ ﻧﺴﺘﻄﯿﻊ ﻋﻤﻞ ﻓﻠﺘﺮ ﻣﻨﺨﻔﺾ اﻟﻌﺒﻮر ﺑﻀﺮب اﻟﺘﺤﻮﻳﻞ
ﺑﺎﻟﻤﺼﻔﻮﻓﺔ ﺑﻄﺮﻳﻘﺔ ﻧﺤﺎﻓﻆ ﻓﯿﮫﺎ ﻋﻠﻰ ﻗﯿﻢ اﻟﻤﺮﻛﺰ ،وﻳﺘﻢ ﺗﻘﻠﯿﻞ أو ﺣﺬف اﻟﻘﯿﻢ اﻟﺒﻌﯿﺪة ﻋﻦ اﻟﻤﺮﻛﺰ ،واﺣﺪى
طﺮق ﻓﻌﻞ ذﻟﻚ ﺗﺘﻢ ﺑﺎﻟﻀﺮب ﺑﻤﺼﻔﻮﻓﺔ اﻟﻌﺒﻮر اﻟﻤﻨﺨﻔﺾ اﻟﻤﺜﺎﻟﯿﺔ ideal low-pass matrixوھﻲ ﻣﺼﻔﻮﻓﺔ
ﺛﻨﺎﺋﯿﺔ mﺗﻌﺮف ﻛﺎﻟﺘﺎﻟﻲ:
اﻟﺪاﺋﺮة cاﻟﺘﻲ ﻋﺮﺿﻨﺎھﺎ ﺳﺎﺑﻘﺎ ،ھﻲ ﻣﺼﻔﻮﻓﺔ ﻣﻦ ھﺬا اﻟﻨﻮع ﻓﯿﮫﺎ ،D=15ﻓﯿﻜﻮن ﻣﻌﻜﻮس ﺗﺤﻮﻳﻞ ﻓﻮرﻳﯿﻪ
ﻟﻠﻤﺼﻔﻮﻓﺔ اﻟﻨﺎﺗﺠﺔ ﻟﻠﻀﺮب ﺣﺴﺐ اﻟﻌﻨﺼﺮ ﺑﯿﻦ Fو mھﻲ اﻟﻨﺘﯿﺠﺔ اﻟﻤﻄﻠﻮﺑﺔ:
دﻋﻨﺎ ﻧﺮى ﻣﺎ ﻳﺤﺪث إذا ﻗﻤﻨﺎ ﺑﺘﻄﺒﯿﻖ ھﺬا اﻟﻔﻠﺘﺮ ﻋﻠﻰ اﻟﺼﻮرة ،ﻧﺤﺼﻞ أوﻻ اﻟﺼﻮرة ﺛﻢ ﻋﻠﻰ اﻟﺘﺤﻮﻳﻞ اﻟﺨﺎص
ﺑﮫﺎ:
واﻵن ﻟﻨﻘﻢ ﺑﺈﺟﺮاء اﻟﻔﻠﺘﺮ ﻣﻨﺨﻔﺾ اﻟﻌﺒﻮر ﻋﻠﯿﮫﺎ ﺑﻀﺮب ﻣﺼﻔﻮﻓﺔ اﻟﺘﺤﻮﻳﻞ ﺑﻤﺼﻔﻮﻓﺔ اﻟﺪاﺋﺮة ،ﺗﺬﻛﺮ اﺳﺘﺨﺪام
ﻣﺆﺛﺮ اﻟﺪوت dotاﻟﻨﻘﻄﺔ )(.اﻟﺘﻲ ﺗﺴﺘﺨﺪم ﻓﻲ اﻟﻤﺎﺗﻼب ﻟﻀﺮب ﻣﺼﻔﻮﻓﺘﯿﻦ ﻋﻨﺼﺮا ﻋﻨﺼﺮا )ﺣﺴﺐ
اﻟﻌﻨﺼﺮ (element-wiseأو اﺳﺘﺨﺪام اﻟﺪاﻟﺔ .times
;>> cfl=cf.*c
;)'>> figure,fftshow(cfl,'log
إذا ظﮫﺮت ﻟﻚ رﺳﺎﻟﺔ ﺧﻄﺄ ﺗﺮﻓﺾ إﺟﺮاء ﻋﻤﻠﯿﺔ اﻟﻀﺮب ; cf.*cﻓﻘﻢ ﺑﺘﻌﺪﻳﻞ ﺣﺠﻢ اﻟﻤﺼﻔﻮﻓﺔ cﺑﺎﻷﻣﺮ:
;)>> c=c(:,1:256
ﻣﻦ اﻟﻀﺮوري اﻵن اﻟﻘﯿﺎم ﺑﻌﻜﺲ اﻟﺘﺤﻮﻳﻞ ﺑﺎﺳﺘﺨﺪام اﻟﺪاﻟﺔ ifft2وذﻟﻚ ﻟﻤﻌﺮﻓﺔ ﺗﺄﺛﯿﺮ اﻟﻔﻠﺘﺮ ﻋﻠﻰ اﻟﺼﻮرة ،وذﻟﻚ
ﺣﺴﺐ اﻟﻜﻮد اﻟﺘﺎﻟﻲ:
;)>> cfli=ifft2(cfl
;)'>> figure,fftshow(cfli,'abs
اﻟﺸﻜﻞ اﻟﺘﺎﻟﻲ ﻳﻮﺿﺢ اﻟﻔﻠﺘﺮ ﺛﻢ ﻋﻜﺴﻪ أي اﻟﺼﻮرة اﻟﻤﻄﺒﻖ ﻋﻠﯿﮫﺎ اﻟﻔﻠﺘﺮ:
ﻻﺣﻆ ان اﻟﻤﺼﻔﻮﻓﺔ cfliاﻟﺘﻲ ﻳﻔﺘﺮض اﻧﮫﺎ ﻣﺼﻔﻮﻓﺔ اﻋﺪاد ﺣﻘﯿﻘﯿﺔ ،إﻻ أﻧﻨﺎ ﻻزﻟﻨﺎ ﻧﺴﺘﺨﺪم اﻟﺪاﻟﺔ اﻟﺘﻲ
ﺻﻤﻤﻨﺎھﺎ ﻣﺴﺒﻘﺎ fftshowﻟﻌﺮﺿﮫﺎ ،وھﺬا ﺑﺴﺒﺐ ﻛﻮن اﻟﺪاﻟﺔ fft2ﻻ ﺗﻘﺪم ﻟﻨﺎ ﻧﺘﺎﺋﺞ ﻋﺪدﻳﺔ ﻛﺎﻣﻠﺔ ،ﻟﻜﻨﮫﺎ ﺗﻘﺪم
ﻧﺘﺎﺋﺞ ﻋﺪدﻳﺔ ﺗﻘﺮﻳﺒﯿﺔ ﺟﺪا .ﻟﮫﺬا ﻧﺴﺘﺨﺪم fftshowﻣﻊ اﻟﻮﺳﯿﻂ ' 'absاﻟﺬي ﻳﻘﻮم ﺑﺘﻘﺮﻳﺐ أي ﺧﻄﺄ ﺣﺼﻞ
ﻟﻠﺘﺤﻮﻳﻞ أو ﻣﻌﻜﻮﺳﻪ.
ﻻﺣﻆ ﻓﻲ اﻟﺼﻮرة اﻟﻨﺎﺗﺠﺔ ﻋﻦ اﻟﻔﻠﺘﺮ وﺟﻮد اﻟﺤﻠﻘﺎت ringingﻋﻠﻰ ﺣﻮاف اﻟﺼﻮرة ،ھﺬا ﻧﺎﺗﺞ ﻋﻦ اﻟﺘﻘﻄﻌﺎت
اﻟﺤﺎﺻﻠﺔ ﻣﻦ اﻟﺪاﺋﺮة ،واﻟﺬي ﻳﻨﺘﻘﻞ إﻟﻰ اﻟﺼﻮرة.
وﺳﻮف ﻧﺘﻮﻗﻊ داﺋﻤﺎ اﻧﻪ ﻛﻠﻤﺎ ﺻﻐﺮت اﻟﺼﻮرة ﻛﻠﻤﺎ زادت اﻟﺘﻠﻄﺨﺎت ﻓﻲ اﻟﺼﻮرة ،وأﻧﻪ ﻛﻠﻤﺎ ﻛﺒﺮت اﻟﺪاﺋﺮة ﻛﻠﻤﺎ
ﻗﻠﺖ اﻟﻠﻄﺨﺎت ،اﻟﺸﻜﻞ اﻟﺘﺎﻟﻲ ﻳﻮﺿﺢ ذﻟﻚ ،ﺑﺎﺳﺘﺨﺪام اﻟﻘﻄﻊ ٥واﻟﻘﻄﻊ ،٣٠ﻻﺣﻆ اﺳﺘﻤﺮار وﺟﻮد اﻟﺤﻠﻘﺎت
ﻣﻊ ﺗﻐﯿﯿﺮ ﻗﯿﻤﺔ اﻟﻘﻄﻊ.
وﻛﻤﺎ ﺣﺼﻞ ﻓﻲ اﻟﻔﻠﺘﺮة اﻟﻤﻨﺨﻔﻀﺔ ﺣﺠﻢ اﻟﺪاﺋﺮة ﺗﺄﺛﺮ ﺑﺎﻟﻤﻌﻠﻮﻣﺎت اﻟﻤﺘﺎﺣﺔ ﻟﻌﻜﺲ اﻟﺘﺤﻮﻳﻞ ،وﻛﺬﻟﻚ ﺑﺎﻟﻨﺴﺒﺔ
ﻟﻠﻨﺘﺎﺋﺞ اﻟﻨﮫﺎﺋﯿﺔ ﻣﻊ اﺧﺘﻼﻓﮫﺎ .اﻟﺸﻜﻞ اﻟﺘﺎﻟﻲ ﻳﻮﺿﺢ ﺗﻄﺒﯿﻖ اﻟﻔﻠﺘﺮ ﻋﺎﻟﻲ اﻟﻌﺒﻮر ﻋﻠﻰ ﻣﺨﺘﻠﻒ ﻗﯿﻢ اﻟﻘﻄﻊ
)ﻗﯿﻤﺔ Dﻓﻲ اﻟﺪاﺋﺮة( ﻓﺈذا ﺗﻢ ﺗﻜﺒﯿﺮ ﺣﺠﻢ اﻟﻘﻄﻊ ﻓﺈن ﻛﺜﯿﺮ ﻣﻦ اﻟﻤﻌﻠﻮﻣﺎت ﻳﺘﻢ ﺣﺬﻓﮫﺎ ﻣﻦ اﻟﺘﺤﻮﻳﻞ ،وﺗﺘﺮك
ﻓﻘﻂ اﻟﺘﺮددات اﻷﻋﻠﻰ ،وھﺬا ﻳﻤﻜﻦ ﻣﻼﺣﻈﺘﻪ ﻓﻲ اﻟﺸﻜﻞ اﻟﺘﺎﻟﯿﻦ ﺣﯿﺚ ﺗﺒﻘﺖ اﻟﺼﻮرة ﻓﻘﻂ ،وﻋﻜﺲ ذﻟﻚ
ﺑﺎﻟﻨﺴﺒﺔ ﻟﻠﻘﻄﻊ cutoffاﻷﻗﻞ .وھﻨﺎك ﺗﻔﺎﺻﯿﻞ ﻋﻠﻰ اﻟﻤﺴﺘﻮى اﻟﺮﻣﺎدي ﻓﻲ اﻟﺼﻮرة اﻟﻨﮫﺎﺋﯿﺔ ﻟﻜﻦ ﺑﺎﻗﻲ
اﻟﺘﺮددات اﻟﻤﻨﺨﻔﻀﺔ ﻗﺮﻳﺒﺔ ﻣﻦ اﻟﺼﻔﺮ.
ﻓﻠﺘﺮ اﻟﺒﺘﺮوورث Butterworth filtering
اﻟﻔﻠﺘﺮة اﻟﻤﺜﺎﻟﯿﺔ اﻟﻤﻮﺿﺤﺔ ﺳﺎﺑﻘﺎ ﺑﻨﻮﻋﯿﮫﺎ ﺗﻘﻮم ﺑﻘﻄﻊ ﺗﺤﻮﻳﻞ ﻓﻮرﻳﻪ ﻋﻨﺪ ﺑﻌﺾ ﻣﺴﺎﻓﺎت ﻣﻦ اﻟﻤﺮﻛﺰ ،وھﺬا
ﺳﮫﻞ ﺟﺪا ﻟﻠﺘﻨﻔﯿﺬ ،ﻛﻤﺎ ﺷﺎھﺪﻧﺎ ﺳﺎﺑﻘﺎ ،ﻟﻜﻦ ﻟﺪﻳﻪ ﺑﻌﺾ اﻟﻌﯿﻮب ﺑﻌﺮض ﺑﻌﺾ اﻟﻌﯿﻮب أو اﻟﺘﺸﻮﻳﺸﺎت ﻏﯿﺮ
اﻟﻤﻄﻠﻮﺑﺔ ِ ،ﻛﺎﻟﺤﻠﻘﺎت اﻟﺘﻲ ﺗﻈﮫﺮ ﻓﻲ اﻟﻨﺘﺎﺋﺞ .وھﻨﺎك ﺧﯿﺎر ﺷﺎﺋﻊ ھﻮ اﺳﺘﺨﺪام ﻓﻼﺗﺮ اﻟﺒﺘﺮوورث.
وﻗﺒﻞ اﻟﺤﺪﻳ ﺚ ﻋﻨﮫﺎ ،ﺳﻮف ﻧﻌﯿﺪ اﻟﻨﻈﺮ إﻟﻰ اﻟﻔﻼﺗﺮ اﻟﻤﺜﺎﻟﯿﺔ ،وﺣﯿﺚ اﻧﮫﺎ ﻣﺘﻨﺎظﺮة ﺷﻌﺎﻋﯿﺎ radially
symmetricﺣﻮل ﻣﺮﻛﺰ اﻟﺘﺤﻮﻳﻞ ،ﻳﻤﻜﻦ وﺻﻔﮫﺎ ﺑﺒﺴﺎطﺔ ﺑﺎﻗﺴﺎﻣﮫﺎ اﻟﻤﺘﻘﺎطﻌﺔ ،وھﺬا ﻳﻌﻨﻲ ،ﻳﻤﻜﻨﻨﺎ وﺻﻒ
اﻟﻔﻠﺘﺮ ﻛﺪاﻟﺔ ﺗﻮﺿﺢ اﻟﻤﺴﺎﻓﺔ ﻋﻦ اﻟﻤﺮﻛﺰ ،ﺑﺎﻟﻨﺴﺒﺔ ﻟﻠﻔﻠﺘﺮ اﻟﻤﺜﺎﻟﻲ ﻣﻨﺨﻔﺾ اﻟﻌﺒﻮر ،ھﺬه اﻟﺪاﻟﺔ ﻳﻤﻜﻦ اﻟﺘﻌﺒﯿﺮ
ﻋﻨﮫﺎ ﺑـ:
ﺣﯿﺚ أن Dھﻲ ﻧﺼﻒ ﻗﻄﺮ اﻟﻘﻄﻊ .وﺑﺎﻟﻨﺴﺒﺔ ﻟﻠﻔﻠﺘﺮ اﻟﻤﺜﺎﻟﻲ ﻋﺎﻟﻲ اﻟﻌﺒﻮر ،ﻓﺈن اﻟﺪاﻟﺔ ﺳﺘﻜﻮن:
ﺣﯿﺚ أﻧﻪ وﻓﻲ اﻟﺤﺎﻟﺘﯿﻦ ﻓﺈن اﻟﻮﺳﯿﻂ nﻳﺴﻤﻰ ﺑﺮﺗﺒﺔ اﻟﻔﻠﺘﺮ ،filter orderوﺣﺠﻢ nﻳﺘﺤﻜﻢ ﺑﺤﺪة sharpness
اﻟﻘﻄﻊ ،ھﺬه اﻟﺪوال ﻣﻮﺿﺤﺔ ﻓﻲ اﻟﺸﻜﻞ اﻟﺘﺎﻟﻲ.
وﻓﯿﻤﺎ ﻳﻠﻲ ﻛﻮد ﺗﻄﺒﯿﻖ اﻟﺒﺘﺮوورث ﻣﻨﺨﻔﺾ اﻟﻤﺮور ﺣﺠﻢ اﻟﻔﻠﺘﺮ،وھﺬه اﻟﺪوال ﺳﮫﻠﺔ اﻟﺘﻨﻔﯿﺬ ﻓﻲ ﺑﯿﺌﺔ اﻟﻤﺎﺗﻼب
:n=2 واﻟﺮﺗﺒﺔD=15 ﻣﻊ،٢٥٦×٢٥٦
>> [x,y]=meshgrid(-128:217,-128:127));
>> bl=1./(1+((x.^2+y.^2)/15).^2);
ﻓﺈﻧﻪ ﺑﺎﻹﻣﻜﺎن ﻛﺘﺎﺑﺔ دوال ﻋﺎﻣﺔ،١ وﻷن ﻓﻠﺘﺮ اﻟﺒﺘﺮوورث ﻋﺎﻟﻲ اﻟﻌﺒﻮر ﻳﻤﻜﻦ أن ﻳﻨﺘﺞ ﺑﻄﺮح ﻣﻨﺨﻔﺾ اﻟﻌﺒﻮر ﻣﻦ
: وداﻟﺔ ﻣﻨﺨﻔﺾ اﻟﻌﺒﻮر ﻣﻮﺿﺤﺔ ﻛﺎﻟﺘﺎﻟﻲ،ﻓﻲ اﻟﻤﺎﺗﻼب ﻟﺘﻄﺒﯿﻖ ﻓﻼﺗﺮ اﻟﺒﺘﺮوورث ﺑﺄﺣﺠﺎم ﻋﺎﻣﺔ
function out=lbutter(im,d,n)
% LBUTTER(IM,D,N) creates a low-pass Butterworth filter
% of the same size as image IM, with cutoff D, and order N
%
% Use:
% x=imread('cameraman.tif');
% l=lbutter(x,25,2);
%
height=size(im,1);
width=size(im,2);
[x,y]=meshgrid(-floor(width/2):floor((width-1)/2),-floor(height/2): ...
floor((height-1)/2));
out=1./(1+(sqrt(2)-1)*((x.^2+y.^2)/d^2).^n);
end;
وﻋﻠﻰ ھﺬا ﻓﺈﻧﻨﺎ ﺳﻮف ﻧﺴﺘﺪﻋﯿﮫﺎ ﻓﻲ اﻟﻜﻮد اﻟﺘﺎﻟﻲ وﻟﻨﻄﺒﻘﮫﺎ ھﻨﺎ ﻋﻠﻰ اﻟﺘﺤﻮﻳﻞ اﻟﻨﺎﺗﺞ ﻣﻦ ﺻﻮرة رﺟﻞ
اﻟﻜﺎﻣﯿﺮ اﻟﺘﻲ ﺧﺰﻧﮫﺎ ﺳﺎﺑﻘﺎ ﻓﻲ اﻟﻤﺘﻐﯿﺮ :c
;)>> bl=lbutter(c,15,1
;>> cfbl=cf.*bl
)'>> figure,fftshow(cfbl,'log
وﻧﺘﯿﺠﺔ ذﻟﻚ ﺗﻈﮫﺮ ﻓﻲ اﻟﺸﻜﻞ اﻟﺘﺎﻟﻲ:
ﻻﺣﻆ ﻋﺪم وﺟﻮد ﻗﻄﻮع ﺣﺎدة ﻓﻲ ھﺬه اﻟﺼﻮرة ، no sharp cutoffوأن اﻟﺠﺰء اﻟﺨﺎرﺟﻲ ﻟﻠﺘﺤﻮﻳﻞ ﻻ ﻳﺴﺎوي
اﻟﺼﻔﺮ ،رﻏﻢ أن ﻳﻌﺘﺒﺮ ﻣﻌﺘﻤﺎ.
وﺗﻨﻔﯿﺬ اﻟﺘﺤﻮﻳﻞ اﻟﻌﻜﺴﻲ وﻋﺮﺿﻪ ﻳﻌﻄﻲ اﻟﺼﻮرة أﻋﻼه ﻳﻤﯿﻦ ،وھﻲ ﺻﻮرة ﻣﻠﻄﺨﺔ ﻟﻜﻦ اﻟﺤﻠﻘﺎت اﻟﺘﻲ
ﺷﺎھ ﺪﻧﺎھﺎ ﺳﺎﺑﻘﺎ ﻏﺎﺋﺒﺔ ﺗﻤﺎﻣﺎ ،ﻗﺎرن ﺑﯿﻦ اﻟﺘﺤﻮﻳﻞ ﺑﻌﺪ ﺗﻄﺒﯿﻖ اﻟﻔﻠﺘﺮ ﺑﺘﺮوورث ﻣﻊ اﻟﺘﺤﻮﻳﻞ اﻻﺻﻠﻲ اﻟﺬي رأﻳﻨﺎه
ﺳﺎﺑﻘﺎ.
ﻳﻘﻮم ھﺬا اﻟﻔﻠﺘﺮ ﺑﻄﺮد اﻟﻘﯿﻢ ﺑﻌﯿﺪا ﻋﻦ اﻟﻤﺮﻛﺰ ،ﺣﺘﻰ ﻟﻮ ﻟﻢ ﺗﺼﺒﺢ ﺻﻔﺮﻳﺔ ﺑﺸﻜﻞ ﻏﯿﺮ ﻣﺘﻮﻗﻊ ،وﻛﻤﺎ ﻗﻤﻨﺎ
ﺑﺘﻄﺒﯿﻖ اﻟﻔﻠﺘﺮ ﻣﻨﺨﻔﺾ اﻟﻌﺒﻮر ﻓﺴﻮف ﻧﻘ ﻮم ﺑﺎﻟﻔﻠﺘﺮ ﻋﺎﻟﻲ اﻟﻌﺒﻮر ،أوﻻ ﺑﺈﻧﺸﺎء اﻟﻔﻠﺘﺮ ﻓﻲ اﻟﺪاﻟﺔ اﻟﺘﺎﻟﯿﺔ ،ﺛﻢ
ﺗﻄﺒﯿﻖ اﻟﺪاﻟﺔ ﻋﻠﻰ ﺗﺤﻮل اﻟﺼﻮرة.
اﻟﺪاﻟﺔ hbutter
)function out=hbutter(im,d,n
% HBUTTER(IM,D,N) creates a high-pass Butterworth filter
% of the same size as image IM, with cutoff D, and order N
%%
Use:
;)'% x=imread('cameraman.tif
;)% l=hbutter(x,25,2
%
;)out=1-lbutter(im,d,n
اﺳﺘﺪﻋﺎء اﻟﺪاﻟﺔ:
;)>> bh=hbutter(cm,15,1
;>> cfbh=cf.*bh
)'>> figure,fftshow(cfbh,'log
ﺛﻢ اﻟﻌﻜﺲ وﻋﺮض اﻟﻨﺘﺎﺋﺞ:
;)>> cfbhi=ifft2(cfbh
)'>> figure,fftshow(cfbhi,'abs
اﻟﺼﻮر ﻣﻮﺿﺤﺔ ﺑﺎﻟﺸﻜﻞ اﻟﺘﺎﻟﻲ:
ﻓﻠﺘﺮ ﺟﺎوﺳﯿﺎن Gaussian filtering
ﻟﻘﺪ طﺒﻘﻨﺎ ﻓﻠﺘﺮ ﺟﺎوﺳﯿﺎن ﻓﻲ اﻟﻔﺼﻞ اﻟﺜﺎﻟﺚ ،ورأﻳﻨﺎ ﻛﯿﻒ اﻧﻪ ﻳﻤﻜﻦ ان ﻳﺴﺘﺨﺪم ﻟﻠﻔﻠﺘﺮة ﻣﻨﺨﻔﻀﺔ اﻟﻌﺒﻮر ،ﻣﻊ
أﻧﻪ ﻣﻦ اﻟﻤﻤﻜﻦ أن ﻳﺴﺘﺨﺪم ﻓﻲ اﻟﻨﻄﺎﻗﺎت اﻟﻤﺘﻜﺮرة ،frequency domainﻛﻤﺎ ھﻮ اﻟﺤﺎل ﻣﻊ اﻟﻔﻠﺘﺮات
اﻟﻤﺜﺎﻟﯿﺔ وﻓﻠﺘﺮات ﺑﺘﺮوورث ،واﻟﺘﻨﻔﯿﺬ ﺳﯿﻜﻮن ﺳﮫﻼ :ﻗﻢ ﺑﺈﻧﺸﺎء ﻓﻠﺘﺮ ﺟﺎوﺳﯿﺎن ،ﻗﻢ ﺑﻀﺮﺑﻪ ﻣﻊ ﺗﺤﻮﻳﻞ اﻟﺼﻮرة،
ﺛﻢ ﻗﻢ ﺑﻌﻜﺲ اﻟﻨﺘﺎﺋﺞ ،طﺎﻟﻤﺎ ﻛﺎن ﻓﻠﺘﺮ ﺟﺎوﺳﯿﺎن ﻳﻤﻠﻚ ﺗﻠﻚ اﻟﻤﯿﺰة اﻟﺮﻳﺎﺿﯿﺔ اﻟﻤﮫﻤﺔ وھﻲ ﺗﺤﻮﻳﻞ ﻓﻮرﻳﯿﻪ
ﻟﻔﻠﺘﺮ ﺟﺎوﺳﯿﺎن ﻳﻨﺘﺞ ﻋﻨﮫﺎ ﻓﻠﺘﺮ ﺟﺎوﺳﯿﺎن آﺧﺮ ،ﻓﺴﻮف ﻧﺤﺼﻞ ﻋﻠﻰ ﻧﻔﺲ ﻧﺘﺎﺋﺞ ﻓﻠﺘﺮ ﺟﺎوﺳﯿﺎن اﻟﻔﺮاﻏﻲ
اﻟﺨﻄﻲ .linear Gaussian spatial filter
وﻳﻌﺘﺒﺮ ﻓﻠﺘﺮ ﺟﺎوﺳﯿﺎن اﻛﺜﺮ اﻟﻔﻼﺗﺮ اﻟﺘﻲ درﺳﻨﺎھﺎ ﻧﻌﻮﻣﺔ ،smoothواﻟﻔﻼﺗﺮ اﻟﻤﺜﺎﻟﯿﺔ ھﻲ اﻷﻗﻞ ﻧﻌﻮﻣﺔ ،وﻳﺼﻨﻒ
ﻓﻠﺘﺮ ﺑﺘﺮوورث ﻓﻲ اﻟﻮﺳﻂ.
ﻧﺴﺘﻄﯿﻊ إﻧﺸﺎء ﻓﻠﺘﺮ ﺟﺎوﺳﯿﺎن ﺑﺎﺳﺘﺨﺪام اﻟﺪاﻟﺔ fspecialوﺗﻄﺒﯿﻘﮫﺎ ﻋﻠﻰ اﻟﺘﺤﻮﻳﻞ اﻟﺨﺎص ﺑﻨﺎ:
;))>> g1=mat2gray(fspecial('gaussian',256,10
;>> cg1=cf.*g1
)'>> fftshow(cg1,'log
;))>> g2=mat2gray(fspecial('gaussian',256,30
;>> cg2=cf.*g2
;)'>> figure,fftshow(cg2,'log
ﻻﺣﻆ اﺳﺘﺨﺪام اﻟﺪاﻟﺔ mat2grayﻣﻦ اﺟﻞ اﻟﺘﺤﻮﻳﻞ ،وﻛﺬﻟﻚ اﺳﺘﺨﺪام اﻟﺒﺎراﻣﯿﺘﺮ 10ﻛﻮﺳﯿﻂ ﺛﺎﻟﺚ ﻟﻠﺪاﻟﺔ
،fspecialواﻟﺬي ﻳﺴﻤﻰ ﺑﺎﻟﻤﻌﺎﻣﻞ ﺳﯿﺠﻤﺎ ،وﻟﻪ ﻋﺪة ﻓﻮاﺋﺪ.
;)>> g=fspecial('gaussian',256,10
>> format long, max(g(:)), format
= ans
0.00158757552679
ﻻﺣﻆ اﻟﻘﯿﻤﺔ اﻟﻌﻈﻤﻰ اﻟﺘﻲ ﺣﺼﻠﻨﺎ ﻋﻠﯿﮫﺎ ﻣﻦ اﻟﻔﻠﺘﺮ ﺟﻮﺳﯿﺎن ﺣﯿﺚ ﻳﻘﻮم ﺑﺘﻮﻟﯿﺪه ﻟﻠﺤﺼﻮل ﻋﻠﻰ ﻓﻠﺘﺮ اﻟﻌﺒﻮر
اﻟﻤﻨﺨﻔﺾ ،وﻗﺪ اﺳﺘﺨﺪﻣﻨﺎ داﻟﺔ اﻟﺘﺤﻮﻳﻞ mat2grayﻟﻜﻲ ﻻ ﻧﻀﻄﺮ ﻟﺘﻜﺒﯿﺮ اﻟﻤﻌﺎﻣﻞ ﺳﯿﺠﻤﺎ ،ﺣﯿﺚ ﺣﺼﻠﻨﺎ اﻵن
ﻋﻠﻰ اﻗﺮب ﻗﯿﻤﺔ ﻟﻠﻮاﺣﺪ ﻳﻤﻜﻦ اﻟﺤﺼﻮل ﻋﻠﯿﮫﺎ ﺗﻠﻘﺎﺋﯿﺎ.
ﻧﺘﯿﺠﺔ اﻟﺘﺤﻮﻳﻞ اﻟﺴﺎﺑﻖ ﻧﺠﺪھﺎ ﻓﻲ اﻟﺸﻜﻞ اﻟﺘﺎﻟﻲ ،ﻻﺣﻆ اﻟﻔﺎرق ﺑﯿﻦ ﻧﺘﯿﺠﺘﻲ اﻟﻔﻠﺘﺮ ﺣﺴﺐ ﻗﯿﻤﺔ ﺳﯿﺠﻤﺎ:.
واﻟﺼﻮر اﻟﻨﺎﺗﺠﺔ ﺗﻢ اﻟﺤﺼﻮل ﻋﻠﯿﮫﺎ ﺑﺎﺳﺘﺨﺪام اﻷواﻣﺮ اﻟﺴﺎﺑﻘﺔ ﻟﻌﻜﺲ اﻟﺘﺤﻮﻳﻞ ﻧﻔﺴﮫﺎ:
>> ;)cgi1=ifft2(cg1
>> ;)cgi2=ifft2(cg2
>> ;)'fftshow(cgi1,'abs
>> ;)'fftshow(cgi2,'abs
وﻧﺘﺎﺋﺞ ھﺬه اﻟﻜﻮد ھﻲ اﻟﻤﻮﺿﺤﺔ أﻋﻼه.
وﻧﺴﺘﻄﯿﻊ اﻟﺤﺼﻮل ﻋﻠﻰ اﻟﻔﻠﺘﺮ ﻋﺎﻟﻲ اﻟﻌﺒﻮر ﻋﺒﺮ ﻓﻠﺘﺮ ﺟﺎوﺳﯿﺎن ﺑﻄﺮح اﻟﻔﻠﺘﺮ اﻟﻤﻨﺨﻔﺾ اﻟﻨﺎﺗﺞ ﻣﻦ اﻟﻌﺪد
اﻟﺼﺤﯿﺢ ،١ﺛﻢ ﻧﻘﻮم ﺑﺘﻄﺒﯿﻘﻪ ﻣﺒﺎﺷﺮة ﺛﻢ ﻋﻜﺴﻪ ﻹظﮫﺎر اﻟﻨﺘﺎﺋﺞ ﻛﻤﺎ ﻳﻠﻲ:
>> ;h1=1-g1
>> ;h2=1-g2
>> ;ch1=cf.*h1
>> ;ch2=cf.*h2
>> ;)ch1i=ifft2(ch1
>> ;)chi1=ifft2(ch1
>> ;)chi2=ifft2(ch2
>> ;)'fftshow(chi1,'abs
>> ;)'figure,fftshow(chi2,'abs
واﻟﺸﻜﻞ اﻟﺘﺎﻟﻲ ﻳﻮﺿﺢ ﻧﺘﺎﺋﺞ ﻓﻠﺘﺮ ﺟﺎوﺳﯿﺎن ﻋﺎﻟﻲ اﻟﻌﺒﻮر ﻋﻠﻰ ﻧﻔﺲ اﻟﺼﻮرة:
ﻣﺪﺧﻞ إﻟﻰ ﻣﻌﺎﻟﺠﺔ اﻟﺼﻮر ﻣﻊ اﻟﻤﺎﺗﻼب ـ ﺗﺮﺟﻤﺔ ﻓﮫﺪ أل ﻗﺎﺳﻢ [email protected]
اﻟﻤﺤﺘﻮى:
-اﺳﺘﻌﺎدة اﻟﺼﻮرة Image Restoration
-ﺗﻘﺴﯿﻢ اﻟﺼﻮرة image segmentation
-ﻣﻌﺎﻟﺠﺔ اﻟﺼﻮر اﻟﻤﻠﻮﻧﺔ color image processing
اﺳﺘﻌﺎدة اﻟﺼﻮرة Image Restoration
ﻳﮫﺘﻢ اﺳﺘﻌﺎدة اﻟﺼﻮرة ﺑﺎزاﻟﺔ وﺗﻘﻠﯿﻞ اﻟﺘﺂﻛﻼت واﻟﺘﺸﻮھﺎت image degradationاﻟﺘﻲ ﺗﻠﺤﻖ ﺑﺎﻟﺼﻮرة أﺛﻨﺎء
اﻟﺤﺼﻮل ﻋﻠﯿﮫﺎ .image acquisitionوﻣﻦ ھﺬه اﻟﺘﺂﻛﻼت:
.١اﻟﺘﺸﻮھﺎت أو اﻟﺘﺸﻮﻳﺸﺎت .image noise
.٢اﻟﺘﻤﻮﻳﻪ اﻟﻠﻄﺦ .image bluring
اﻟﺘﺸﻮﺷﺎت ھﻲ اﺧﻄﺎء ﺗﺤﺪث ﻓﻲ ﻗﯿﻢ اﻟﺒﻜﺴﻼت pixel valuesﻣﺤﺪﺛﺔ ﺗﺸﻮھﺎت ﻓﻲ اﺷﺎرات اﻟﺼﻮرة
،image signalsﺑﺴﺒﺐ ﻋﻮاﻣﻞ ﺧﺎرﺟﯿﺔ.
وﻣﻦ اﻟﺘﺸﻮﻳﺸﺎت اﻟﺸﮫﯿﺮة:
.١ﺗﺸﻮﻳﺶ اﻟﻤﻠﺢ واﻟﻔﻠﻔﻞ
.٢ﺗﺸﻮﻳﺶ اﻟﺒﻘﻊ.
.٣ﺗﺸﻮﻳﺶ ﺟﺎوﺳﯿﺎن.
.٤اﻟﺘﺸﻮﻳﺶ اﻟﺪوري.
وﻳﻤﻜﻦ ﻣﺤﺎﻛﺎت اﻻﻧﻮاع اﻟﺜﻼﺛﺔ اﻻوﻟﻰ ﻓﻲ ﺑﯿﺌﺔ اﻟﻤﺎﺗﻼب ﺑﺎﺳﺘﺨﺪام اﻟﺪاﻟﺔ imnoiseاﻟﺘﻲ ﺗﻮﻟﺪ ﺗﺸﻮﺷﺎ
ﻟﻠﺼﻮرة ﻛﻤﺎ ﻓﻲ اﻟﻤﺜﺎل اﻟﺘﺎﻟﻲ:
;)'t=imread('cameraman.tif
ﺗﺸﻮش اﻟﻤﻠﺢ واﻟﻔﻠﻔﻞ:
;)'tsp=imnoise(t,'salt & pepper
ﺗﺸﻮش اﻟﺒﻘﻊ:
;)'tsk=imnoise(t,'speckle
ﺗﺸﻮش ﺟﺎوﺳﯿﺎن:
;)'tga=imnoise(t,'gaussian
ﻗﻢ ﺑﺘﻄﺒﯿﻖ اﻻﻣﺜﻠﺔ اﻟﺜﻼﺛﺔ اﻋﻼه ﻋﻠﻰ اﻛﺜﺮ ﻣﻦ ﺻﻮرة ﻟﻤﻌﺮﻓﺔ ﺷﻜﻞ اﻟﺘﺸﻮش.
أﻣﺎ اﻟﺘﺸﻮش اﻟﺪوري ﻓﮫﻮ ﺗﺸﻮش ﻣﻨﺘﻈﻢ ﻳﻤﻜﻦ اﻓﺘﻌﺎﻟﻪ ﺑﺎﺳﺘﺨﺪام داﻟﺔ دورﻳﺔ ﻣﺜﻞ داﻟﺔ اﻟﺠﯿﺐ ﻛﻤﺎ ﻳﻠﻲ:
;)>> s=size(t
;))>> [x,y]=meshgrid(1:s(1),1:s(2
;>> p=sin(x/3+y/5)+1
;>> t_pn=(im2double(t)+p/2)/2
ﻛﯿﻔﯿﺔ اﻟﺘﺨﻠﺺ ﻣﻦ اﻟﺘﺸﻮش :noise removal
اﻟﺘﺸﻮﺷﺎت اﻟﺜﻼﺛﺔ اﻷوﻟﻰ ﻳﺘﻢ ﻣﻌﺎﻟﺠﺘﮫﺎ ﺑﺎﺳﺘﺨﺪام اﻟﻔﻼﺗﺮ اﻟﺤﯿﺰﻳﺔ spatial fitlerاﻣﺎ اﻟﺘﺸﻮﺷﺎت اﻟﺪورﻳﺔ
ﻓﯿﺘﻢ ﻣﻌﺎﻟﺠﺘﮫﺎ ﺑﺎﺳﺘﺨﺪام ﻓﻼﺗﺮ اﻟﻨﻄﺎق اﻟﻤﺘﻜﺮر .frequency domain filtering
إزاﻟﺔ ﺗﺸﻮش )اﻟﻤﻠﺢ واﻟﻔﻠﻔﻞ (salt & pepper
ﻛﻤﺎ ﻻ ﺑﺪ اﻧﻚ ﻻﺣﻈﺖ ﻓﻲ ﺗﻄﺒﯿﻖ ﻣﺜﺎل ﻣﺤﺎﻛﺎة ھﺬا اﻟﺘﺸﻮش ﻓﺈﻧﻪ ﻳﻨﺘﺞ ﻟﻨﺎ ﻧﻘﺎطﺎ او ﻣﻜﻮﻧﺎت ﻋﺎﻟﯿﺔ اﻟﺘﺮدد
ﻓﻲ اﻟﺼﻮرة ﻣﻤﺎ ﻳﻌﻨﻲ أﻧﻨﺎ ﻧﺴﺘﺨﺪم ﻹزاﻟﺘﻪ ﻓﻠﺘﺮا ﻣﻨﺨﻔﺾ اﻟﻌﺒﻮر .LPF
وﻋﻠﻰ ھﺬا ﻳﻤﻜﻨﻨﺎ ﺗﺠﺮﺑﺔ اﻟﻔﻠﺘﺮ اﻟﻤﻨﺨﻔﺾ اﻟﻤﻌﺮوف : average
;)'>> a3=fspecial('average
;)>> t_sp_a3=filter2(a3,t_sp
ﻛﻤﺎ أﻧﻪ ﺑﺎﻹﻣﻜﺎن ﺗﺠﺮﺑﺔ اﻟﻔﻠﺘﺮ ﻏﯿﺮ اﻟﺨﻄﻲ medfilt2ﻣﺒﺎﺷﺮة:
;)>> t_sp_m3=medfilt2(t_sp
ﻳﻘﻮم ھﺬا اﻟﻔﻠﺘﺮ ﺑﺄﺧﺬ اﻟﻘﯿﻤﺔ اﻟﻤﺘﻮﺳﻄﺔ ﻣﻦ ﺟﻮار ﻛﻞ ﻧﻘﻄﺔ وھﻮ اﻓﻀﻞ اداء ﻣﻦ ﻓﻠﺘﺮ اﻟﻘﯿﻤﺔ اﻟﻌﻈﻤﻲ وﻓﻠﺘﺮ
اﻟﻘﯿﻤﺔ اﻟﻮﺳﻄﻰ اﻟﻤﺴﺘﺨﺪﻣﺔ ﺳﺎﺑﻘﺎ.
إزاﻟﺔ ﺗﺸﻮش )ﺟﺎوﺳﯿﺎن (Gaussian
اﺣﺪ أﺷﮫﺮ اﻟﺘﺸﻮﺷﺎت اﻟﺸﺎﺋﻌﺔ وھﻮ ﻳﺸﺒﻪ اﻟﺘﺸﻮش اﻟﻨﺎﺗﺞ ﻋﻦ اﻟﺘﻠﻔﺎز ﻋﻨﺪﻣﺎ ﻻ ﻳﻠﺘﻘﻂ اﻟﺒﺚ اﻟﺘﻠﻔﺰﻳﻮﻧﻲ،
وﻓﻜﺮة ازاﻟﺘﻪ ﺗﻜﻤﻦ ﻓﻲ ﺟﻤﻊ ﻣﺼﻔﻮﻓﺎت ﻋﺪة ﺻﻮرة ﻣﺘﺸﺎﺑﮫﺔ ﺑﮫﺎ ﻧﻔﺲ اﻟﺘﺸﻮش ﺛﻢ اﺧﺬ اﻟﻤﺘﻮﺳﻂ اﻟﺬي
ﻳﻔﺘﺮض ان ﻳﻜﻮن اﻓﻀﻞ ﺻﻮرة.
اﻟﻜﻮد اﻟﺘﺎﻟﻲ ﻳﻮﻟﺪ ﻋﺸﺮة ﺻﻮر ﻣﺸﻮﺷﺔ ﺑﺠﺎوﺳﯿﺎن ﻟﻜﻲ ﻧﻘﻮم ﺑﻌﺪ ذﻟﻚ ﺑﺎزاﻟﺔ اﻟﺘﺸﻮش ،ﻻﺣﻆ اﻧﻨﺎ ﻻزﻟﻨﺎ
ﻧﺴﺘﺨﺪم اﻟﺼﻮرة أﻋﻼه وﻳﻤﻜﻨﻨﺎ ﻓﻲ اﻟﻤﻌﻤﻞ ﺗﺠﺮﺑﺔ ﺻﻮر ﻣﺨﺘﻠﻔﺔ:
;)>> s=size(t
;)>> t_ga10=zeros(s(1),s(2),10
>> for i=1:10
;)'t_ga10(:,:,i)=imnoise(t,'gaussian
;end
واﻵن ﻟﻨﻘﻢ ﺑﻤﻌﺎﻟﺠﺔ اﻟﻤﺼﻔﻮﻓﺔ اﻟﺘﻲ ﺗﺤﺘﻮي ﻋﻠﻰ ﻋﺸﺮة ﺻﻮرة ﻣﺘﺸﺎﺑﮫﺔ ﺑﮫﺎ ﻧﻔﺲ اﻟﺘﺸﻮش ﻛﺎﻟﺘﺎﻟﻲ:
;)>> t_ga10_av=mean(t_ga10,3
اﻟﺮﻗﻢ ﺛﻼﺛﺔ ﻓﻲ اﻟﺪاﻟﺔ meanﻳﺸﯿﺮ إﻟﻰ ان اﻟﻤﺼﻔﻮﻓﺔ ﺛﻼﺛﯿﺔ اﻟﺒﻌﺪ واﻧﻨﺎ ﻧﺮﻏﺐ ﻓﻲ اﻟﺤﻔﺎظ ﻋﻠﻰ اﻟﻘﯿﻤﺔ
اﻟﺜﺎﻟﺜﺔ ﻟﮫﺎ ﺑﺪون اﺧﺬ اﻟﻤﺘﻮﺳﻂ:
واﻵن ﻣﺎذا ﻟﻮ اﺧﺬﻧﺎ اﻟﺮﻗﻢ ١٠٠ﺑﺪﻻ ﻣﻦ ١٠اﻻ ﻳﻔﺘﺮض ان ﺗﻜﻮن اﻟﻨﺘﯿﺠﺔ اﻓﻀﻞ :ﺟﺮب ذﻟﻚ.
اﻟﻔﺘﺮ اﻟﺘﻜﯿﻔﻲ adaptive filter
ھﻮ ﻓﻠﺘﺮ ﻳﻘﻮم ﺑﺘﻜﯿﯿﻒ ﻧﻔﺴﻪ ﺣﺴﺐ اﻟﺼﻮرة ﻧﻔﺴﮫﺎ ﺑﻤﻌﻨﻰ ان داﻟﺔ اﻟﻘﻨﺎع ﻳﺘﻢ ﺗﻮﻟﯿﺪھﺎ ﻣﻦ اﻟﺼﻮرة اﻟﺘﻲ
ﻳﻄﺒﻖ ﻋﻠﯿﮫﺎ ،وﻣﻦ اﻣﺜﻠﺔ ذﻟﻚ ﻓﻠﺘﺮ واﻳﻨﺮ اﻟﺬي ﻳﺴﺘﺨﺪم ﻓﻲ ازاﻟﺔ ﺗﺸﻮش ﺟﺎوﺳﯿﺎن.
اﺳﺘﺨﺪام ﻓﻠﺘﺮ واﻳﻨﺮ wienerﻛﻤﺜﺎل ﻋﻠﻰ ﻓﻠﺘﺮ ﺗﻜﯿﻔﻲ ﻻزاﻟﺔ ﺗﺸﻮش ﺟﺎوﺳﯿﺎن:
ﻧﺴﺘﺨﺪم اﻟﺪاﻟﺔ wiener2ﻟﺘﻮﻟﯿﺪ ﻓﻠﺘﺮ وﻳﻨﺮ وﺗﻄﺒﯿﻘﻪ ﺑﻨﻔﺲ اﻟﻮﻗﺖ.
;)>> t2=imnoise(t,'gaussian',0,0.005
)>> imshow(t2
;)]>> t2w=wiener2(t2,[7,7
)>> figure,imshow(t2w
ﻣﻌﺎﻟﺠﺔ اﻟﺘﺸﻮش اﻟﺪوري periodic noise removal
اﻟﺼﻮرة اﻟﻤﺸﻮﺷﺔ اﻋﻼه ﺑﺎﻟﺘﺸﻮش اﻟﺪوري periodic noiseﻳﻤﻜﻦ ﻣﻌﺎﻟﺠﺘﮫﺎ ﺑﺎﺳﺘﺨﺪام اﻟﻨﻄﺎﻗﺎت اﻟﺘﻜﺮارﻳﺔ
أي ﺗﺤﻮﻳﻞ ﻓﻮرﻳﯿﻪ ،وﻛﻤﺎ اوﺿﺤﻨﺎ اﻋﻼه ﻓﺈن اﻟﺘﺸﻮش اﻟﺪوري ﻳﺘﻢ ﻣﺤﺎﻛﺎﺗﻪ ﺑﺎﺳﺘﺨﺪام اﻟﺪاﻟﺔ اﻟﺠﯿﺒﯿﺔ اﻣﺎ ﻓﻲ
اﻟﻮاﻗﻊ ﻓﮫﻮ ﻳﺤﺪث ﺑﺴﺒﺐ أي ﺧﻠﻞ اﻟﻜﺘﺮوﻧﻲ ﻓﻲ اﺟﮫﺰة اﻟﺘﻘﺎط اﻟﺼﻮرة او ﻣﺴﺤﮫﺎ او ﺗﺨﺰﻳﻨﮫﺎ ،وﻳﻤﻜﻦ ﺗﻮﻟﯿﺪ
اﻟﺘﺸﻮش اﻟﺪوري ﻛﺎﻟﺘﺎﻟﻲ ﻋﻠﻰ اﻓﺘﺮض ﻟﺪﻳﻨﺎ اﻟﺼﻮرة tاﻋﻼه او أي ﺻﻮرة اﺧﺮى:
;)>> [x,y]=meshgrid(1:256,1:256
;)>> p=1+sin(x+y/1.5
;>> tp=(double(t)/128+p)/4
وﻳﺘﻢ ﻗﺒﻞ ﻣﻌﺎﻟﺠﺔ اﻟﺼﻮرة tpاﻟﻤﺸﻮﺷﺔ دورﻳﺎ ﺗﺤﻮﻳﻠﮫﺎ ﺗﺤﻮﻳﻞ ﻓﻮرﻳﯿﻪ:
;)>>tf = fftshift( fft2 (t_pn
ﻧﻘﻮم اﻵن ﺑﺘﻮﻟﯿﺪ ﻓﻠﺘﺮ ﻳﺴﻤﻰ ﺑﻔﻠﺘﺮ رﻓﺾ اﻟﺤﺰﻣﺔ band reject filteringﺣﯿﺚ ﻳﺘﻜﻮن ھﺬا اﻟﻔﻠﺘﺮ ﻣﻦ ﻣﺼﻔﻮﻓﺔ
واﺣﺪات ﺗﻮﺟﺪ ﻓﯿﮫﺎ ﺣﻠﻘﺔ اﺻﻔﺎر ﺑﺎﻟﻤﺮﻛﺰ ﻧﺘﺤﻜﻢ ﻧﺤﻦ ﺑﻘﻄﺮ ھﺬه اﻟﺪاﺋﺮة وﻟﯿﻜﻦ ھﻨﺎ .٤٩
;)>> z=sqrt((x-129).^2+(y-129).^2
;)>> br=(z<47 | z>=51
وﻟﻨﻘﻮم ﺑﺎﻟﻤﻌﺎﻟﺠﺔ اﻵن:
;>> tbr=tf.*br
ﺛﻢ ﻟﻨﻘﻮم ﺑﻌﻜﺲ ﻧﺎﺗﺞ اﻟﺘﺤﻮﻳﻞ وﻟﻨﺮاﻗﺐ اﻟﻨﺘﯿﺠﺔ.
ھﻨﺎك ﺑﺎﻟﻄﺒﻊ ﻋﺪة طﺮق ﻣﺨﺘﻠﻔﺔ وﻣﻄﻮﻟﺔ ﻟﻤﻌﺎﻟﺠﺔ اﻟﺘﺸﻮش اﻟﺪوري اﻟﺬي ﻳﻌﺘﺒﺮ ﻣﻦ اھﻢ اﻟﻤﻮاﺿﯿﻊ ﻓﻲ
ﻣﻌﺎﻟﺠﺔ اﻟﺼﻮر ﻟﻜﻨﻨﺎ ﻧﻜﺘﻔﻲ ﺑﮫﺬا اﻟﻤﺜﺎل ﻛﻨﻤﻮذج ﻧﻈﺮا ﻟﻀﯿﻖ اﻟﻮﻗﺖ.
وھﻨﺎك داﻟﺔ ﺟﺎھﺰة ﺗﺤﺎول اﻛﺘﺸﺎف اﻟﻘﯿﻤﺔ اﻟﮫﺪف )اﻟﻌﺘﺒﺔ( ﺑﺎﺳﺘﺨﺪام طﺮق رﻳﺎﺿﯿﺔ اﺣﺼﺎﺋﯿﺔ ھﺬه اﻟﺪاﻟﺔ
ھﻲ:
;)thr=graythresh(t
ﺣﯿﺚ tھﻲ اﻟﺼﻮرة اﻟﻤﻄﻠﻮﺑﺔ.
ھﺬه اﻟﺪاﻟﺔ ﺗﻨﻔﺬ اﻓﺘﺮاﺿﯿﺎ ﻓﻲ اﻟﺪاﻟﺔ im2bwﻻﺣﺘﺴﺎب ﻗﯿﻤﺔ اﻟﻤ ُﻌﺎﻣﻞ ،levelﻟﮫﺬا ﻧﻜﺘﻔﻲ ﻋﺎدة ﺑﻜﺘﺎﺑﺔ:
;)Bw= im2bw (t
أو:
;))Bw= im2bw (t,graythresh(t
وﻷﻧﻨﺎ ﻧﺘﻌﺎﻣﻞ ﺣﺴﺎﺑﯿﺎ ﻓﻲ اﻟﻤﺎﺗﻼب داﺋﻤﺎ ﻣﻊ ﻗﯿﻤﺔ ﺣﻘﯿﻘﯿﺔ doubleﻓﺈن ﻗﯿﻤﺔ اﻟﺜﺮﻳﺸﻮﻟﺪ ﺗﻜﻮن ) 1 > T > 0
( ،وﻳﻤﻜﻦ ﺗﺤﻮﻳﻠﮫﺎ إﻟﻰ اﻟﻨﻄﺎق ] [0,255ﺑﻀﺮﺑﮫﺎ ﻓﻲ .٢٥٥
اﻟﺜﺮﻳﺸﻮﻟﺪ اﻟﻤﺰدوج :
اﺣﯿﺎﻧﺎ ﻧﺤﺘﺎج إﻟﻰ وﺿﻊ ﻗﯿﻤﺘﻲ ھﺪف ﻟﻠﺼﻮرة ﻟﺘﺤﻮﻳﻠﮫﺎ إﻟﻰ اﻟﻨﻈﺎم اﻟﺜﻨﺎﺋﻲ ﻧﺴﺘﺨﺪم ﻋﻨﺪﺋﺬ T1و T2ﺑﺤﯿﺚ
ﺗﺘﺤﻘﻖ اﻟﺼﯿﻐﺔ:
=====================
اﻟﻤﺤﺘﻮى:
اﻟﻔﺼﻞ اﻟﺜﺎﻧﻲ ﻣﻌﺎﻟﺠﺔ اﻟﻨﻘﻄﺔ ..
اﻟﻔﺼﻞ اﻟﺜﺎﻟﺚ :ﻣﻌﺎﻟﺠﺔ اﻟﺠﻮار ..
اﻟﻔﺼﻞ اﻟﺮاﺑﻊ :ﺗﺤﻮﻳﻞ ﻓﻮرﻳﯿﻪ...
ﻣﻠﺨﺺ ﻟﻠﻔﺼﻮل ٥و٦و٧و :١٠اﺳﺘﻌﺎدة اﻟﺼﻮر اﻟﺘﻘﺴﯿﻢ وﻣﻌﺎﻟﺠﺔ اﻟﺼﻮر اﻟﻤﻠﻮﻧﺔ..