You are on page 1of 56

‫ﺗﻢ ﺗﺤﻤﻴﻞ اﻟﻤﻠﻒ ﻣﻦ ﻣﻮﻗﻊ‬

‫اﻟﺒﻮﺻﻠﺔ اﻟﺘﻘﻨﻴﺔ‬
‫‪www.boosla.com‬‬
‫ﻣﺪﺧﻞ إﻟﻰ ﻣﻌﺎﻟﺠﺔ اﻟﺼﻮر ﻣﻊ اﻟﻤﺎﺗﻼب ـ ﺗﺮﺟﻤﺔ ﻓﮫﺪ أل ﻗﺎﺳﻢ ‪fhdalqasem@yahoo.com‬‬

‫اﻟﻤﺤﺘﻮى‪:‬‬
‫اﻟﻔﺼﻞ اﻟﺜﺎﻧﻲ ﻣﻌﺎﻟﺠﺔ اﻟﻨﻘﻄﺔ ‪..‬‬
‫اﻟﻔﺼﻞ اﻟﺜﺎﻟﺚ‪ :‬ﻣﻌﺎﻟﺠﺔ اﻟﺠﻮار ‪..‬‬
‫اﻟﻔﺼﻞ اﻟﺮاﺑﻊ‪ :‬ﺗﺤﻮﻳﻞ ﻓﻮرﻳﯿﻪ‪...‬‬
‫ﻣﻠﺨﺺ ﻟﻠﻔﺼﻮل ‪٥‬و‪٦‬و‪٧‬و‪ :١٠‬اﺳﺘﻌﺎدة اﻟﺼﻮر اﻟﺘﻘﺴﯿﻢ وﻣﻌﺎﻟﺠﺔ اﻟﺼﻮر اﻟﻤﻠﻮﻧﺔ‪..‬‬

‫اﻟﻔﺼﻞ اﻟﺜﺎﻧﻲ ﻣﻌﺎﻟﺠﺔ اﻟﻨﻘﻄﺔ ‪Point Processing‬‬


‫ﻣﻘﺪﻣﺔ ‪Introduction‬‬
‫إن ﻋﻤﻠﯿﺎت ﻣﻌﺎﻟﺠﺔ اﻟﺼﻮر ﺗﻘﻮم ﺑﺘﺤﻮﻳﻞ ﻗﯿﻢ اﻟﻤﺴﺘﻮى اﻟﺮﻣﺎدي ﻟﻜﻞ ﺑﻜﺴﻞ )ﻋﻨﺼﺮ اﻟﺼﻮرة(‪ ،‬وھﺬه اﻟﻌﻤﻠﯿﺎت‬
‫ﻋﻠﻰ ﻣﻌﺎﻟﺠﺔ اﻟﺼﻮرة ﺗﺼﻨﻒ إﻟﻰ ﺛﻼﺛﺔ ﺗﺼﻨﯿﻔﺎت اﻋﺘﻤﺎدا ﻋﻠﻰ اﻟﻤﻌﻠﻮﻣﺎت اﻟﻤﻄﻠﻮﺑﺔ ﻻﻧﺠﺎز ﻋﻤﻠﯿﺔ اﻟﺘﺤﻮﻳﻞ‬
‫‪ transformation‬ﺗﻠﻚ‪ ،‬وھﺬه اﻟﺘﺼﻨﯿﻔﺎت ﻣﻦ اﻷﻛﺜﺮ ﺗﻌﻘﯿﺪا إﻟﻰ اﻷﺑﺴﻂ ‪:‬‬
‫‪ (١‬اﻟﺘﺤﻮﻳﻼت ‪:Transforms‬‬
‫ﻳﻘﻮم اﻟﺘﺤﻮﻳﻞ ﺑﺘﻤﺜﯿﻞ ﻗﯿﻢ اﻟﺒﻜﺴﻼت ﻣﻊ ﺑﻌﻀﮫﺎ اﻟﺒﻌﺾ‪ ،‬وﻟﻜﻦ ﺑﻄﺮﻳﻘﺔ ﻣﻜﺎﻓﺌﺔ‪ ،‬وھﻮ ﻳﺴﻤﺢ ﻟﺒﻌﺾ‬
‫اﻟﺨﻮارزﻣﯿﺎت اﻷﻛﺜﺮ ﻛﻔﺎءة وﻗﻮة ﺑﺎﻟﻌﻤﻞ ﻋﻠﻰ اﻟﺼﻮرة‪ ،‬وﻛﻤﺎ ﺳﻨﺮى ﻻﺣﻘﺎ‪ ،‬ﻳﺘﻌﺎﻣﻞ اﻟﺘﺤﻮﻳﻞ ﻣﻊ اﻟﺼﻮرة ﻛﺎﻣﻠﺔ‬
‫ﻛﺄﻧﮫﺎ وﺣﺪة واﺣﺪة ﻛﺒﯿﺮة‪ ،‬واﻟﺸﻜﻞ اﻟﺘﺎﻟﻲ ﻳﻮﺿﺢ اﻟﻔﻜﺮة ﺑﺎﺧﺘﺼﺎر‪.‬‬

‫‪Figure 2.1: Schema for transform processing‬‬


‫‪ (٢‬ﻣﻌﺎﻟﺠﺔ ﺟﻮار اﻟﻨﻘﻄﺔ ‪: Neighborhood processing‬‬
‫ﻣﻦ أﺟﻞ ﺗﻐﯿﯿﺮ ﻣﺴﺘﻮى اﻟﻠﻮن )اﻟﺮﻣﺎدي( ﻟﻠﺒﻜﺴﻞ اﻟﻤﺤﺪدة ﻧﺤﺘﺎج ﻓﻘﻂ أن ﻧﻌﺮف ﻗﯿﻤﺔ اﻟﻤﺴﺘﻮﻳﺎت اﻟﺮﻣﺎدﻳﺔ‬
‫ﻟﻤﺠﻤﻮﻋﺔ ﺻﻐﯿﺮ ﻣﻦ اﻟﻨﻘﺎط اﻟﻤﺠﺎورة ﺣﻮل اﻟﺒﻜﺴﻞ ﻧﻔﺴﮫﺎ‪.‬‬

‫‪ (٣‬اﻟﻌﻤﻠﯿﺎت ﻋﻠﻰ اﻟﻨﻘﻄﺔ ‪:Point operations‬‬


‫ﻳﺘﻢ ﺗﻐﯿﯿﺮ ﻗﯿﻤﺔ اﻟﻠﻮن اﻟﺮﻣﺎدي دون أي ﻣﻌﺮﻓﺔ ﻋﻦ اﻟﺒﻜﺴﻼت اﻟﻤﺤﯿﻄﺔ ﺑﮫﺎ‪ ،‬وھﺬه ھﻲ اﺑﺴﻂ اﻟﻌﻤﻠﯿﺎت اﻟﺘﻲ‬
‫ﺗﻘﻮم ﻋﻠﻰ اﻟﺼﻮرة‪ ،‬وﻟﮫﺎ اﺳﺘﺨﺪاﻣﺎت ﻋﺪﻳﺪة وﻣﮫﻤﺔ‪ ،‬وﺧﺎﺻﺔ ﻋﻤﻠﯿﺎت اﻟﺘﻤﮫﯿﺪ ﻟﻤﺎ ﻗﺒﻞ اﻟﻤﻌﺎﻟﺠﺔ ‪pre-‬‬
‫‪ ،processing‬ﺣﯿﺚ ﻳﻜﻮن ھﻨﺎك اﺣﺘﯿﺎج ﻟﺘﻌﺪﻳﻞ اﻟﺼﻮرة ﻗﺒﻞ ﺗﻄﺒﯿﻖ اﻟﻌﻤﻠﯿﺔ اﻟﺮﺋﯿﺴﯿﺔ ﻋﻠﯿﮫﺎ‪.‬‬

‫اﻟﻌﻤﻠﯿﺎت اﻟﺮﻳﺎﺿﯿﺔ ﻋﻠﻰ اﻟﺼﻮرة‪:‬‬


‫ﻳﻤﻜﻨﻨﺎ ﺗﻄﺒﯿﻖ اﻟﻌﻤﻠﯿﺎت اﻟﺮﻳﺎﺿﯿﺔ ﻋﻠﻰ اﻟﺼﻮرة ﺑﺎﻋﺘﺒﺎرھﺎ ﻣﻌﺎدﻟﺔ ﺑﺴﯿﻄﺔ‪:‬‬

‫ﺣﯿﺚ ان اﻟﺪاﻟﺔ )‪ f(x‬ﺗﻨﻄﻠﻖ ﻣﻦ اﻟﻤﺠﺎل ‪ 0……255‬إﻟﻰ ھﺬا اﻟﻤﺠﺎل ﻧﻔﺴﻪ‪ ،‬ﺑﺎﻋﺘﺒﺎره اﻟﻤﺴﺘﻮﻳﺎت اﻟﺮﻣﺎدﻳﺔ‬
‫ﻟﻘﯿﻢ اﻟﺒﻜﺴﻼت‪ ،‬ﺑﻨﻔﺲ اﻟﺘﺮﺗﯿﺐ ﻓﻲ اﻟﺼﻮرة طﺒﻌﺎ‪.‬‬
‫وﻛﻤﺜﺎل ﻋﻠﻰ ھﺬه اﻟﺪاﻟﺔ ﻳﻤﻜﻦ ﺗﻄﺒﯿﻖ اﺑﺴﻂ اﻟﻌﻤﻠﯿﺎت ﺑﺈﺿﺎﻓﺔ أو طﺮح ﻗﯿﻤﺔ ﺛﺎﺑﺘﺔ ‪ C‬ﻟﻜﻞ ﺑﻜﺴﻞ‪:‬‬

‫وﻛﻤﺜﺎل آﺧﺮ ﻋﻠﻰ اﻟﻌﻤﻠﯿﺎت اﻟﻤﻄﺒﻘﺔ ﻋﻠﻰ اﻟﻨﻘﻄﺔ ھﻨﺎك ﻋﻤﻠﯿﺔ ﺿﺮب اﻟﺜﺎﺑﺖ ﻓﻲ ﻛﻞ ﻗﯿﻢ ﺑﻜﺴﻼت اﻟﺼﻮرة‪:‬‬

‫وﺑﻄﺒﯿﻌﺔ اﻟﺤﺎل ﻓﺎﻟﻘﯿﻢ اﻟﻨﺎﺗﺠﺔ ﺗﺤﺘﺎج إﻟﻰ ﻣﻌﺎﻟﺠﺔ ﺑﺴﯿﻄﺔ ﺣﺘﻰ ﻧﻀﻤﻦ ان ﺗﻜﻮن ﻣﺨﺮﺟﺎت اﻟﺪاﻟﺔ ﺿﻤﻦ‬
‫اﻟﻨﻄﺎق اﻟﻤﺤﺪد ﻟﻠﺪاﻟﺔ‪ ،‬اﻟﺬي ﻳﻤﺜﻞ ﻟﻨﺎ ﻣﺪى اﻟﻠﻮن اﻟﺮﻣﺎدي اﻟﻤﻔﺘﺮض ﻟﮫﺬا اﻟﻨﻮع ﻣﻦ اﻟﺼﻮر‪ .‬وھﺬا ﻳﻌﻨﻲ ان‬
‫ﻗﯿﻢ ‪ y‬اﻟﺘﻲ ﺗﺘﺠﺎوز اﻟﻨﻄﺎق ﻳﺠﺐ ان ﺗﻜﻮن ﺿﻤﻦ اﻟﺸﺮط اﻟﺘﺎﻟﻲ‪:‬‬

‫وﻛﺘﻮﺿﯿﺢ ﻋﻠﻰ ذﻟﻚ ﻟﻨﺘﻔﺤﺺ اﻟﺮﺳﻢ اﻟﺒﯿﺎﻧﻲ اﻟﺘﺎﻟﻲ‪:‬‬

‫‪Figure 2.2: Adding and subtracting a constant‬‬

‫اﻟﺮﺳﻢ اﻋﻼه ﻳﻮﺿﺢ اﻟﻌﻼﻗﺔ ﺑﯿﻦ اﻟﻘﯿﻢ اﻟﺠﺪﻳﺪة واﻟﻘﯿﻢ اﻟﻘﺪﻳﻤﺔ ﻟﻠﺒﻜﺴﻼت ﺑﻌﺪ ﻋﻤﻠﯿﺘﻲ اﻟﺠﻤﻊ واﻟﻄﺮح ﻛﻼ‬
‫ﻋﻠﻰ ﺣﺪه‪ ،‬وﻛﯿﻒ ان ﺗﻄﺒﯿﻖ اﻟﺸﺮط اﻋﻼه ﻳﻘﻮم ﺑﻌﻤﻠﯿﺔ ﺗﺤﻮﻳﻞ اﻟﻘﯿﻢ اﻷﻛﺒﺮ ﻣﻦ ‪ ٢٥٥‬إﻟﻰ ‪ ٢٥٥‬واﻷﻗﻞ ﻣﻦ‬
‫اﻟﺼﻔﺮ إﻟﻰ ﺻﻔﺮ‪.‬‬
‫إن ﻗﯿﻤﺔ اﻟﺜﺎﺑﺖ اﻟﻤﻀﺎف واﻟﻤﻄﺮوح ﻓﻲ اﻟﺮﺳﻤﯿﻦ اﻟﺒﯿﺎﻧﯿﯿﻦ ھﻲ ‪ ،١٢٨‬ﻓﺒﺈﺿﺎﻓﺘﻪ ﻳﺘﻢ ﺗﺤﻮﻳﻞ ﻛﻞ ﻗﯿﻤﺔ‬
‫ﻟﻠﺒﻜﺴﻞ ﻣﻦ ‪ ١٢٧‬واﻋﻠﻰ إﻟﻰ ‪ ،٢٥٥‬ﻛﻤﺎ ﻓﻲ اﻟﺮﺳﻢ اﻷول‪ .‬وﻋﻨﺪ طﺮح ﻗﯿﻤﺔ اﻟﺜﺎﺑﺖ ﻓﺈﻧﻨﺎ ﻧﻘﻮم ﺑﺘﺤﻮﻳﻞ ﻛﻞ‬
‫ﺑﻜﺴﻞ ﻗﯿﻤﺘﻪ اﻗﻞ ﻣﻦ ‪ ١٢٨‬أو ﺗﺴﺎوﻳﮫﺎ إﻟﻰ ‪.٠‬‬
‫وھﺬﻳﻦ اﻟﺮﺳﻤﯿﯿﻦ ﻳﻮﺿﺤﺎن ﻟﻨﺎ اﻳﻀﺎ ان اﺿﺎﻓﺔ اﻟﺜﺎﺑﺖ اﻟﻤﻮﺟﺐ ﺳﻮف ﻳﺰﻳﺪ ﻣﻦ اﺿﺎء ﺳﻄﺢ اﻟﺼﻮرة ‪،lighten‬‬
‫أﻣﺎ اﻟﻄﺮح ﻓﺈﻧﻪ ﻳﻘﻮم ﻓﺈﻧﻪ ﻳﻌﻜﺲ اﻹﺿﺎءة وذﻟﻚ ﺑﺘﻐﻤﯿﻖ اﻟﺼﻮرة ‪ ،darken‬وﻳﻤﻜﻦ ﺗﻄﺒﯿﻖ ذﻟﻚ ﻋﻠﻰ اﻟﻤﺎﺗﻼب‬
‫ﻋﻠﻰ اﺣﺪى اﻟﺼﻮرة اﻟﻘﯿﺎﺳﯿﺔ ﻣﻦ اﻟﻨﻮع اﻟﺮﻣﺎدي ‪ ،grayscale‬واﻟﺘﻲ اﺳﻤﮫﺎ ‪ ،block.tif‬اﻟﻤﻮﺿﺤﺔ ﻓﻲ اﻟﺸﻜﻞ‬
‫ادﻧﺎه‪ ،‬ﻛﻤﺎ ھﻮ ﻣﻮﺿﺢ ﻓﻲ اﻟﻜﻮد ﺑﻌﺪھﺎ‪.‬‬

‫‪The 'blocks' image‬‬

‫ﻟﻘﺪ اﺳﺘﺨﺪﻣﻨﺎ اﻷﻣﺮ ‪ 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‬اﻟﺨﺎص ﺑﮫﺎ‬
‫ﺳﻲء‪ ،‬وﻓﯿﻤﺎ ﻳﻠﻲ ﺳﻨﺮى أن ﺗﺤﺴﯿﻦ اﻧﺘﺸﺎر أﻋﻤﺪة اﻟﮫﯿﺴﺘﻮﺟﺮام ﻳﻨﻌﻜﺲ ﺗﻠﻘﺎﺋﯿﺎ ﻋﻠﻰ ﺗﺒﺎﻳﻦ اﻟﺼﻮرة ﻣﻤﺎ‬
‫ﻳﺴﺎﻋﺪ ﻋﻠﻰ ﺗﺤﺴﯿﻨﮫﺎ‪.‬‬

‫ﺗﻮﺳﯿﻊ اﻟﮫﯿﺴﺘﻮﺟﺮام )ﺗﻮﺳﯿﻊ اﻟﺘﺒﺎﻳﻦ( )‪:Histogram stretching (Contrast stretching‬‬

‫ﻟﻨﻔﺘﺮض أن ﻟﺪﻳﻨﺎ ﺻﻮرة ﻟﮫﺎ اﻟﮫﯿﺴﺘﻮﺟﺮام اﻟﻤﻮﺿﺢ ﻓﻲ اﻟﺸﻜﻞ أدﻧﺎه‪ ،‬ﺣﯿﺚ ان ﻗﯿﻢ اﻟﻤﺴﺘﻮى اﻟﺮﻣﺎدي‬
‫اﻟﻤﻮﺟﻮدة ﻓﯿﻪ ﺗﺮﺗﺒﻂ ﻣﻊ اﻟﻘﯿﻢ ‪ ni‬اﻟﻤﻘﺎﺑﻠﺔ ﻟﮫﺎ ﺣﺴﺐ اﻟﺠﺪول اﻟﺘﺎﻟﻲ‪.‬‬

‫اﻣﺎ اﻟﮫﯿﺴﺘﻮﺟﺮام وداﻟﺔ اﻟﺘﻮﺳﯿﻊ ﻓﺒﺎاﻟﺸﻜﻞ‪:‬‬

‫ﻋﻤﻠﯿﺔ اﻟﺘﻮﺳﯿﻊ ﺗﺘﻢ ﺑﺘﻄﺒﯿﻖ ﻣﺎ ﻳﺴﻤﻰ ﺑﺪاﻟﺔ اﻟﻘﻄﻌﺔ اﻟﺨﻄﯿﺔ ‪ piecewise linear function‬اﻟﻤﻮﺿﺤﺔ ﻋﻠﻰ‬
‫ﻳﻤﯿﻦ اﻟﺸﻜﻞ اﻟﺴﺎﺑﻖ‪ ،‬ﺣﯿﺚ ﻧﺴﺘﻄﯿﻊ ﻋﻦ طﺮﻳﻘﮫﺎ ﺗﻮﺳﯿﻊ اﻟﻤﺴﺘﻮى اﻟﺮﻣﺎدي ﻣﻦ اﻟﻤﺪى اﻟﻤﻮﺿﺢ ﻓﻲ‬
‫اﻟﮫﯿﺴﺘﻮﺟﺮام وھﻮ ﻣﻦ ‪ ، ٩ -٥‬إﻟﻰ ﻣﺪى أوﺳﻊ وھﻮ ‪ ، ١٤-٢‬وھﺬه اﻟﻤﻌﺎدﻟﺔ ھﻲ‪:‬‬
‫ﺣﯿﺚ أن ‪ i‬ھﻲ اﻟﻘﯿﻤﺔ اﻟﺤﺎﻟﯿﺔ ﻟﻤﺴﺘﻮى اﻟﺮﻣﺎدي و ‪ j‬ھﻲ اﻟﻘﯿﻤﺔ اﻟﺠﺪﻳﺪة ﺑﻌﺪ اﻟﺘﺤﻮﻳﻞ‪ .‬وﻗﺪ ﻧﺘﺠﺖ ﻟﻨﺎ ﻗﯿﻤﺎ‬
‫ﺟﺪﻳﺪة ﻧﺴﺘﻄﯿﻊ اﻵن ﺗﻄﺒﯿﻘﮫﺎ ﻋﻠﻰ اﻟﮫﯿﺴﺘﻮﺟﺮام اﻟﺠﺪﻳﺪ‪ ،‬ﻣﻊ ﻣﻼﺣﻈﺔ ان اﻟﻘﯿﻢ اﻷﺧﺮى ﺧﺎرج اﻟﻤﺪى‬
‫اﻟﻤﺤﻮل إﻣﺎ ان ﺗﺘﺮك ﻛﻤﺎ ھﻲ )ﻛﻤﺎ ﻓﻲ ﺣﺎﻟﺘﻨﺎ ھﺬه( او ﺗﺪﻣﺞ ﻓﻲ ﻋﻤﻠﯿﺔ اﻟﺘﺤﻮﻳﻞ‪:‬‬

‫أﻣﺎ اﻟﮫﯿﺴﺘﻮﺟﺮام اﻟﺠﺪﻳﺪ ﻓﺴﯿﻜﻮن ﺑﺎﻟﻘﯿﻢ اﻟﺠﺪﻳﺪة اﻟﺘﻲ ﻳﺠﺐ أن ﺗﻜﻮن ﺗﺒﺎﻳﻨﮫﺎ أﻓﻀﻞ ﻣﻦ اﻷوﻟﻰ‪:‬‬

‫اﺳﺘﺨﺪام داﻟﺔ اﻟﻀﺒﻂ )‪: Use of (imadjust‬‬


‫ﻣﻦ أﺟﻞ اﻧﺠﺎز ﻋﻤﻠﯿﺔ ﺗﻮﺳﯿﻊ اﻟﮫﯿﺴﺘﻮﺟﺮام ﻓﻲ اﻟﻤﺎﺗﻼب ﺑﺴﮫﻮﻟﺔ‪ ،‬ﻧﺴﺘﺨﺪم اﻟﺪاﻟﺔ ‪ imadjust‬اﻟﺘﻲ ﻟﮫﺎ‬
‫اﺑﺴﻂ اﺳﺘﺨﺪاﻣﺎﺗﮫﺎ ھﻲ ﺣﺴﺐ اﻟﺸﻜﻞ اﻟﻌﺎم‪:‬‬
‫)]‪imadjust(im,[a,b],[c,d‬‬
‫ﺣﯿﺚ ان اﻟﻨﻘﻄﺘﯿﻦ ‪ a‬و ‪ b‬ھﻤﺎ اﻟﻨﻘﻄﺘﺎن اﻟﺘﻲ ﻳﺘﻢ ﺗﺤﻮﻟﮫﻤﺎ إﻟﻰ ‪ c‬و ‪ d‬ﺑﺎﻟﺘﺮﺗﯿﺐ ووﻓﻖ اﻟﺸﻜﻞ‪:‬‬

‫ﻛﻤﺎ أن ھﺬه اﻟﺪاﻟﺔ ﺗﻌﻤﻞ ﺑﺸﻜﻞ ﺟﯿﺪ ﻋﻠﻰ اﻟﺼﻮر ﻣﻦ اﻟﺘﻲ ﻧﻮع ﺑﯿﺎﻧﺎﺗﮫﺎ ‪ 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‬ﻳﻌﺘﻤﺪ ﻋﻠﻰ اﻟﻤﻌﺎدﻟﺔ‪:‬‬

‫ھﺬه اﻟﻤﻌﺎدﻟﺔ ﻳﻤﻜﻦ أن ﺗﻜﺘﺐ ﻋﻠﻰ ﻓﻲ اﻟﻜﻮد ﺑﺎﻟﺸﻜﻞ‪:‬‬


‫;)‪y= (x-a(i))*(b(i+1)-b(i))/(a(i+1)-a(i))+b(i‬‬

‫وﺳﯿﺘﻢ ﺗﻨﻔﯿﺬ اﻟﻤﻌﺎدﻟﺔ ھﺬه ﺑﺎﺳﺘﺨﺪام ﻛﻮد اﻟﻤﺎﺗﻼب اﻟﺬي ﻳﺴﺘﺨﺪم اﻟﺪاﻟﺔ ‪ 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‬اﻟﮫﯿﺴﺘﻮﺟﺮام اﻟﺨﺎص‬
‫ﺑﮫﺎ ﻣﻮﺿﺢ ﻓﻲ اﻟﻤﺜﺎل ادﻧﺎه‪ ،‬وذﻟﻚ وﻓﻖ اﻟﻘﯿﻢ اﻟﻤﻮﺿﺤﺔ ﻓﻲ اﻟﺠﺪول اﻟﺘﺎﻟﻲ‪:‬‬

‫أﻣﺎ اﻟﮫﯿﺴﺘﻮﺟﺮام ﻓﮫﻮ‪:‬‬


‫ﻧﻼﺣﻆ أن إﺟﻤﺎﻟﻲ ظﮫﻮر اﻟﺒﻜﺴﻼت ﻓﻲ ھﺬا اﻟﻤﺜﺎل ھﻮ ‪.n=360‬‬

‫وﻓﻲ اﻟﺠﺪول اﻟﺴﺎﺑﻖ اﻟﻨﺘﯿﺠﺔ اﻟﺤﺎﺻﻠﺔ ﻣﻦ ﻋﻤﻠﯿﺔ ﻣﺴﺎواة اﻟﮫﯿﺴﺘﻮﺟﺮام ﺑﺘﻄﺒﯿﻖ اﻟﺼﯿﻐﺔ ﻓﻲ اﻟﺘﻌﺮﻳﻒ‪.‬‬
‫ﻛﻞ ھﺬا ﻳﻤﻜﻦ ﺗﻠﺨﯿﺼﻪ ﺑﺎﻟﺠﺪول اﻟﻨﮫﺎﺋﻲ اﻟﺘﺎﻟﻲ اﻟﺬي ﻳﺒﯿﻦ اﻟﻘﯿﻢ اﻷوﻟﻰ واﻟﻘﯿﻢ اﻟﻨﮫﺎﺋﯿﺔ‪:‬‬

‫ﻛﻞ ھﺬا ﻳﻤﻜﻦ ﺗﻄﺒﯿﯿﻘﻪ ﻓﻲ اﻟﻤﺎﺗﻼب ﺑﺎﺳﺘﺨﺪام اﻟﺪاﻟﺔ ‪ 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‬‬
‫ﺗﻤﺎرﻳﻦ‬
‫ﻣﺪﺧﻞ إﻟﻰ ﻣﻌﺎﻟﺠﺔ اﻟﺼﻮر ﻣﻊ اﻟﻤﺎﺗﻼب ـ ﺗﺮﺟﻤﺔ ﻓﮫﺪ أل ﻗﺎﺳﻢ ‪fhdalqasem@yahoo.com‬‬

‫اﻟﻔﺼﻞ اﻟﺜﺎﻟﺚ ﻣﻌﺎﻟﺠﺔ ﺟﻮار اﻟﻨﻘﻄﺔ ‪Neighborhood Processing‬‬


‫ﻛﻤﺎ ﺷﺎھﺪﻧﺎ ﻓﻲ اﻟﻔﺼﻞ اﻟﺜﺎﻧﻲ أن اﻟﺼﻮرة ﻳﻤﻜﻦ ﺗﻌﺪﻳﻠﮫﺎ ﻋﻦ طﺮﻳﻖ ﺗﻄﺒﯿﻖ ﻣﻌﺎدﻟﺔ ﻣﺤﺪدة ﻋﻠﻰ ﻛﻞ ﻗﯿﻢ‬
‫ﻋﻨﺎﺻﺮ اﻟﺼﻮرة اﻟﺒﻜﺴﻼت‪ ،‬وﻳﻤﻜﻨﻨﺎ اﻋﺘﺒﺎر ﻣﻌﺎﻟﺠﺔ ﺟﻮار اﻟﺼﻮرة ﻋﺒﺎرة ﻋﻦ ﺗﻤﺪﻳﺪ ﻟﺬات اﻟﻤﻮﺿﻮع‪ ،‬ﺣﯿﺚ ان‬
‫اﻟﺪاﻟﺔ ﺳﻮف ﺗﻄﺒﻖ ﻟﻜﻞ ﻗﯿﻢ اﻟﺒﻜﺴﻼت اﻟﻤﺠﺎورة ﻟﻜﻞ اﻟﻨﻘﺎط!‪.‬‬
‫اﻟﻔﻜﺮة ھﻨﺎ ھﻲ ﻓﻲ ﺗﺤﺮﻳﻚ ﻗﻨﺎع ‪ mask‬ﻋﻠﻰ اﻟﺼﻮرة‪ ،‬ھﺬا اﻟﻘﻨﺎع ﻳﻤﻜﻦ ان ﻳﻜﻮن ﻣﺴﺘﻄﯿﻼ )ﻋﺎدة ﻣﺎ ﻳﻜﻮن‬
‫ﺑﺄطﻮال ﻓﺮدﻳﺔ( أو أي ﺷﻜﻞ آﺧﺮ‪ ،‬وﻛﻤﺎ ھﻮ ﻣﻮﺿﺢ ﻓﻲ اﻟﺸﻜﻞ أدﻧﺎه‪ ،‬ﺳﻮف ﻧﻘﻮم ﺑﺈﻧﺸﺎء ﺻﻮرة ﺟﺪﻳﺪ ﻣﻦ‬
‫ﺻﻮرة ﺳﺎﺑﻘﺔ ﺑﺤﺴﺎب ﻗﯿﻢ ﺟﺪﻳﺪة ﻟﺒﻜﺴﻼﺗﮫﺎ وﻓﻖ اﻟﺒﻜﺴﻼت اﻟﻤﺤﺴﻮﺑﺔ ﻓﻲ اﻟﻘﻨﺎع‪ ،‬ﻧﺴﻤﻲ ﻛﻼ ﻣﻦ اﻟﻘﻨﺎع‬
‫واﻟﺪاﻟﺔ اﻟﺘﻲ ﺗﻐﯿﺮ اﻟﻘﯿﻢ ﺑﺎﻟﻔﻠﺘﺮ ‪.filter‬‬

‫ﻓﺈذا ﻛﺎﻧﺖ اﻟﺪاﻟﺔ اﻟﻤﺴﺘﺨﺪﻣﺔ ﻟﺘﻐﯿﯿﺮ اﻟﻘﯿﻢ ﺗﺤﺖ اﻟﻘﻨﺎع داﻟﺔ ﺧﻄﯿﺔ ‪ ، linear function‬ﻓﺈﻧﻨﺎ اﻟﻔﻠﺘﺮ ﻳﺴﻤﻰ‬
‫ﻓﻠﺘﺮا ﺧﻄﯿﺎ‪ ،‬وﻳﻤﻜﻨﻨﺎ ﺗﻄﺒﯿﻖ ﻓﻠﺘﺮا ﺧﻄﯿﺎ ﻋﻦ طﺮﻳﻖ ﺿﺮب ﻛﻞ ﻋﻨﺎﺻﺮ اﻟﻘﻨﺎع ﺑﺎﻟﻌﻨﺎﺻﺮ اﻟﻤﻘﺎﺑﻠﺔ ﻓﻲ اﻟﺠﻮار‪ ،‬ﺛﻢ‬
‫إﺿﺎﻓﺔ ﺟﻤﯿﻊ ﻧﺘﺎﺋﺞ اﻟﻀﺮب‪.‬‬
‫ﻟﻨﻔﺘﺮض أن ﻟﺪﻳﻨﺎ ﻗﻨﺎﻋﺎ أﺑﻌﺎده ‪ ٥×٣‬ﻛﻤﺎ ھﻮ ﻣﻮﺿﺢ ﺑﺎﻟﺸﻜﻞ اﻟﺴﺎﺑﻖ‪ ،‬وأن ﻗﯿﻢ اﻟﻘﻨﺎع ﺗﻌﻄﻰ ﻋﻦ طﺮﻳﻖ‪:‬‬

‫وأن ﻗﯿﻢ اﻟﺒﻜﺴﻼت اﻟﻤﻨﺎظﺮة ھﻲ‪:‬‬


‫وﻟﻨﻘﻢ اﻵن ﺑﺎﻟﻀﺮب ﺛﻢ اﻟﺠﻤﻊ ﻛﻤﺎ ﺑﺎﻟﻤﻌﺎدﻟﺔ‪:‬‬

‫اﻟﻤﺨﻄﻂ اﻟﺘﺎﻟﻲ ﻳﻮﺿﺢ ﻋﻤﻠﯿﺔ ﺗﻨﻔﯿﺬ اﻟﻔﻠﺘﺮة اﻟﺤﯿﺰﻳﺔ )اﻟﻔﺮاﻏﯿﺔ( ‪ ،spatial filtering‬وھﻮ ﻳﺤﺘﺎج إﻟﻰ ﺛﻼث‬
‫ﺧﻄﻮات‪:‬‬
‫‪ .١‬وﺿﻊ اﻟﻘﻨﺎع ﻓﻮق اﻟﺒﻜﺴﻞ اﻟﺤﺎﻟﻲ‪.‬‬
‫‪ .٢‬ﻣﻄﺎﺑﻘﺔ ﻛﻞ ﻧﺘﺎﺋﺞ اﻟﻔﻠﺘﺮ اﻟﻤﻀﺮوﺑﺔ ﻣﻊ اﻟﻌﻨﺎﺻﺮ اﻟﻤﻨﺎظﺮة ﻓﻲ اﻟﺠﻮار‪.‬‬
‫‪ .٣‬ﺟﻤﻊ ﻛﻞ اﻟﻨﺘﺎﺋﺞ‪.‬‬
‫وﻳﺠﺐ ﺗﻜﺮار ذﻟﻚ ﻋﻠﻰ ﻛﻞ اﻟﺒﻜﺴﻼت ﻓﻲ اﻟﺼﻮرة‪.‬‬
‫وھﻨﺎك ﻋﻤﻠﯿﺔ ﺷﺒﯿﮫﺔ ﺑﺎﻟﻔﻠﺘﺮة اﻟﺤﯿﺰﻳﺔ ﺗﺴﻤﻰ اﻻﻟﺘﻔﺎف اﻟﺤﯿﺰي ‪ ، spatial convolution‬وﻳﺘﻢ اﻧﺠﺎز اﻻﻟﺘﻔﺎف‬
‫اﻟﺤﯿﺰي ﺑﺸﻜﻞ ﻣﺸﺎﺑﻪ ﻟﻠﻔﻠﺘﺮة اﻟﺤﯿﺰﻳﺔ ﻋﺪا اﻧﻪ ﻳﺠﺐ ﻋﻤﻞ ﺗﺪوﻳﺮ ﻟﻠﻔﻠﺘﺮ ‪ ١٨٠‬درﺟﺔ ﻗﺒﻞ ﻋﻤﻠﯿﺘﻲ اﻟﻀﺮب‬
‫واﻹﺿﺎﻓﺔ‪.‬‬
‫وﺑﺎﺳﺘﺨﺪام اﻟﺮﻣﺰﻳﻦ )‪ m(i,j‬و)‪ p(i,j‬ﻛﻤﺎ ﺳﺒﻖ‪ ،‬ﺳﺘﻜﻮن ﻣﺨﺮﺟﺎت اﻻﻟﺘﻔﺎف اﻟﺤﯿﺰي ﻋﻠﻰ ﻗﻨﺎع ‪ ٥×٣‬اﻟﻤﻄﺒﻖ‬
‫ﻋﻠﻰ ﺑﻜﺴﻞ واﺣﺪ ھﻲ‪:‬‬

‫ﻻﺣﻆ اﻹﺷﺎرة اﻟﺴﺎﻟﺒﺔ ﻓﻲ ﻋﻨﺎﺻﺮ ‪ m‬واﻟﺘﻲ ﻳﻤﻜﻦ اﺳﺘﺒﺪاﻟﮫﺎ ﺑﺈﺟﺮاء ﻋﻤﻠﯿﺎت اﻟﻄﺮح ﻓﻲ ﻋﻨﺎﺻﺮ ‪.p‬‬
‫ﻣﺜﺎل ﺗﺨﻄﯿﻄﻲ ﻳﻮﺿﺢ ﻓﻜﺮة اﻟﻔﻠﺘﺮة اﻟﺤﯿﺰﻳﺔ‬

‫وﻛﻤﺜﺎل ﻋﻠﻰ اﻟﻔﻼﺗﺮ اﻟﺸﮫﯿﺮة اﻟﻔﻠﺘﺮ ' ‪ ' average‬ھﺬا اﻟﻔﻠﺘﺮ اﻟﺬي اﺻﻐﺮ أﺣﺠﺎﻣﻪ ‪ 3×3‬وﻳﻤﻜﻦ ان ﻳﻜﻮن اﻛﺒﺮ‬
‫ﻣﻦ ذﻟﻚ ﺑﺄي ﺣﺠﻢ‪ ،‬وﻳﻜﻮن ﻏﺎﻟﺒﺎ ﻣﺮﺑﻌﺎ‪ ،‬ﻳﻘﻮم ھﺬا اﻟﻔﻠﺘﺮ ﺑﺄﺧﺬ ﻣﺘﻮﺳﻂ ﻛﻞ اﻟﻘﯿﻢ اﻟﺘﺴﻌﺔ اﻟﺘﻲ ﻓﻲ اﻟﺠﻮار‬
‫اﻟﻤﻄﺒﻖ ﻋﻠﯿﻪ‪ ،‬وﻳﻘﻮم ﺑﻌﺪ ذﻟﻚ اﻟﻘﯿﻢ اﻟﻤﺘﻮﺳﻄﺔ ﺗﻠﻚ ھﻲ اﻟﻘﯿﻤﺔ اﻟﺠﺪﻳﺪة ﻟﻠﻨﻘﻄﺔ اﻟﻤﺮﻛﺰﻳﺔ ﻓﻲ اﻟﺠﻮار‪.‬‬
‫وﻛﻤﺜﺎل آﺧﺮ اﻟﻔﻠﺘﺮ اﻟﺸﮫﯿﺮ اﻟﺘﺎﻟﻲ‪:‬‬

‫ﻳﻤﻜﻦ ﺗﻠﺨﯿﺺ ﺗﻄﺒﯿﻖ ھﺬا اﻟﻔﻠﺘﺮ ﺑﺎﻟﺸﻜﻞ اﻟﺘﺎﻟﻲ‪:‬‬

‫ﻣﺸﻜﻠﺔ أطﺮاف اﻟﺼﻮرة ‪:Edges of the image‬‬


‫ﺗﻈﮫﺮ داﺋﻤﺎ ﻣﺸﻜﻠﺔ ﻋﻨﺪ ﺗﻄﺒﯿﻖ اﻟﻔﻠﺘﺮ ﺣﯿﺚ ﻧﺘﺴﺎءل ھﻞ ﺳﯿﺘﻢ ﺗﻄﺒﯿﻖ اﻟﻔﻠﺘﺮ ﻋﻠﻰ اﻟﻨﻘﺎط اﻟﺘﻲ ﻓﻲ‬
‫اﻟﻌﻤﻮدﻳﻦ اﻷول واﻷﺧﯿﺮ ﻣﻦ اﻟﺼﻮرة وﻛﺬﻟﻚ اﻟﺼﻔﯿﻦ اﻷول واﻷﺧﯿﺮ )ھﺬا ﺑﺎﻟﻨﺴﺒﺔ ﻟﻔﻠﺘﺮ ﺑﻌﺪه ‪ ،( ٣×٣‬ﻓﺠﻮار‬
‫ﻧﻘﺎط ھﺬه اﻟﺼﻔﻮف واﻷﻋﻤﺪة ﻳﻘﻊ ﺟﺰء ﻣﻨﻪ ﺧﺎرج ﻣﺼﻔﻮﻓﺔ اﻟﺼﻮرة‪ ،‬وھﻨﺎﻟﻚ ﻓﻲ اﻟﺤﻘﯿﻘﺔ ﺛﻼث ﺗﻘﻨﯿﺎت ﻟﺤﻞ‬
‫ھﺬه اﻟﻤﺸﻜﻠﺔ‪:‬‬
‫‪ .١‬ﺗﺠﺎھﻞ اﻷطﺮاف ‪Ignore the edges‬‬
‫وﻳﺮﻣﺰ ﻟﮫﺬا اﻷﺳﻠﻮب ﻛﻤﺎ ﺳﯿﺄﺗﻲ ﺑـ '‪ 'valid‬ﺣﯿﺚ ﻳﺘﻢ ﺗﺠﺎھﻞ اﻟﺼﻔﻮف واﻷﻋﻤﺪة ﻋﻠﻰ اﻷطﺮاف وﻳﻨﺘﺞ‬
‫ﻋﻦ ھﺬا اﻷﺳﻠﻮب ﻣﺼﻔﻮﻓﺔ ﺣﺠﻤﮫﺎ اﺻﻐﺮ ﻣﻦ اﻟﻤﺼﻔﻮﻓﺔ اﻷﺻﻠﯿﺔ‪.‬‬
‫‪ .٢‬اﻟﺤﺸﻮ ﺑﺎﻷﺻﻔﺎر ‪ :Padding with zeros‬وھﺬا اﻟﺘﻘﻨﯿﺔ ﺗﻌﺘﻤﺪ ﻋﻠﻰ إﺿﺎﻓﺔ أﺻﻔﺎر ﺧﺎرج إطﺎر اﻟﻤﺼﻔﻮﻓﺔ‬
‫ﻣﻤﺎ ﻳﻜﺒﺮ ﻣﻦ ﺣﺠﻤﮫﺎ وﻳﺠﻌﻞ أطﺮاﻓﮫﺎ ﻛﺄﻧﮫﺎ ﻧﻘﺎط داﺧﻠﯿﺔ ﺑﺼﻨﺎﻋﺔ ﺟﻮار ﺻﻔﺮي ﻟﻜﻞ ﻋﻤﻮد وﺻﻔﺮ ﻻ‬
‫ﺟﻮار ﻟﻪ‪ ،‬وﺑﻌﺪ اﻧﺠﺎز اﻟﻔﻠﺘﺮ ﻟﺪﻳﻨﺎ ﺧﯿﺎرﻳﻦ‪:‬‬
‫‪ .a‬اﻟﺨﯿﺎر '‪ 'same‬وﻓﯿﻪ ﻳﺘﻢ إﻟﻐﺎء اﻟﺤﺸﻮ ﺑﻌﺪ اﻧﺠﺎز ﻋﻤﻠﯿﺔ اﻟﻔﻠﺘﺮة ﺑﺤﯿﺚ ﻳﻜﻮن اﻟﻨﺎﺗﺞ ﻣﺼﻔﻮﻓﺔ‬
‫ﺑﻨﻔﺲ ﺣﺠﻢ اﻟﻤﺼﻔﻮﻓﺔ اﻷﺻﻠﯿﺔ‪.‬‬
‫‪ .b‬اﻟﺨﯿﺎر '‪ 'full‬وﻓﯿﻪ ﻳﺘﻢ اﻹﺑﻘﺎء ﻋﻠﻰ اﻟﺼﻔﻮف واﻷﻋﻤﺪة اﻟﺰاﺋﺪة ﺑﻘﯿﻤﮫﺎ اﻟﺠﺪﻳﺪة ﺑﻌﺪ اﻟﻔﻠﺘﺮ ﻣﻤﺎ‬
‫ﻳﺴﺒﺐ اﻟﺤﺼﻮل ﻋﻠﻰ ﻣﺼﻔﻮﻓﺔ ﻣﻔﻠﺘﺮة اﻛﺒﺮ ﻣﻦ اﻻﺻﻠﯿﺔ‪.‬‬
‫اﻟﻔﻠﺘﺮة ﻓﻲ اﻟﻤﺎﺗﻼب ‪Filtering in Matlab‬‬
‫ﻳﺘﻢ اﺳﺘﺨﺪام اﻟﺪاﻟﺔ ‪ filter2‬وﻳﻤﺮر إﻟﯿﮫﺎ ﺛﻼﺛﺔ وﺳﺎﺋﻂ ‪parameters‬‬
‫)‪Resulted_image=filter2(filter,image,shape‬‬
‫اﻟﻤﺪﺧﻞ اﻷول ‪ filter‬ھﻮ ﻣﺼﻔﻮﻓﺔ اﻟﻔﻠﺘﺮ واﻟﺜﺎﻧﻲ ‪ image‬ھﻮ اﻟﺼﻮرة اﻻﺻﻠﯿﺔ واﻟﺜﺎﻟﺚ ‪ sahpe‬ھﻮ إﺣﺪى ﺛﻼث‬
‫ﻛﻠﻤﺎت ﻣﺤﺠﻮزة ﻟﺘﺤﺪﻳﺪ ﻧﻮع اﻟﻤﺼﻔﻮﻓﺔ اﻟﻨﺎﺗﺠﺔ ﺣﺴﺐ طﺮﻳﻘﺔ اﻟﺤﺸﻮ إﻣﺎ ‪ same‬وھﻲ اﻟﺴﻠﺴﻠﺔ اﻟﻨﺼﯿﺔ‬
‫اﻻﻓﺘﺮاﺿﯿﺔ ‪ default‬أو ‪ valid‬أو ‪ ،full‬ﺣﺴﺐ اﻟﻤﻮﺿﺢ أﻋﻼه‪.‬‬
‫ﻣﺜﺎل ‪ :‬ﺗﻄﺒﯿﻖ اﻟﻔﻠﺘﺮ ‪ average‬ﺛﻼﺛﻲ اﻟﺒﻌﺪ ﻋﻠﻰ اﻟﻤﺼﻔﻮﻓﺔ ‪ x‬ﻛﻤﺎ ﻳﻠﻲ‪:‬‬
‫;))‪>> x=uint8(10*magic(5‬‬
‫ھﺬه اﻟﻤﺼﻔﻮﻓﺔ ﻋﺒﺎرة ﻋﻦ ﺻﻮرة اﻓﺘﺮاﺿﯿﺔ ﺗﻢ ﺗﻮﻟﯿﺪھﺎ ﻋﺒﺮ اﻟﺪاﻟﺔ ‪.magic‬‬
‫‪>> a=ones(3,3)/9‬‬
‫واﻟﻤﺼﻔﻮﻓﺔ ‪ a‬ھﻲ اﻟﻔﻠﺘﺮ اﻟﻤﻄﻠﻮب ﺗﻄﺒﯿﻘﻪ‪.‬‬
‫;)'‪>> filter2(a,x,'same‬‬
‫وﻟﻨﻌﯿﺪ ﺗﻄﺒﯿﻖ ﻧﻔﺲ اﻟﺴﻄﺮ ﻣﻊ ﺗﻐﯿﯿﺮ اﻟﺴﻠﺴﻠﺔ اﻟﻨﺼﯿﺔ ‪ shape‬ﻣﺮه ‪ valid‬وﻣﺮه ‪ full‬ﺛﻢ ﻻﺣﻆ اﻟﻔﺎرق‪.‬‬
‫اﻟﺪاﻟﺔ ‪ fspecial‬ﻟﺘﻮﻟﯿﺪ اﻟﻔﻼﺗﺮ اﻟﻘﯿﺎﺳﯿﺔ‬
‫ھﻨﺎك ﻣﺠﻤﻮﻋﺔ ﻛﺒﯿﺮة ﻣﻦ اﻟﻔﻼﺗﺮ اﻟﻘﯿﺎﺳﯿﺔ ﻧﺴﺘﻄﯿﻊ ﺗﻮﻟﯿﺪھﺎ ﻋﺒﺮ اﻟﺪاﻟﺔ ‪ fspecial‬ﺣﺴﺐ اﺳﻤﺎﺋﮫﺎ اﻟﻤﺨﺰوﻧﺔ‬
‫ﻣﺴﺒﻘﺎ‪.‬‬
‫ﻓﺎﻟﺴﻄﺮ اﻟﺘﺎﻟﻲ‪:‬‬
‫;)]‪>> f= fspecial('average',[5,7‬‬
‫ﻳﻮﻟﺪ ﻓﻠﺘﺮ اﻟﻤﺘﻮﺳﻂ اﻟﺬي طﺒﻘﻨﺎه ﺳﺎﺑﻘﺎ وﻟﻜﻦ ﺑﺄﺑﻌﺎد ﻣﺨﺘﻠﻔﺔ‪ ،‬وإذا ﻟﻢ ﻳﺘﻢ ﺗﺤﺪﻳﺪ أﺑﻌﺎد ﻓﺈن اﻟﺒﻌﺪ اﻟﻘﯿﺎﺳﻲ‬
‫ھﻮ ‪:٣×٣‬‬
‫;)'‪>> aa= fspecial('average‬‬
‫اﻟﻤﺼﻔﻮﻓﺔ ‪ aa‬ھﻲ ﻧﻔﺴﮫﺎ اﻟﻤﺼﻔﻮﻓﺔ ‪ a‬اﻟﺘﻲ ﺗﻢ ﺣﺠﺰھﺎ ﺳﺎﺑﻘﺎ‪.‬‬
‫وھﻨﺎك ﻓﻼﺗﺮ اﺧﺮى ﻣﺜﻼ ﻓﻠﺘﺮ ﻻﺑﻼﺳﯿﺎن‪:‬‬
‫)'‪>> f=fspecial('laplacian‬‬
‫واﻟﻔﻠﺘﺮ ﺟﺎوﺳﯿﺎن ﻋﻠﻰ ﻻﺑﻼﺳﯿﺎن وﻳﺨﺘﺼﺮ ‪:log‬‬
‫)'‪>> f1=fspecial('log‬‬
‫اﻟﻔﻼﺗﺮ ﻋﺎﻟﯿﺔ وﻣﻨﺨﻔﻀﺔ اﻟﻌﺒﻮر ‪Frequencies; low and high pass filters‬‬
‫ﺗﻮﺟﺪ ﻓﻲ ﻛﻞ ﺻﻮرة ﻣﺠﻤﻮﻋﺔ ﻣﻦ اﻟﻤﻜﻮﻧﺎت‪ ،‬وﻟﻮ ﻧﻈﺮﻧﺎ إﻟﻰ اﻟﻤﺼﻔﻮﻓﺔ ﻧﻔﺴﮫﺎ ﻟﻮﺟﺪﻧﺎ ان ھﺬه اﻟﻤﻜﻮﻧﺎت‬
‫ﺗﻨﻌﻜﺲ ﻋﻠﻰ ﻗﯿﻢ اﻟﻤﺼﻔﻮﻓﺔ وإﺟﻤﺎﻻ ﻧﺴﺘﻄﯿﻊ ان ﻧﻘﻮل ان ﻟﺪﻳﻨﺎ ﻧﻮﻋﯿﻦ ﻣﻦ اﻟﻤﻜﻮﻧﺎت ھﻲ اﻟﻤﻜﻮﻧﺎت ﻋﺎﻟﯿﺔ‬
‫اﻟﺘﺮدد )اﻟﺘﻜﺮار(‪ ،‬واﻟﻤﻜﻮﻧﺎت ﻣﻨﺨﻔﻀﺔ اﻟﺘﻜﺮار أو اﻟﺘﺮدد‪.‬‬
‫اﻟﻤﻜﻮﻧﺎت ﻋﺎﻟﯿﺔ اﻟﺘﻜﺮار ‪ :High frequency components‬ھﻲ ﻣﻜﻮﻧﺎت ﺗﺘﻤﯿﺰ ﺑﺄﻧﮫﺎ ﺗﺘﻐﯿﺮ ﺑﺼﻮرة ﻛﺒﯿﺮة ﻓﻲ ﻗﯿﻢ‬
‫اﻟﻤﺴﺘﻮى اﻟﺮﻣﺎدي ﻓﻲ ﻣﺴﺎﻓﺎت ﺻﻐﯿﺮة‪ ،‬وﻣﻦ أﻣﺜﻠﺘﮫﺎ اﻟﺤﻮاف ‪ edges‬واﻟﺘﺸﻮﺷﺎت ‪. noise‬‬
‫اﻟﻤﻜﻮﻧﺎت ﻣﻨﺨﻔﻀﺔ اﻟﺘﻜﺮار ‪ :Low frequency components‬ھﻲ ﻣﻜﻮﻧﺎت ﺛﺎﺑﺘﺔ او ﺷﺒﻪ ﺛﺎﺑﺘﺔ داﺧﻞ اﻟﺼﻮرة‬
‫وﺗﻐﯿﺮاﺗﮫﺎ ﻗﻠﯿﻠﺔ ﻓﻲ ﻗﯿﻢ اﻟﻤﺴﺘﻮى اﻟﺮﻣﺎدي وﻣﻦ اﻣﺜﻠﺘﮫﺎ اﻟﺨﻠﻔﯿﺎت ‪ backgrounds‬وﻧﺴﯿﺞ اﻟﺼﻮرة ‪textures‬‬
‫ﻋﻤﻮﻣﺎ‪.‬‬
‫وھﺬا ﻳﻘﻮدﻧﺎ إﻟﻰ ﺗﻌﺮﻳﻒ ﻧﻮﻋﯿﻦ ﻣﻦ اﻟﻔﻼﺗﺮ اﻟﻤﻄﺒﻘﺔ ﻋﻠﻰ اﻟﺼﻮرة‪:‬‬
‫‪high pass filter: it 'passes over' the high frequency components, and reduces or eliminates low‬‬
‫‪frequency components,‬‬
‫اﻟﻔﻼﺗﺮ ﻋﺎﻟﯿﺔ اﻟﻌﺒﻮر ‪ HPF‬ﺗﺘﺠﺎوز اﻟﻤﻜﻮﻧﺎت ﻋﺎﻟﯿﺔ اﻟﺘﻜﺮار ﺑﺪون ﺗﻐﯿﯿﺮ وﻟﻜﻨﮫﺎ ﺗﻘﻠﻞ أو ﺗﻠﻐﻲ اﻟﻤﻜﻮﻧﺎت ﻣﻨﺨﻔﻀﺔ‬
‫اﻟﺘﻜﺮار‪.‬‬
‫‪low pass filter: it 'passes over' the low frequency components, and reduces or eliminates high‬‬
‫‪frequency components,‬‬
‫اﻟﻔﻼﺗﺮ ﻣﻨﺨﻔﻀﺔ اﻟﻌﺒﻮر ‪ LPF‬ﺗﺘﺠﺎوز اﻟﻤﻜﻮﻧﺎت اﻟﻤﻨﺨﻔﻀﺔ اﻟﺘﻜﺮار ﺑﺪون ﺗﻐﯿﯿﺮ‪ ،‬وﻟﻜﻨﮫﺎ ﺗﻘﻠﻞ او ﺗﻠﻐﻲ اﻟﻤﻜﻮﻧﺎت‬
‫ﻋﺎﻟﯿﺔ اﻟﺘﻜﺮار‪.‬‬
‫ﺳﻨﻘﻮل اﺧﺘﺼﺎر ﻓﻼﺗﺮ ﻋﺎﻟﯿﺔ وﻓﻼﺗﺮ ﻣﻨﺨﻔﻀﺔ‪.‬‬
‫وﻣﻦ أﻣﺜﻠﺔ اﻟﻔﻼﺗﺮ اﻟﻤﻨﺨﻔﻀﺔ اﻟﻔﻠﺘﺮ ‪ average‬اﻟﺬي ﻳﺰداد ﺗﺄﺛﯿﺮه اﻟﻤﺨﻔﺾ ﻛﻠﻤﺎ زاد ﺣﺠﻤﻪ‪ ،‬ﻛﻤﺎ ﻳﻠﻲ‪:‬‬
‫;)'‪>> c=imread('cameraman.tif‬‬
‫;)'‪>> f1=fspecial('average‬‬
‫;)‪>> cf1=filter2(f1,c‬‬
‫ﻻﺣﻆ ﺷﻜﻞ اﻟﺼﻮرة اﻟﻨﺎﺗﺠﺔ ﻣﻊ اﻟﻔﻠﺘﺮ ذي اﻟﺒﻌﺪ ‪ ٣×٣‬ﺛﻢ اﻋﺪ ﺗﻄﺒﯿﻘﻪ ﻣﻊ ﻧﻔﺲ اﻟﻔﻠﺘﺮ وﻟﻜﻦ ﺑﺤﺠﻢ اﻛﺒﺮ ‪٩×٩‬‬
‫ﺛﻢ اﻛﺒﺮ ‪ ،٢٥×٢٥‬ﻛﻤﺎ ﻓﻲ اﻷﺷﻜﺎل اﻟﺘﺎﻟﯿﺔ‪:‬‬
‫واﻟﻔﻠﺘﺮﻳﻦ ‪ laplacian‬و ‪ log‬ھﻤﺎ ﻓﻠﺘﺮان ﻋﺎﻟﯿﺎ اﻟﻌﺒﻮر‪ ،‬ﻛﻤﺎ ﻓﻲ اﻟﻤﺜﺎﻟﯿﻦ اﻟﺘﺎﻟﯿﯿﻦ‪:‬‬
‫>>‬ ‫;)'‪f=fspecial('laplacian‬‬
‫>>‬ ‫;)‪cf=filter2(f,c‬‬
‫>>‬ ‫;)‪imshow(cf/100‬‬
‫>>‬ ‫;)'‪f1=fspecial('log‬‬
‫>>‬ ‫;)‪cf1=filter2(f1,c‬‬
‫>>‬ ‫;)‪figure,imshow(cf1/100‬‬
‫واﻟﺸﻜﻞ اﻟﺘﺎﻟﻲ ﻳﻮﺿﺢ ﻧﺘﯿﺠﺔ ﺗﻄﺒﯿﻘﮫﻤﺎ ﻋﻠﻰ اﻟﺼﻮرة ‪ c‬ﺻﻮرة رﺟﻞ اﻟﻜﺎﻣﯿﺮا ﻛﻤﺎ ﺳﯿﺄﺗﻲ‪:‬‬

‫ﻻﺣﻆ ﻛﯿﻒ ﻳﻘﻮم اﻟﻔﻠﺘﺮ ﻋﺎﻟﻲ اﻟﻌﺒﻮر ﺑﺘﻐﯿﯿﺮ اﻟﻤﻨﺎطﻖ اﻟﻤﻨﺨﻔﻀﺔ اﻟﺘﻜﺮار وﺗﻘﻠﯿﻞ ﻗﯿﻤﮫﺎ ﺣﺘﻰ ﺻﺎرت اﻗﺮب إﻟﻰ‬
‫اﻟﺼﻔﺮ‪ ،‬وھﺬا ھﻮ ﺳﺒﺐ ظﮫﻮر اﻟﻠﻮن اﻷﺳﻮد ﻓﻲ اﻟﺼﻮرﺗﯿﻦ اﻷﺧﯿﺮﻳﺘﻦ‪ ،‬أﻣﺎ اﻟﻔﻠﺘﺮ ﻣﻨﺨﻔﺾ اﻟﻌﺒﻮر ﻓﮫﻮ ﻳﻘﻮم‬
‫ﺑﺘﻘﻠﯿﻞ ﻗﯿﻢ اﻟﻤﻜﻮﻧﺎت اﻟﻤﺮﺗﻔﻌﺔ ﻣﻤﺎ ﻳﻌﻨﻲ اﻗﺘﺮاب اﻟﺼﻮرة ﻣﻦ اﻟﻤﺴﺘﻮى اﻟﺮﻣﺎدي اﻟﻤﺘﻮﺳﻂ أﻛﺜﺮ وأﻛﺜﺮ‪.‬‬

‫ﺗﺤﺪﻳﺪ اﻟﺤﻮاف ‪Edge sharpening‬‬


‫ھﻲ إﺣﺪى أھﻢ ﺗﻄﺒﯿﻘﺎت اﻟﻔﻼﺗﺮ اﻟﻤﻨﺨﻔﻀﺔ ﺣﯿﺚ ﻳﺘﻢ ﻓﻲ ھﺬه اﻟﺘﻘﻨﯿﺔ ﻋﻤﻞ ﻓﻠﺘﺮ ﻣﻨﺨﻔﺾ ﺛﻢ طﺮﺣﻪ ﻣﻦ‬
‫اﻟﺼﻮرة اﻷﺻﻠﯿﺔ ﻓﯿﻨﺘﺞ ﻟﺪﻳﻨﺎ ﺻﻮرة اﺻﻠﯿﺔ اﻛﺜﺮ ﺗﺤﺪﻳﺪا ﻟﺤﻮاف ﻣﻜﻮﻧﺎﺗﮫﺎ‪ ،‬وﺗﺴﻤﻰ ھﺬه اﻟﺘﻘﻨﯿﺔ أﻳﻀﺎ ﺑﺘﺤﺴﯿﻦ‬
‫اﻟﺤﻮاف أو اﻟﻘﻨﺎع ﻏﯿﺮ اﻟﺤﺎد ‪.unsharp masking‬‬
‫واﻟﻤﺨﻄﻂ ﻓﻲ اﻟﺸﻜﻞ اﻟﺘﺎﻟﻲ ﻳﻮﺿﺢ ھﺬه اﻟﻌﻤﻠﯿﺔ‪:‬‬
‫ﺗﻄﺒﯿﻖ ھﺬه اﻟﻔﻜﺮة ﻓﻲ اﻟﻜﻮد اﻟﺘﺎﻟﻲ‪ ،‬ﻻﺣﻆ اﻧﻨﺎ اﺳﺘﺨﺪﻣﻨﺎ ﻓﻠﺘﺮا ﻣﻨﺨﻔﻀﺎ ھﻮ اﻟﻔﻠﺘﺮ ‪:average‬‬
‫;)'‪>> f=fspecial('average‬‬
‫;)‪>> xf=filter2(f,x‬‬
‫;‪>> xu=double(x)-xf/1.5‬‬
‫;)‪>> imshow(xu/70‬‬
‫وﻟﻘﺪ ﺣﺼﻠﺖ ﺗﻌﺪﻳﻼت ﻋﺪﻳﺪة ﻋﻠﻰ ھﺬه اﻟﻔﻜﺮة‪ ،‬وﺗﻢ ﺗﻄﻮﻳﺮ ﻓﻠﺘﺮ ﻳﺨﺘﺼﺮ ﺧﻄﻮﺗﻲ اﻟﺘﺤﺠﯿﻢ ‪ scale‬واﻟﻄﺮح‬
‫‪ subtracat‬ﺑﺨﻄﻮة واﺣﺪة ﻋﺒﺮ اﻟﻔﻠﺘﺮ ‪ unsharp‬اﻟﺬي ﻳﻘﺒﻞ وﺳﯿﻄﺎ ‪ parameter‬واﺣﺪ ﺗﺤﺪد ﻧﺴﺒﺔ اﻟﺘﺤﺪﻳﺪ‬
‫‪ sharping‬اﻟﻤﻄﻠﻮب‪.‬‬
‫اﻟﻤﺜﺎل اﻟﺘﺎﻟﻲ ﻳﻄﺒﻖ ھﺬا اﻟﻔﻠﺘﺮ ﻋﻠﻰ ﺻﻮرة اﻟﺼﺒﻲ اﻟﻌﺎﺑﺲ‪:‬‬
‫;)'‪>> p=imread('pout.tif‬‬
‫;)‪>> u=fspecial('unsharp',0.5‬‬
‫;)‪>> pu=filter2(u,p‬‬
‫;)‪>> imshow(p),figure,imshow(pu/255‬‬

‫ﻻﺣﻆ ﻗﺴﻤﺔ اﻟﻤﺼﻔﻮﻓﺔ ‪ 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‬وﻟﮫﺬا ﻳﺴﺘﺤﺴﻦ‬
‫اﺳﺘﺨﺪام اﻟﺪاﻟﺔ اﻷﺻﻠﯿﺔ واﺧﺘﯿﺎر اﻟﻘﯿﻤﺔ اﻟﻤﺘﻮﺳﻄﺔ إن أﻣﻜﻦ ذﻟﻚ‪.‬‬
‫ﻓﯿﻤﺎ ﺻﻮرة رﺟﻞ اﻟﻜﺎﻣﯿﺮا ﺑﻌﺪ ﺗﻄﺒﯿﻖ ﻓﻠﺘﺮي اﻟﻘﯿﻤﺔ اﻟﺼﻐﺮى واﻟﻌﻈﻤﻰ ﻋﻠﯿﻪ‪.‬‬

‫================‬
‫اﻧﺘﮫﻰ ﺑﺤﻤﺪ ﷲ وﺗﻮﻓﯿﻘﻪ ‪ ،‬اﻋﺪاد وﺗﺮﺟﻤﺔ ﻓﮫﺪ ال ﻗﺎﺳﻢ‪.‬‬
‫ﻣﺪﺧﻞ إﻟﻰ ﻣﻌﺎﻟﺠﺔ اﻟﺼﻮر ﻣﻊ اﻟﻤﺎﺗﻼب ـ ﺗﺮﺟﻤﺔ ﻓﮫﺪ أل ﻗﺎﺳﻢ ‪fhdalqasem@yahoo.com‬‬

‫اﻟﻔﺼﻞ اﻟﺮاﺑﻊ ﺗﺤﻮﻳﻞ ﻓﻮرﻳﯿﻪ‬


‫‪The Fourier Transform‬‬
‫اﻟﻔﺼﻞ اﻟﺮاﺑﻊ ﺗﺤﻮﻳﻞ ﻓﻮرﻳﯿﻪ ‪The Fourier Transform‬‬
‫إن ﻟﺘﺤﻮﻳﻞ ﻓﻮرﻳﯿﻪ أھﻤﯿﺔ أﺳﺎﺳﯿﺔ ﻓﻲ ﻣﻌﺎﻟﺠﺔ اﻟﺼﻮر‪ ،‬ﻓﮫﻮ ﻳﺴﻤﺢ ﻟﻨﺎ ﺑﺎﻧﺠﺎز ﻣﮫﺎم ﻗﺪ ﺗﻜﻮن ﻣﺴﺘﺤﯿﻠﺔ‬
‫اﻻﻧﺠﺎز ﺑﺄي طﺮﻳﻘﺔ أﺧﺮى‪ ،‬ﻛﻤﺎ أن ﻣﻦ ﻓﺎﻋﻠﯿﺘﻪ أﻧﻪ ﻳﺴﻤﺢ ﻟﻨﺎ ﺑﺈﻧﺠﺎز ﻣﮫﺎم أﺧﺮى ﺑﺴﺮﻋﺔ أﻛﺒﺮ‪.‬‬
‫وﻳﻘﺪم ﻟﻨﺎ ﺗﺤﻮﻳﻞ ﻓﻮرﻳﯿﻪ ﻣﻦ ﺧﻼل أﺷﯿﺎء ﻛﺜﯿﺮة‪ ،‬ﺑﺪﻳﻼ ﻗﻮﻳﺎ ﻓﻲ اﻟﻔﻠﺘﺮة اﻟﺤﯿﺰﻳﺔ اﻟﺨﻄﯿﺔ‪ ،‬ﻓﮫﻮ أﻛﺜﺮ ﻓﺎﻋﻠﯿﺔ‬
‫ﻣﻘﺎرﻧﺔ ﺑﻄﺮق اﻟﻔﻠﺘﺮة اﻷﺧﺮى ﻋﻨﺪ اﻟﻌﻤﻞ ﻋﻠﻰ ﻓﻼﺗﺮ ﻛﺒﯿﺮة‪ ،‬وھﺬا اﻟﺘﺤﻮﻳﻞ ﻳﺘﯿﺢ ﻟﻨﺎ ﻋﺰل وﻣﻌﺎﻟﺠﺔ ﻓﺘﺮات‬
‫ﻣﺤﺪدة ﻓﻲ اﻟﺼﻮرة‪ ،‬وإﺟﺮاء ﻋﻤﻠﯿﺎت اﻟﻔﻠﺘﺮة ﺑﻨﻮﻋﯿﮫﺎ ﻋﺎﻟﻲ اﻟﻌﺒﻮر ‪ high-pass‬وﻣﻨﺨﻔﺾ اﻟﻌﺒﻮر ‪low-pass‬‬
‫ﺑﺪرﺟﺔ ﻋﺎﻟﯿﺔ ﻣﻦ اﻟﺪﻗﺔ‪.‬‬
‫وﻗﺒﻞ ﻣﻨﺎﻗﺸﺔ ﻋﻼﻗﺔ ﺗﺤﻮﻳﻞ ﻓﻮرﻳﯿﻪ ﺑﺎﻟﺼﻮر‪ ،‬ﺳﻮف ﻧﻘﺪم ﺗﺤﻮﻳﻞ ﻓﻮرﻳﯿﻪ أﺣﺎدي اﻟﺒﻌﺪ وﺑﻌﺾ ﺧﺼﺎﺋﺼﻪ ‪one-‬‬
‫‪.dimensional Fourier transform‬‬
‫ﺗﺬﻛﯿﺮ ﻣﻦ اﻟﻔﺼﻞ اﻟﺜﺎﻧﻲ‪ :‬ﻳﻘﻮم اﻟﺘﺤﻮﻳﻞ‪ ١‬ﺑﺘﻤﺜﯿﻞ ﻗﯿﻢ اﻟﺒﻜﺴﻼت ﻣﻊ ﺑﻌﻀﮫﺎ اﻟﺒﻌﺾ‪ ،‬وﻟﻜﻦ ﺑﻄﺮﻳﻘﺔ ﻣﻜﺎﻓﺌﺔ‪،‬‬
‫وھﻮ ﻳﺴﻤﺢ ﻟﺒﻌﺾ اﻟﺨﻮارزﻣﯿﺎت اﻷﻛﺜﺮ ﻛﻔﺎءة وﻗﻮة ﺑﺎﻟﻌﻤﻞ ﻋﻠﻰ اﻟﺼﻮرة‪ ،‬وﻛﻤﺎ ﺳﻨﺮى ﻻﺣﻘﺎ‪ ،‬ﻳﺘﻌﺎﻣﻞ اﻟﺘﺤﻮﻳﻞ‬
‫ﻣﻊ اﻟﺼﻮرة ﻛﺎﻣﻠﺔ ﻛﺄﻧﮫﺎ وﺣﺪة واﺣﺪة ﻛﺒﯿﺮة‪ ،‬واﻟﺸﻜﻞ اﻟﺘﺎﻟﻲ ﻳﻮﺿﺢ اﻟﻔﻜﺮة ﺑﺎﺧﺘﺼﺎر‪.‬‬

‫‪Schema for transform processing‬‬


‫ﺧﻠﻔﯿﺔ ﻧﻈﺮﻳﺔ ‪Background‬‬
‫ﺳﻮف ﻧﺒﺪأ ﺑﺘﻮﺿﯿﺢ ﻣﺴﺄﻟﺔ أن اﻟﺪاﻟﺔ اﻟﺪورﻳﺔ ﻳﻤﻜﻦ أن ﺗﻜﺘﺐ ﻛﻤﺠﻤﻮﻋﺔ ﻣﻜﻮن ﻣﻦ داﻟﺘﻲ اﻟﺠﯿﺐ وﺟﯿﺐ‬
‫اﻟﺘﻤﺎم ﻟﻤﺨﻠﺘﻒ اﻟﻔﺘﺮات )اﻟﺪورات( ‪ frequencies‬واﻟﻨﻄﺎﻗﺎت‪.‬‬
‫ﺑﻌﺾ اﻟﺪوال ﺗﺤﺘﺎج إﻟﻰ ﻋﺪد ﻣﺤﺪود ﻣﻦ اﻟﺪوال ﻓﻲ ﻋﻤﻠﯿﺔ اﻟﺘﺠﺰﺋﺔ ھﺬه‪ ،‬واﻟﺒﻌﺾ اﻵﺧﺮ ﻳﺤﺘﺎج إﻟﻰ ﻋﺪد ﻏﯿﺮ‬
‫ﻣﻨﺘﮫﻲ ﻣﻦ اﻟﺪوال‪ ،‬ﻣﺜﻼ اﻟﻤﻮﺟﻪ اﻟﻤﺮﺑﻌﺔ اﻟﻤﻮﺿﺤﺔ ﻓﻲ اﻟﺸﻜﻞ اﻟﺒﯿﺎﻧﻲ اﻟﺘﺎﻟﻲ‪ ،‬ﺗﺘﺠﺰئ ﺑﺘﺤﻮﻳﻠﮫﺎ إﻟﻰ اﻟﺼﯿﻐﺔ‬
‫اﻟﺮﻳﺎﺿﯿﺔ‪:‬‬

‫ﺣﺴﺐ اﻟﺸﻜﻞ‪:‬‬

‫ﻛﻠﻣﺔ )اﻟﺗﺣوﯾل( ﻓﻲ ھذا اﻟﻔﺻل ﯾﻘﺻد ﺑﮭﺎ داﺋﻣﺎ )ﺗﺣوﯾل ﻓورﯾﯾﮫ( وﻟﯾس أي ﺗﺣوﯾل آﺧر ‪...‬ﺣﺳب ﻧوع اﻟﺗﺣوﯾل اﻟﻣﻔﮭوم ﻣن اﻟﺳﯾﺎق‪.‬‬
‫‪١‬‬
‫ﻓﻲ اﻟﺸﻜﻞ اﻟﺴﺎﺑﻖ‪ ،‬ﻗﻤﻨﺎ ﺑﺄﺧﺬ اﻷﺟﺰاء اﻷرﺑﻌﺔ اﻷوﻟﻰ ﻓﻘﻂ ﻣﻦ أﺟﻞ ﻋﻤﻠﯿﺔ اﻟﺘﻘﺮﻳﺐ‪ ،‬وﻛﻠﻤﺎ أﺧﺬﻧﺎ أﺟﺰاء‬
‫أﻛﺜﺮ‪ ،‬ﻛﻠﻤﺎ ﻛﺎن ﻧﺎﺗﺞ ﻣﺠﻤﻮع اﻟﺪوال أﻗﺮب إﻟﻰ اﻟﺪاﻟﺔ اﻷﺻﻠﯿﺔ‪.‬‬
‫وﺑﺎﻟﻤﻨﺎﺳﺒﺔ ﻓﺈن اﻟﺘﺮددات أو اﻟﺘﻜﺮارات ﻋﻠﻰ ﻣﺴﺘﻮى اﻟﺼﻮرة او اﻟﻤﺼﻔﻮﻓﺔ ﺧﺼﻮﺻﺎ ﻳﻘﺼﺪ ﺑﮫﺎ ‪ :‬ﻣﻘﯿﺎس‬
‫ﻟﻤﻘﺪار اﻟﺘﻐﯿﺮ ﻓﻲ ﻗﯿﻢ اﻟﺼﻮرة ﻓﺈذا ﻛﺎﻧﺖ اﻟﺘﻐﯿﺮات ﻛﺜﯿﺮة ﻋﻠﻰ ﻣﺴﺘﻮى اﻟﻘﯿﻢ ﻛﺎﻧﺖ اﻟﺘﻜﺮارات ‪frequencies‬‬
‫ﻛﺜﯿﺮة واﻟﻌﻜﺲ ﺑﺎﻟﻌﻜﺲ‪.‬‬
‫ﺗﺤﻮﻳﻞ ﻓﻮرﻳﯿﻪ اﻟﻤﺘﻘﻄﻊ ﻣﻦ أﺣﺎدي اﻟﺒﻌﺪ‬
‫‪The one-dimensional discrete Fourier transform‬‬
‫ﻋﻨﺪﻣﺎ ﻧﻘﻮم ﺑﺎﻟﺘﻌﺎﻣﻞ ﻣﻊ اﻟﺪاﻟﺔ اﻟﻤﺘﻘﻄﻌﺔ‪ ،‬ﻛﻤﺎ ﺳﻮف ﻧﻔﻌﻞ ﻣﻊ اﻟﺼﻮر‪ ،‬ﻓﺈﻧﻨﺎ اﻟﺤﺎﻟﺔ ﺳﺘﻜﻮن ﻓﯿﮫﺎ اﺧﺘﻼف‬
‫ﺑﺴﯿﻂ ﻋﻦ اﻟﺤﺎﻟﺔ اﻟﺴﺎﺑﻘﺔ‪ ،‬ﺣﯿﺚ أن ﻟﺪﻳﻨﺎ ﻓﻘﻂ ﻋﺪد ﻣﺤﺪد ﻣﻦ اﻟﻘﯿﻢ‪ ،‬وﻧﺤﺘﺎج إﻟﻰ ﻋﺪد ﻣﺤﺪود ﻣﻦ اﻟﺪوال‬
‫ﻟﺘﻘﺮﻳﺒﮫﺎ‪.‬‬
‫ﻟﻨﺄﺧﺬ ﻓﻲ اﻻﻋﺘﺒﺎر اﻟﻤﺘﺴﻠﺴﻠﺔ اﻟﻤﺘﻘﻄﻌﺔ اﻟﺘﺎﻟﯿﺔ‪:‬‬
‫‪1, 1, 1, 1, -1, -1, -1, -1‬‬
‫ﺳﻨﻘﻮم ھﻨﺎ ﺑﺘﺤﻮﻳﻞ اﻟﻤﺘﺴﻠﺴﻠﺔ )ﺗﻘﺮﻳﺒﮫﺎ( وﻓﻖ اﻟﺸﻜﻞ اﻟﺘﺎﻟﻲ‪ ،‬اﻟﺬي ﻳﻮﺿﺢ ھﺬه اﻟﻤﺘﺴﻠﺴﻠﺔ ﻛﻤﺠﻤﻮﻋﺔ‬
‫ﻣﻦ داﻟﺘﻲ ﺟﯿﺐ ‪ sin‬ﻓﻘﻂ‪ ،‬ﻓﺘﺤﻮﻳﻞ ﻓﻮرﻳﯿﻪ ﻳﺴﻤﺢ ﻟﻨﺎ ﺑﺎﻟﺤﺼﻮل ﻋﻠﻰ دوال اﻟﺠﯿﺐ ھﺬه وﺣﺪھﺎ ﺣﯿﺚ ﺗﺘﺤﻮل‬
‫ﻓﻲ داﻟﺔ اﻟﺠﻤﻊ إﻟﻰ اﻟﺪاﻟﺔ أو اﻟﻤﺘﺴﻠﺴﻠﺔ اﻷﺻﻠﯿﺔ‪.‬‬
‫وﻷﻧﻨﺎ ﺳﻮف ﻧﮫﺘﻢ ﺑﺎﻟﺴﻼﺳﻞ اﻟﻤﺘﻘﻄﻌﺔ وھﺬا ﻳﻨﻄﺒﻖ ﻋﻠﻰ اﻟﺼﻮر‪ ،‬ﻓﺈﻧﻨﺎ ﺳﻮف ﻧﺘﺤﺪث ﻋﻦ ﺗﺤﻮﻳﻞ ﻓﻮرﻳﯿﻪ‬
‫اﻟﻤﺘﻘﻄﻊ ‪ discrete Fourier transform‬ﻓﻘﻂ واﻟﺬي ﻳﺨﺘﺼﺮ إﻟﻰ ‪.DFT‬‬
‫اﻟﺘﻌﺮﻳﻒ اﻟﺮﻳﺎﺿﻲ ﻟﺘﺤﻮﻳﻞ ﻓﻮرﻳﺮ اﺣﺎدي اﻟﺒﻌﺪ ‪one dimensional DFT‬‬
‫ﻟﯿﻜﻦ ﻟﺪﻳﻨﺎ‬

‫ھﻲ ﻣﺘﺴﻠﺴﻠﺔ ﻣﻦ اﻟﻄﻮل ‪ N‬وﻧﻌﺮف ﺗﺤﻮﻳﻞ ﻓﻮرﻳﯿﻪ اﻟﻤﺘﻘﻄﻊ اﻟﻤﻘﺎﺑﻞ ﻟﮫﺎ ﺑﺄﻧﻪ‪:‬‬

‫ﺣﯿﺚ أن إﻳﺠﺎد ﻛﻞ ﻗﯿﻤﺔ ﻣﻨﻪ ﻳﺘﻢ ﻋﺒﺮ اﻟﺼﯿﻐﺔ‪:‬‬

‫أﻣﺎ داﻟﺘﮫﺎ اﻟﻌﻜﺴﯿﺔ ﻓﮫﻲ‪:‬‬

‫إذا ﻗﻤﻨﺎ ﺑﻤﻘﺎرﻧﺔ داﻟﺔ اﻟﺘﺤﻮﻳﻞ واﻟﺪاﻟﺔ اﻟﻌﻜﺴﯿﺔ ﻟﮫﺎ ﺳﻮف ﻧﺠﺪ أن ھﻨﺎك ﻓﺮﻗﯿﻦ ﺑﺴﯿﻄﯿﻦ ھﻤﺎ‪:‬‬

‫ﻓﻲ اﻟﻌﻜﺴﯿﺔ‪.‬‬ ‫‪ .١‬ﻏﯿﺎب ﻣﻌﺎﻣﻞ اﻟﺘﺪرج ‪scaling factor‬‬


‫‪ .٢‬ﺗﻐﯿﺮ اﻹﺷﺎرة داﺧﻞ ﻗﻮس اﻷس ﻣﻦ ﺳﺎﻟﺐ ﻓﻲ اﻟﺘﺤﻮﻳﻞ إﻟﻰ ﻣﻮﺟﺐ ﻓﻲ اﻟﻌﻜﺴﯿﺔ‪.‬‬

‫ﺗﺤﻮﻳﻞ ﻓﻮرﻳﯿﻪ اﻟﺴﺮﻳﻊ ‪The Fast Fourier Transform‬‬


‫إن أﺣﺪ أﺳﺒﺎب اﻟﺘﻲ ﺗﺠﻌﻞ ﻣﻦ اﻟـ ‪ DFT‬ﻣﺴﺘﺨﺪﻣﺎ ﻓﻲ ﻣﻌﺎﻟﺠﺔ اﻟﺼﻮر ھﻮ وﺟﻮد ﺧﻮارزﻣﯿﺔ ﺳﺮﻳﻌﺔ ﺟﺪا‬
‫ﻟﺤﺴﺎﺑﻪ‪ ،‬وھﻨﺎك ﻋﺪد ﻣﻦ اﻟﺨﻮازرﻣﯿﺎت اﻟﺴﺮﻳﻌﺔ ﻟﻠﻐﺎﻳﺔ واﻟﻔﻌﺎﻟﺔ ﻟﺤﺴﺎب اﻟـ ‪ DFT‬وإﺣﺪى ھﺬه اﻟﺨﻮارزﻣﯿﺎت‬
‫ﺗﺴﻤﻰ ﺗﺤﻮﻳﻞ ﻓﻮرﻳﯿﻪ اﻟﺴﺮﻳﻌﺔ ‪ The Fast Fourier Transform‬أو اﺧﺘﺼﺎرا ‪ ،FFT‬وﺑﺎﺳﺘﺨﺪام اﻟـ ‪FFT‬‬
‫ﻧﺴﺘﻄﯿﻊ ﺗﻘﻠﯿﻞ اﻟﻮﻗﺖ اﻟﺬي ﻧﺤﺘﺎﺟﻪ ﻟﺤﻮﺳﺒﺔ ‪.DFT‬‬
‫وإﺣﺪى طﺮق اﻟـ ‪ FFT‬ﺗﻌﻤﻞ ﺗﻌﺎدوﻳﺎ ‪) recursively‬ﺗﻜﺮارﻳﺎ( ﺑﻮاﺳﻄﺔ ﺗﻘﺴﯿﻢ اﻟﻤﺘﺠﻪ اﻷﺻﻠﻲ إﻟﻰ ﻧﺼﻔﯿﻦ‪،‬‬
‫وﺣﺴﺎب اﻟـ ‪ FFT‬ﻟﻜﻞ ﻧﺼﻒ‪ ،‬ﺛﻢ وﺿﻊ اﻟﻨﺘﺎﺋﺞ ﺳﻮﻳﺎ‪ .‬وھﺬا ﻳﻌﻨﻲ اﻛﺜﺮ ﻛﻔﺎءة ﻋﻨﺪﻣﺎ ﻳﻜﻮن طﻮل اﻟﻤﺘﺠﻪ ﻣﻦ‬
‫اﻷس ‪.٢‬‬
‫اﻟﺠﺪول اﻟﺘﺎﻟﻲ ﻳﻮﺿﺢ ﻣﯿﺰات اﺳﺘﺨﺪام ﺧﻮارزﻣﯿﺔ اﻟـ ‪ FFT‬ﻣﻘﺎرﻧﺔ ﺑﺎﻟﺘﻌﺮﻳﻒ اﻟﺮﻳﺎﺿﻲ ﺑﺎﻟﻤﻌﺎدﻻت اﻟﻤﺒﺎﺷﺮة‪،‬‬
‫وذﻟﻚ ﺑﻤﻘﺎرﻧﺔ ﻋﺪد ﻋﻤﻠﯿﺎت اﻟﻀﺮب اﻟﻤﻄﻠﻮﺑﺔ ﻟﻜﻞ طﺮﻳﻘﺔ‪ .‬ﺑﺎﻟﻨﺴﺒﺔ ﻟﻤﺘﺠﻪ ﻣﻦ اﻟﻄﻮل ‪ 2n‬ﺗﺄﺧﺬ اﻟﻄﺮﻳﻘﺔ‬
‫اﻟﻤﺒﺎﺷﺮة ‪ ٢2n‬ﻋﻤﻠﯿﺔ ﺿﺮب‪ ،‬أﻣﺎ اﻟـ ‪ FFT‬ﻓﻔﻘﻂ ‪ . n2n‬ﻳﻜﻮن ﻛﻠﻔﺔ اﻟﻮﻗﺖ اﻟﻤﻮﻓﺮة ﻣﻦ اﻟﺮﺗﺒﺔ ‪ .2n/n‬وﻣﻦ‬
‫اﻟﻮاﺿﺢ أن ﻣﯿﺰة اﺳﺘﺨﺪام اﻟﺨﻮارزﻣﯿﺔ اﻷﺳﺮع اﻟـ ‪ FFT‬ﻳﺼﺒﺢ اﻛﺒﺮ ﻛﻠﻤﺎ زاد ﺣﺠﻢ اﻟﻤﺘﺠﻪ‪/‬اﻟﻤﺼﻔﻮﻓﺔ‪/‬‬
‫اﻟﺴﻠﺴﻠﺔ اﻟﺘﻲ ﻧﺘﻌﺎﻣﻞ ﻣﻌﮫﺎ‪ .‬وﺑﺴﺒﺐ ﻣﯿﺰات اﻟﺤﻮﺳﺒﺔ اﻟﻤﻮﺿﺢ اﻋﻼه ﻓﺈﻧﻨﺎ اﻟﺘﻨﻔﯿﺬ ﺳﯿﻜﻮن ﺑﺎﺳﺘﺨﺪام اﻟـ‬
‫‪.FFT‬‬
‫اﻟﺠﺪول اﻟﺘﺎﻟﻲ ﻳﻮﺿﺢ اﻟﻤﻘﺎرﻧﺔ ﺑﯿﻦ اﻟﻄﺮﻳﻘﺔ اﻟﺴﺮﻳﻌﺔ اﻟﻄﺮق اﻟﻤﺒﺎﺷﺮة ﻣﻦ ﺣﯿﺚ ﻛﻔﺎءة اﻟﺤﻮﺳﺒﺔ‪:‬‬

‫ﺗﺤﻮﻳﻞ ﻓﻮرﻳﯿﻪ اﻟﻤﺘﻘﻄﻊ ﺛﻨﺎﺋﻲ اﻟﺒﻌﺪ ‪The two-dimensional DFT‬‬


‫ﻓﻲ اﻟﻤﺼﻔﻮﻓﺎت ﺛﻨﺎﺋﯿﺔ اﻟﺒﻌﺪ‪ ،‬ﺗﺄﺧﺬ ‪ DFT‬اﻟﻤﺼﻔﻮﻓﺔ ﻛﻤﺪﺧﻞ‪ ،‬وﺗﻌﯿﺪ ﻣﺼﻔﻮﻓﺔ أﺧﺮى ﻣﻦ ﻧﻔﺲ اﻟﺤﺠﻢ‪،‬‬
‫ﻛﻤﺨﺮج‪ ،‬ﻓﺈذا ﻛﺎﻧﺖ ﻗﯿﻢ اﻟﻤﺼﻔﻮﻓﺔ ﻣﻤﺜﻠﺔ ﺑﺎﻟﺪاﻟﺔ )‪ f(x,y‬ﺣﯿﺚ ‪ x‬و‪ y‬ھﻲ أدﻟﺔ اﻟﻤﺼﻔﻮﻓﺔ‪ ،‬ﻓﺴﻨﺮﻣﺰ‬
‫ﻟﻤﺼﻔﻮﻓﺔ اﻟﻤﺨﺮﺟﺎت ﺑـ )‪ ،F(u,v‬وﻧﺴﻤﻲ اﻟﻤﺼﻔﻮﻓﺔ ‪ F‬ﺗﺤﻮﻳﻞ ﻓﻮرﻳﯿﻪ ﻟﻠﻤﺼﻔﻮﻓﺔ ‪ f‬ﺛﻢ ﻧﻜﺘﺐ‪:‬‬

‫وﺑﮫﺬا ﺗﻜﻮن اﻟﺪاﻟﺔ اﻷﺻﻠﯿﺔ ‪ 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‬أﺣﺎدﻳﺔ اﻟﺒﻌﺪ( ﻟﻜﻞ‬
‫اﻟﺼﻔﻮف‪ ،‬ﺛﻢ ﻧﺤﺴﺒﮫﺎ ﻟﻜﻞ اﻷﻋﻤﺪة اﻟﻨﺎﺗﺠﺔ‪ ،‬ﻛﻤﺎ ھﻮ ﻣﻮﺿﺢ ﺑﺎﻟﺸﻜﻞ اﻟﺘﺎﻟﻲ‪:‬‬

‫اﻟﺼﻮرة اﻷﺻﻠﯿﺔ ‪(a) Original‬‬


‫ﺗﺤﻮﻳﻞ اﻟﺼﻔﻮف )‪(b) DFT of each row of (a‬‬
‫ﺗﺤﻮﻳﻞ اﻷﻋﻤﺪة )‪(c) DFT of each column of (b‬‬
‫وﺣﯿﺚ أن اﻟﺠﺪاء )ﻧﺎﺗﺞ اﻟﻀﺮب ‪ (product‬ﻻ ﻳﺘﺄﺛﺮ ﺑﺎﻟﺘﺮﺗﯿﺐ‪ ،‬ﻓﺈﻧﻪ ﻳﻤﻜﻦ اﻟﻘﯿﺎم ﺑﺸﻜﻞ ﻣﻜﺎﻓﺊ ﺑﺤﺴﺎب اﻟـ ‪2-D‬‬
‫‪ ،DFT‬ﻋﻦ طﺮﻳﻖ ﺣﺴﺎب اﻟـ ‪ DFT‬ﻟﻜﻞ اﻷﻋﻤﺪة أوﻻ وﻣﻦ ﺛﻢ ﺣﺴﺎب اﻟـ ‪ DFT‬ﻟﻜﻞ اﻟﺼﻔﻮف اﻟﻨﺎﺗﺠﺔ‪.‬‬
‫اﻟﺨﻄﯿﺔ ‪ :Linearity‬ﻣﻦ اﻟﻤﯿﺰات اﻟﻤﮫﻤﺔ ﻓﻲ اﻟﺘﺤﻮﻳﻞ اﻷﺣﺎدي ‪ DFT‬أﻧﻪ ﺧﻄﻲ‪ ،‬ﻓﺎﻟﺘﺤﻮﻳﻞ اﻟﺤﺎﺻﻞ ﻟﻠﻤﻜﻮﻧﺎت‬
‫اﻟﻤﺠﻤﻮﻋﺔ ھﻮ ﻧﻔﺴﻪ ﻣﺠﻤﻮع اﻟﺘﺤﻮﻳﻞ اﻟﻨﺎﺗﺞ ﻋﻦ ﻛﻞ ﻣﻜﻮن‪ ،‬وﻧﻔﺲ اﻷﻣﺮ ﺑﺎﻟﻨﺴﺒﺔ ﻟﻠﻀﺮب ﻓﻲ ﻋﻨﺼﺮ ﺛﺎﺑﺖ‪:‬‬

‫ﺣﯿﺚ أن ‪ k‬ﻋﻨﺼﺮ وﺣﯿﺪ )ﻣﺘﺠﻪ ﺑﻌﻨﺼﺮ واﺣﺪ ‪ ،(scalar‬ﺑﯿﻨﻤﺎ اﻟﺪوال ‪ f‬و‪ g‬ھﻲ ﻣﺼﻔﻮﻓﺎت‪ ،‬وﻛﻞ ﺻﯿﻐﺔ أﻋﻼه ﺗﻨﺘﺞ‬
‫ﻣﺒﺎﺷﺮة ﻣﻦ اﻟﺘﻌﺮﻳﻒ اﻟﻤﻌﻄﻰ ﻓﻲ اﻟﻤﻌﺎدﻟﺔ ‪ ٤.٤‬ﺳﺎﺑﻘﺎ‪ ،‬ھﺬه اﻟﺨﺎﺻﯿﺔ ﻟﮫﺎ اﺳﺘﺨﺪاﻣﺎت ﻛﺒﯿﺮة ﻟﻠﺘﻌﺎﻣﻞ ﻣﻊ‬
‫اﻟﺼﻮر ﻛﻤﺎ ﻓﻲ ‪ ،image degradation‬ﻛﺎﻟﻀﻮﺿﺎء ‪ noise‬اﻟﺘﻲ ﻳﻤﻜﻦ ﻧﻤﺬﺟﺘﮫﺎ ﻛﺎﻟﻤﺠﻤﻮع‪:‬‬
‫‪d=f+n‬‬
‫ﺣﯿﺚ أن ‪ f‬ھﻲ اﻟﺼﻮرة اﻷﺻﻠﯿﺔ‪ ،‬و‪ n‬ھﻲ اﻟﻀﺠﯿﺞ‪ ،‬أﻣﺎ ‪ d‬ﻓﮫﻲ اﻟﺼﻮرة اﻟﻨﺎﺗﺠﺔ ﻣﻦ ﺗﺠﺮﻳﺪ اﻟﺼﻮرة ‪degraded‬‬
‫‪ image‬ﻣﻦ اﻟﻀﺠﯿﺞ‪ ،‬ﺣﯿﺚ أن‪:‬‬

‫ورﺑﻤﺎ اﺳﺘﻄﻌﻨﺎ ﺣﺬف أو ﺗﻘﻠﯿﻞ ‪ n‬ﻋﻦ طﺮﻳﻖ ﺗﻌﺪﻳﻞ اﻟﺘﺤﻮﻳﻞ اﻟﻤﻄﺒﻖ‪.‬‬


‫ﻧﻈﺮﻳﺔ اﻻﻟﺘﻔﺎف ‪The convolution theorem‬‬
‫ﺗﻠﻚ اﻟﻨﺘﺎﺋﺞ اﻟﺴﺎﺑﻘﺔ ﺗﻘﺪم واﺣﺪا ﻣﻦ أھﻢ ﻓﻮاﺋﺪ اﺳﺘﺨﺪام ﺗﺤﻮﻳﻞ ﻓﻮرﻳﯿﻪ اﻟﻤﺘﻘﻄﻊ ‪. DFT‬‬
‫ﻟﯿﻜﻦ ﻟﺪﻳﻨﺎ اﻟﺼﻮرة ‪ M‬وﻧﺮﻏﺐ ﻓﻲ ﺗﻄﺒﯿﻖ ﻓﻠﺘﺮ اﻻﻟﺘﻔﺎف ﻋﻠﯿﮫﺎ‪ ،‬ﺑﺎﺳﺘﺨﺪام اﻟﻔﻠﺘﺮ اﻟﺤﯿﺰي ‪ ،S spatial filter‬ﻓﺈن‬
‫طﺮﻳﻘﺘﻨﺎ ﺳﺘﻜﻮن ﺑﻮﺿﻊ اﻟﻔﻠﺘﺮ ‪ S‬ﻋﻠﻰ ﻛﻞ ﺑﻜﺴﻞ ﻓﻲ ‪ M‬ﻋﻠﻰ اﻟﺪور‪ ،‬وﺣﺴﺎب اﻟﺠﺪاء ﻟﺠﻤﯿﻊ اﻟﻘﯿﻢ اﻟﺮﻣﺎدﻳﺔ‬
‫اﻟﻤﻨﺎظﺮة ﻓﻲ ‪ M‬ﻣﻊ ﻋﻨﺎﺻﺮ ‪ ،S‬وﺟﻤﻊ ﻧﺎﺗﺞ اﻟﺠﺪاء‪ .‬ﻧﺘﯿﺠﺔ ذﻟﻚ ﺗﺴﻤﻰ اﻻﻟﺘﻔﺎف اﻟﺮﻗﻤﻲ ﻟـ ‪ M‬و‪ ،S‬واﻟﺘﻲ ﺗﺼﺎغ‬
‫ﺑﺎﻟﺸﻜﻞ‪:‬‬
‫‪M * S.‬‬
‫ﻟﻜﻦ ھﺬه اﻟﻄﺮﻳﻘﺔ ﻟﺘﻄﺒﯿﻖ اﻻﻟﺘﻔﺎف ﺗﻌﺘﺒﺮ ﺑﻄﯿﺌﺔ ﺟﺪا‪ ،‬ﺧﺎﺻﺔ ﻟﻮ ﻛﺎﻧﺖ ‪ S‬ﻛﺒﯿﺮة‪ ،‬وﻗﺪ ﻧﺼﺖ ﻧﻈﺮﻳﺔ اﻻﻟﺘﻔﺎف‬
‫ﻋﻠﻰ أن اﻟﺠﺪاء ‪ M * S‬ﻳﻤﻜﻦ اﻟﺤﺼﻮل ﻋﻠﯿﻪ ﺑﺎﻟﺨﻄﻮات اﻟﻤﺘﺴﻠﺴﻠﺔ اﻟﺘﺎﻟﯿﺔ‪:‬‬
‫‪ .١‬اﻟﻘﯿﺎم ﺑﺤﺸﻮ ‪ Pad‬اﻟﻔﻠﺘﺮ ‪ S‬ﺑﺎﻷﺻﻔﺮ ﻣﻤﺎ ﻳﺠﻌﻠﻪ ﺑﻨﻔﺲ ﺣﺠﻢ ‪ M‬وﻳﺮﻣﺰ ﻟﻠﻨﺎﺗﺞ ﺑـ ﻟﻪ ﺑـ '‪.S‬‬
‫‪ .٢‬طﺒﻖ اﻟﺘﺤﻮﻳﻞ اﻷﺣﺎدي ‪ DFT‬ﻋﻠﻰ ﻛﻼ ﻣﻦ ‪ M‬و '‪ S‬ﻓﻨﺤﺼﻞ ﻋﻠﻰ )‪ F(M‬و )'‪.F(S‬‬
‫‪ .٣‬ﻗﻢ ﺑﺈﻳﺠﺎد ﺟﺪاء اﻟﺘﺤﻮﻳﻠﯿﻦ ﻋﻨﺼﺮ ﺿﺮب ﻋﻨﺼﺮ ‪ ،element-by-element product‬ﻟﮫﺬﻳﻦ اﻟﺘﺤﻮﻳﻠﯿﻦ‬
‫ﺑﺎﻟﺼﯿﻐﺔ‪:‬‬

‫‪ .٤‬ﺧﺬ اﻟﺘﺤﻮﻳﻞ اﻟﻌﻜﺴﻲ ﻟﻠﻨﺎﺗﺞ‪:‬‬


‫واﻋﺘﻤﺎدا ﻋﻠﻰ ھﺬه اﻟﺨﻮارزﻣﯿﺔ ﻓﺈﻧﻨﺎ ﻧﻠﺨﺺ ﻧﻈﺮﻳﺔ اﻻﻟﺘﻔﺎف ﺑﺎﻟﺼﯿﻐﺔ‪:‬‬

‫أو ﺑﺸﻜﻞ ﻣﻜﺎﻓﺊ ﺑـ‪:‬‬

‫ورﻏﻢ أﻧﮫﺎ ﻗﺪ ﺗﺒﺪو طﺮﻳﻘﺔ ﻣﻜﻠﻔﺔ وﻏﯿﺮ ﻣﻼﺋﻤﺎ ﻟﺤﺴﺎب أﻣﺮ ﻳﺒﺪو ﺑﺴﯿﻄﺎ ﻛﻤﺎ ﻧﻌﺮف ﻋﻦ ﻓﻠﺘﺮ اﻻﻟﺘﻔﺎف‪ ،‬ﻓﺈﻧﻪ‬
‫ﺗﻤﻜﻨﻨﺎ أن ﻧﺤﺼﻞ ﻋﻠﻰ ﻣﯿﺰة ﺳﺮﻋﺔ ﻋﺎﻟﯿﺔ إذا ﻛﺎﻧﺖ ‪ S‬ﻛﺒﯿﺮة‪.‬‬
‫ﻣﺜﻼ‪ ،‬ﻟﯿﻜﻦ ﻟﺪﻳﻨﺎ رﻏﺒﺔ ﻓﻲ ﺣﺴﺎب اﻻﻟﺘﻔﺎف ﻋﻠﻰ ﺻﻮرة ﺑﻌﺪھﺎ ‪ ،512 × 512‬ﻣﻊ ﻓﻠﺘﺮ ﺑﻌﺪه ‪ ،٣٢×٣٢‬ﻟﻔﻌﻞ‬
‫ذﻟﻚ ﺑﺎﻟﻄﺮﻳﻘﺔ اﻟﻤﺒﺎﺷﺮة ﻓﺈﻧﻪ ﻳﺘﻄﻠﺐ ‪ ٣٢٢‬أي ‪ ١٠٢٤‬ﻋﻤﻠﯿﺔ ﺿﺮب ﻟﻜﻞ ﺑﻜﺴﻞ أي ‪، 512 × 512 =٢٦٢١٤٤‬‬
‫وھﺬا ﻳﻌﻄﯿﻨﺎ أﺟﻤﺎﻟﻲ ﻣﻦ ﻋﻤﻠﯿﺎت اﻟﻀﺮب ﻗﺪره ‪ ٢٦٨٤٣٥٤٥٦‬ﻋﻤﻠﯿﺔ ﺿﺮب ﻣﻄﻠﻮﺑﺔ ﻓﻲ اﻟﻄﺮﻳﻘﺔ اﻟﻤﺒﺎﺷﺮة‪.‬‬
‫واﻵن ﺑﺎﻟﻨﻈﺮ إﻟﻰ ﻛﻠﻔﺔ اﺳﺘﺨﺪام اﻟـ ‪ ) DFT‬ﺑﺎﺳﺘﺨﺪام اﻟﺨﻮارزﻣﯿﺔ ‪ ،(FFT‬ﺣﯿﺚ ﺳﯿﻜﻮن ﻟﺪﻳﻨﺎ ‪ ٤٦٠٨‬ﻋﻤﻠﯿﺔ‬
‫ﻟﻜﻞ ﺻﻒ‪ ،‬ﺑﺎﻟﻨﻈﺮ إﻟﻰ اﻟﺠﺪول ‪ ٤.١‬أﻋﻼه اﻟﺬي ﻳﻮﺿﺢ ﻣﯿﺰات ﺧﻮارزﻣﯿﺔ اﻟﺘﺤﻮﻳﻞ اﻟﺴﺮﻳﻌﺔ‪ ،‬وﻷن ﻣﻌﻨﺎ ‪ ٥١٢‬ﺻﻔﺎ‬
‫ﻓﮫﺬا ﻳﻌﻨﻲ ‪ ٢٣٥٩٢٩٦ =٤٦٠٨×٥١٢‬ﻋﻤﻠﯿﺔ ﺿﺮب‪ ،‬وﻣﺜﻠﮫﺎ ﺑﺎﻟﻨﺴﺒﺔ ﻟﻀﺮب اﻷﻋﻤﺪة‪ ،‬وھﺬا ﻳﻌﻨﻲ اﻧﻨﺎ ﻧﺤﺘﺎج‬
‫ﻟﻠﺤﺼﻮل ﻋﻠﻰ اﻟﺘﺤﻮﻳﻞ ‪ DFT‬إﻟﻰ ‪ ٤٧١٨٥٩٢‬ﻋﻤﻠﯿﺔ ﺿﺮب‪ ،‬وﻣﺜﻠﮫﺎ ﻟﻠﺘﺤﻮﻳﻞ اﻟﺨﺎص ﺑﺎﻟﻔﻠﺘﺮ‪ ،‬إﺿﺎﻓﺔ إﻟﻰ اﻳﺠﺎد‬
‫ﻣﻌﻜﻮس اﻟﻔﻠﺘﺮ‪،‬وأﺧﯿﺮا ﻧﺤﺘﺎج إﻟﻰ ‪ 512 × 512‬ﻋﻤﻠﯿﺔ ﺿﺮب ﻣﻦ أﺟﻞ إﻧﺠﺎز ﺿﺮب اﻟﺘﺤﻮﻳﻠﯿﻦ ﻹﻳﺠﺎد اﻟﺠﺪاء‬
‫اﻟﻨﮫﺎﺋﻲ‪.‬‬
‫وھﻜﺬا ﻓﺈن إﺟﻤﺎل ﻋﻤﻠﯿﺎت اﻟﻀﺮب اﻟﺘﻲ ﻧﺤﺘﺎﺟﮫﺎ ﻹﻧﺠﺎز اﻻﻟﺘﻔﺎف ‪ convolution‬ﺑﺎﺳﺘﺨﺪام ‪ DFT‬ھﻲ‪:‬‬

‫وھﻲ ﻗﯿﻤﺔ ﺗﻌﻨﻲ ﺗﻮﻓﯿﺮا ﻛﺒﯿﺮا ﻓﻲ اﻟﻜﻠﻔﺔ ﻣﻘﺎرﻧﺔ ﺑﺎﻟﻄﺮﻳﻘﺔ اﻟﻤﺒﺎﺷﺮة اﻟﺘﻲ أوﺿﺤﻨﺎ ﺳﺎﺑﻘﺎ أﻧﮫﺎ‬
‫‪.‬‬
‫اﻟﻤﻌﺎﻣﻞ دي ﺳﻲ ‪:DC coefficient‬‬
‫إن ﻗﯿﻤﺔ )‪ F(0,0‬ﻟﻠﺘﺤﻮﻳﻞ ‪ DFT‬ﻳﺴﻤﻰ ﺑﺎﻟﻤﻌﺎﻣﻞ دي ﺳﻲ )‪ ،(DC coefficient‬ﻓﺈذا وﺿﻌﻨﺎ ‪ u=v=0‬ﻓﻲ‬
‫اﻟﺘﻌﺮﻳﻒ اﻟﻤﻌﻄﻰ ﺑﺎﻟﻤﻌﺎدﻟﺔ ‪ ،٤.٤‬ﻓﺈﻧﻨﺎ ﻧﺤﺼﻞ ﻋﻠﻰ ‪:‬‬

‫وھﺬا ﻳﻌﻨﻲ أن ھﺬا اﻟﻤﻌﺎﻣﻞ ﻳﺴﺎوي ﻣﺠﻤﻮﻋﺔ ﻛﻞ اﻟﻘﯿﻢ ﻓﻲ اﻟﻤﺼﻔﻮﻓﺔ اﻷﺻﻠﯿﺔ‪.‬‬


‫اﻟﺘﺒﺪﻳﻞ ‪:Shifting‬‬
‫ﻣﻦ أﺟﻞ أﻏﺮاض اﻟﻌﺮض ﻓﺈﻧﻪ ﻣﻦ اﻟﻤﺘﻌﺎرف ﻋﻠﯿﻪ أن ﻧﺠﻌﻞ اﻟﻤﻌﺎﻣﻞ ‪ DC‬ﻓﻲ ﻣﺮﻛﺰ اﻟﻤﺼﻔﻮﻓﺔ‪ ،‬ھﺬا ﻳﺘﻢ ﻓﻲ‬
‫اﻟﻤﺼﻔﻮﻓﺔ )‪ f(x,y‬إذا ﻗﻤﻨﺎ ﺑﻀﺮب ﺟﻤﯿﻊ أدﻟﺔ ﻋﻨﺎﺻﺮ اﻟﻤﺼﻔﻮﻓﺔ ﺑـﻘﯿﻤﺔ ﻗﺒﻞ ﺣﺴﺎب اﻟﺘﺤﻮﻳﻞ‪ ،‬ھﺬه اﻟﻘﯿﻤﺔ‬
‫ﻧﺘﺘﺞ ﻣﻦ داﻟﺔ ﻣﻌﯿﻨﺔ‪ ،‬واﻟﺬي ﻳﺤﺼﻞ داﺋﻤﺎ‪ ،‬أﻧﻪ إذا ﻛﺎﻧﺖ اﻟﻤﺼﻔﻮﻓﺔ اﺣﺎدﻳﺔ ﻓﺈن اﻟﻨﺼﻒ اﻟﺜﺎﻧﻲ ﻣﻦ ﻋﻨﺎﺻﺮ‬
‫ﻳﺘﺠﻪ ﻟﻠﺒﺪاﻳﺔ واﻟﻨﺼﻒ اﻷول ﻳﻌﻮد ﺑﻌﺪه‪ ،‬أﻣﺎ ﻓﻲ اﻟﻤﺼﻔﻮﻓﺔ ﺛﻨﺎﺋﯿﺔ اﻟﺒﻌﺪ ﻓﺈن ﻛﻞ رﺑﻌﯿﻦ ﻣﺘﻨﺎﺿﺮﻳﻦ ﻳﺘﺒﺎدﻻن‬
‫ﻣﻮاﻗﻌﮫﻤﺎ‪ ،‬ﻛﻤﺎ ھﻮ ﻣﻮﺿﺢ ﻓﻲ اﻟﻤﺜﺎل اﻟﺬي ﺑﺎﻟﺸﻜﻞ اﻟﺘﺎﻟﻲ‪ ،‬ﻳﺘﻢ ﺗﺒﺪﻳﻞ ‪ shifting‬اﻟﻤﺼﻔﻮﻓﺔ اﻟﺜﻨﺎﺋﯿﺔ‪ ،‬ﺣﯿﺚ‬
‫أن ‪ A‬ھﻲ ﺟﺰء اﻟﻤﺼﻔﻮﻓﺔ اﻟﺘﻲ ﺗﺤﺘﻮي ﻋﻠﻰ اﻟﻤﻌﺎﻣﻞ ‪ DC‬اﻟﻤﻘﺼﻮد‪.‬‬
‫ﻻﺣﻆ ﻛﯿﻒ ﺗﻤﺖ ﺗﻘﺴﯿﻢ اﻟﻤﺼﻔﻮﻓﺔ إﻟﻰ أرﺑﻌﺔ أرﺑﺎع ‪ A,B,C,D‬وﻛﯿﻒ ﺗﺒﺎدﻟﺖ ھﺬه اﻟﻤﺼﻔﻮﻓﺎت اﻟﺠﺰﺋﯿﺔ‬
‫ﻣﻮاﻗﻌﮫﺎ‪ ،‬وﻻﺣﻆ ﻣﻮﻗﻊ اﻟﻤﻌﺎﻣﻞ ‪ DC‬اﻟﺬي ﻛﺎن ﻳﻌﺘﺒﺮ أول اﻟﻌﻨﺎﺻﺮ ﻓﻲ اﻟﻤﺼﻔﻮﻓﺔ اﻟﺠﺰﺋﯿﺔ ‪ A‬واﻟﻤﻮﺿﺢ ﺑﺎﻟﻤﺮﺑﻊ‬
‫اﻷﺳﻮد‪ ،‬وﻛﯿﻒ اﻧﻪ اﻧﺘﻘﻞ ﺗﻤﺎﻣﺎ إﻟﻰ ﻣﺮﻛﺰ اﻟﻤﺼﻔﻮﻓﺔ ﺑﻌﺪ ﺗﺒﺪﻳﻠﮫﺎ‪.‬‬
‫اﻟﺘﻨﺎظﺮ اﻟﻤﻘﺘﺮن ‪Conjugate symmetry‬‬
‫إن ﺗﺤﻠﯿﻞ ﺗﺤﻮﻳﻞ ﻓﻮرﻳﯿﻪ ﻳﻘﻮدﻧﺎ إﻟﻰ اﻟﺨﺎﺻﯿﺔ اﻟﻤﺘﻨﺎظﺮة‪ ،‬ﻓﺈذا ﻗﻤﻨﺎ ﺑﺘﻐﯿﯿﺮ ﻗﯿﻢ اﻟﻤﻌﺎدﻟﺔ ‪ ٤.٤‬ﺑﺤﯿﺚ ﻳﻜﻮن ‪u=-‬‬
‫‪ u‬و ‪ ،v=-v‬ﻓﺈن اﻟﻤﻌﺎدﻟﺔ ﺳﺘﻜﻮن ﺑﺎﻟﺼﯿﻐﺔ‪:‬‬

‫وذﻟﻚ ﻷي ﻋﺪدﻳﻦ ﺻﺤﯿﺤﯿﻦ ‪ p‬و ‪ ،q‬أﻣﺎ ‪ M‬و ‪ N‬ﻓﮫﻤﺎ ﻛﻤﺎ ﻧﻌﻠﻢ ﺑﻌﺪا اﻟﻤﺼﻔﻮﻓﺔ اﻷﺻﻠﯿﺔ‪.‬‬
‫اﻟﻤﺼﻔﻮﻓﺔ اﻟﻨﺎﺗﺠﺔ ﺗﺪل ﻋﻠﻰ أن ﻧﺼﻒ اﻟﺘﺤﻮﻳﻞ ھﻮ ﻧﺴﺨﺔ ﻣﻌﻜﻮﺳﺔ‪ ،‬ﻛﺼﻮرة ﻓﻲ اﻟﻤﺮآة‪ ،‬ﻻﻗﺘﺮان اﻟﻨﺼﻒ‬
‫اﻵﺧﺮ‪ ،‬ﻧﺴﺘﻄﯿﻊ أن ﻧﻔﻜﺮ أن اﻟﻨﺼﻔﯿﻦ اﻟﻌﻠﻮي واﻟﺴﻔﻠﻲ أو أن اﻟﻨﺼﻔﯿﻦ اﻟﯿﻤﯿﻦ واﻟﺸﻤﺎل ھﻤﺎ ﻧﺴﺨﺔ‬
‫ﻣﻌﻜﻮﺳﺔ ﻟﻼﻗﺘﺮان اﻟﻨﺎﺗﺞ ﻣﻦ اﻟﻨﺼﻒ اﻵﺧﺮ‪ .‬اﻟﺸﻜﻞ اﻟﺘﺎﻟﻲ ﻳﻮﺿﺢ ھﺬا اﻟﺘﻨﺎظﺮ اﻟﻤﺘﻌﻠﻖ ﺑﺎﻟﺘﺤﻮﻳﻞ اﻟﻤﺒﺪل‬
‫‪ ،shifted DFT‬وﻛﻤﺎ ﻓﻲ اﻟﺸﻜﻞ اﻟﺴﺎﺑﻖ ﻓﺈن اﻟﻤﺮﺑﻊ اﻷﺳﻮد اﻟﺼﻐﯿﺮ ﻳﻮﺿﺢ ﻣﻮﻗﻊ اﻟﻤﻌﺎﻣﻞ ‪ ،DC‬واﻟﻤﻘﺼﻮد‬
‫ﺑﺎﻟﺘﻨﺎظﺮ أن اﻟﻤﻌﻠﻮﻣﺎت ﻳﻤﻜﻦ أن ﺗﻌﻄﻰ ﻟﻨﺼﻒ واﺣﺪ وﺗﻜﺮر ﻓﻘﻂ ﻟﻠﻨﺼﻒ اﻟﺜﺎﻧﻲ‪.‬‬

‫ﻋﺮض اﻟﺘﺤﻮﻳﻼت ‪Displaying transforms‬‬


‫ﻟﺪﻳﻨﺎ ﺗﺤﻮﻳﻞ ﻓﻮرﻳﯿﻪ )‪ F(u,v‬ﻟﻠﺼﻮرة )‪ ،f(x,y‬وﻧﺮﻏﺐ ﺑﻤﻌﺮﻓﺔ ﻛﯿﻒ ﻳﺒﺪو ﻛﺼﻮرة‪ ،‬ﻓﺈذا ﻛﺎﻧﺖ ﻋﻨﺎﺻﺮ )‪ F(u,v‬أﻋﺪاد‬
‫ﻣﺮﻛﺒﺔ ‪ ،complex numbers‬ﻓﺈﻧﻨﺎ ﻟﻦ ﻧﺴﺘﻄﯿﻊ ﻣﺸﺎھﺪة ﻗﯿﻤﮫﺎ ﻣﺒﺎﺷﺮة‪ ،‬ﻟﻜﻨﻨﺎ ﻧﺴﺘﻄﯿﻊ رؤﻳﺔ اﻟﻤﻘﺪار‬
‫|)‪ ،|F(u,v‬وﺑﻤﺎ أﻧﮫﺎ أﻋﺪاد ﻣﻦ اﻟﻨﻮع ‪ ،double‬وھﻲ ﻋﻤﻮﻣﺎ ذات ﻣﺪى ﻛﺒﯿﺮ‪ ،‬ﻓﺈن ﻟﺪﻳﻨﺎ طﺮﻳﻘﺘﯿﻦ ‪:‬‬
‫‪ .١‬إﻳﺠﺎد اﻟﻘﯿﻤﺔ اﻟﻌﻈﻤﻰ ‪ m‬ﻟـ |)‪ ،|F(u,v‬وھﺬا ﺳﯿﻜﻮن اﻟﻤﻌﺎﻣﻞ ‪ ،DC‬واﺳﺘﺨﺪام داﻟﺔ ﻋﺮض اﻟﺼﻮر‬
‫‪ imshow‬ﻣﻦ أﺟﻞ اﻟﻌﺮض ﺑﺎﻟﺸﻜﻞ‪:‬‬
‫;)‪imshow (|F(u,v)| / m‬‬
‫‪ .٢‬أو‪ ،‬اﺳﺘﺨﺪام اﻟﺪاﻟﺔ ‪ mat2gray‬ﻣﻦ أﺟﻞ ﻣﺸﺎھﺪة اﻟﻤﻘﺪار |)‪ |F(u,v‬ﻣﺒﺎﺷﺮة‪.‬‬
‫إﺣﺪى اﻟﻤﻌﻀﻼت ھﻲ أن اﻟـﻤﻌﺎﻣﻞ ‪ DC‬ھﻮ ﺑﺸﻜﻞ ﻋﺎم ﻛﺒﯿﺮ ﺟﺪا أﻛﺜﺮ ﻣﻦ ﺑﺎﻗﻲ اﻟﻘﯿﻢ‪ ،‬وھﺬا ﻳﺆﺛﺮ ﻋﻠﻰ ﻋﺮض‬
‫اﻟﺼﻮرة اﻟﻨﺎﺗﺠﺔ ﻣﻦ اﻟﺘﺤﻮﻳﻞ ﺟﺎﻋﻼ إﻳﺎه ﻧﻘﻄﺔ ﺑﯿﻀﺎء وﺣﯿﺪة ﻣﺤﺎطﺔ ﺑﺎﻷﺳﻮد‪ ،‬وإﺣﺪى طﺮق ﺗﻮﺳﯿﻊ اﻟﻘﯿﻢ ﺗﺘﻢ‬
‫ﺑﺈﻳﺠﺎد ﻟﻮﻏﺎرﻳﺘﻢ |)‪ |F(u,v‬وﻋﺮض اﻟﺼﯿﻐﺔ‪:‬‬
‫إن ﻋﺮض اﻟﻤﻘﺪار |)‪ |F(u,v‬ﻳﺴﻤﻰ طﯿﻒ اﻟﺘﺤﻮﻳﻞ ‪ ،the spectrum of the transform‬وﺳﻮف ﻧﺮى ﺑﻌﺾ‬
‫اﻷﻣﺜﻠﺔ ﻋﻦ ذﻟﻚ ﻻﺣﻘﺎ‪.‬‬
‫ﺗﺤﻮﻳﻞ ﻓﻮرﻳﯿﻪ ﻓﻲ اﻟﻤﺎﺗﻼب ‪Fourier transforms in Matlab‬‬
‫اﻟﺪوال اﻟﻤﻘﺎﺑﻠﺔ ﻟﻠﺼﯿﻎ اﻟﺮﻳﺎﺿﯿﺔ أﻋﻼه ﻓﻲ اﻟﻤﺎﺗﻼب ھﻲ‪:‬‬
‫اﻟﺪاﻟﺔ )(‪ fft‬اﻟﺘﻲ ﺗﺤﺴﺐ ﺗﺤﻮﻳﻞ ﻓﻮرﻳﯿﻪ ‪ DFT‬ﻋﻠﻰ ﻣﺘﺠﻪ ‪) vector‬ﻣﺼﻔﻮﻓﺔ أﺣﺎدﻳﺔ اﻟﺒﻌﺪ(‪.‬‬
‫اﻟﺪاﻟﺔ )( ‪ ifft‬اﻟﺘﻲ ﺗﺤﺴﺐ ﻣﻌﻜﻮس اﻟﺘﺤﻮﻳﻞ ‪ DFT‬ﻋﻠﻰ ﻣﺘﺠﻪ‪.‬‬
‫اﻟﺪاﻟﺔ )( ‪ fft2‬اﻟﺘﻲ ﺗﺤﺴﺐ اﻟﺘﺤﻮﻳﻞ ‪ DFT‬ﻋﻠﻰ ﻣﺼﻔﻮﻓﺔ ‪.matrix‬‬
‫اﻟﺪاﻟﺔ )( ‪ ifft2‬اﻟﺘﻲ ﺗﺤﺴﺐ ﻣﻌﻜﻮس اﻟﺘﺤﻮﻳﻞ ‪ DFT‬ﻋﻠﻰ ﻣﺼﻔﻮﻓﺔ‪.‬‬
‫اﻟﺪاﻟﺔ )(‪ fftshift‬اﻟﺘﻲ ﺗﺤﺴﺐ ﺗﺤﻮﻳﻞ ﻓﻮرﻳﯿﻪ ‪ DFT‬ﺛﻢ ﺗﻘﻮم ﺑﺘﺒﺪﻳﻞ اﻟﺘﺤﻮﻳﻞ ‪.shifting‬‬
‫وﻗﺒﻞ أن ﻧﻘﻮم ﺑﺘﻄﺒﯿﻖ ھﺬه اﻟﺪوال ﻋﻠﻰ اﻟﺼﻮر ﺳﻮف ﻧﺒﺪأ ﺑﺘﻄﺒﯿﻘﮫﺎ ﻋﻠﻰ ﻣﺼﻔﻮﻓﺎت ﺑﺴﯿﻄﺔ ﺣﺘﻰ ﻧﻔﮫﻢ‬
‫ﻛﯿﻔﯿﺔ ﻋﻤﻞ اﻟﺘﺤﻮﻳﻞ ‪:DFT‬‬
‫‪Example 1‬‬ ‫أﻣﺜﻠﺔ‪.١‬‬
‫ﻟﻨﻔﺘﺮض أن ﻟﺪﻳﻨﺎ اﻟﻤﺼﻔﻮﻓﺔ اﻟﺜﺎﺑﺘﺔ ‪ ،f(x,y)=1‬وﺑﺎﻟﻌﻮدة إﻟﻰ ﻓﻜﺮة ﺟﻤﻊ اﻟﺪوال اﻟﻤﺠﻌﺪة ‪،corrugations‬‬
‫ﺑﻌﺪھﺎ ﻟﻦ ﻳﻜﻮن ﻣﻦ اﻟﻤﻄﻠﻮب اﺳﺘﺨﺪام اﻟﺜﺎﺑﺖ‪ ،‬وﻛﺬﻟﻚ ﻧﺤﻦ ﻧﺮﻳﺪ أن ﺗﺘﻜﻮن داﻟﺔ اﻟﺘﺤﻮﻳﻞ ‪ DFT‬ﻣﻦ اﻟﻤﻌﺎﻣﻞ‬
‫‪ DC‬ﻣﺤﺎطﺎ ﺑﻘﯿﻢ ﺻﻔﺮﻳﺔ ﻣﺎ أﻣﻜﻦ‪ ،‬ﻓﺴﻮف ﻧﺴﺘﺨﺪم اﻟﺪاﻟﺔ ‪ ones‬اﻟﺘﻲ ﺗﻨﺘﺞ ﻟﻨﺎ ﻣﺼﻔﻮﻓﺔ واﺣﺪات )ﻛﻞ ﻗﯿﻤﮫﺎ‬
‫واﺣﺪ(‪ ،‬ﺣﺴﺐ أﺑﻌﺎد ﻣﺮﺑﻌﺔ ﻣﻌﻄﺎة ﻟﮫﺎ‪.‬‬
‫;)‪>> a=ones(8‬‬
‫)‪>> fft2(a‬‬
‫وﻟﻨﺘﺘﺒﻊ ﺗﻨﻔﯿﺬ اﻟﺴﻄﺮﻳﻦ أﻋﻼه ﻓﻲ اﻟﻤﺎﺗﻼب ﻓﻲ اﻟﺸﻜﻠﯿﻦ اﻟﺘﺎﻟﯿﯿﻦ‪:‬‬

‫ﻻﺣﻆ ﻣﻌﺎﻣﻞ ‪ 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‬ھﻲ اﻟﻨﺘﯿﺠﺔ اﻟﻤﻄﻠﻮﺑﺔ‪:‬‬

‫دﻋﻨﺎ ﻧﺮى ﻣﺎ ﻳﺤﺪث إذا ﻗﻤﻨﺎ ﺑﺘﻄﺒﯿﻖ ھﺬا اﻟﻔﻠﺘﺮ ﻋﻠﻰ اﻟﺼﻮرة‪ ،‬ﻧﺤﺼﻞ أوﻻ اﻟﺼﻮرة ﺛﻢ ﻋﻠﻰ اﻟﺘﺤﻮﻳﻞ اﻟﺨﺎص‬
‫ﺑﮫﺎ‪:‬‬

‫!‬ ‫__ ‪_ _ $‬‬


‫;)'‪>> cm=imread('cameraman.tif‬‬
‫;))‪>> cf=fftshift(fft2(cm‬‬
‫)'‪>> figure,fftshow(cf,'log‬‬
‫اﻟﺸﻜﻞ اﻟﺘﺎﻟﻲ ﻳﻮﺿﺢ ﺻﻮرة رﺟﻞ اﻟﻜﺎﻣﯿﺮا اﻟﺮﻣﺎدﻳﺔ اﻟﺘﻲ ﻧﻌﺮﻓﮫﺎ ﻣﻊ ﺻﻮرة اﻟﺘﺤﻮﻳﻞ ﻓﻲ اﻟﻜﻮد اﻟﺴﺎﺑﻖ‪:‬‬

‫واﻵن ﻟﻨﻘﻢ ﺑﺈﺟﺮاء اﻟﻔﻠﺘﺮ ﻣﻨﺨﻔﺾ اﻟﻌﺒﻮر ﻋﻠﯿﮫﺎ ﺑﻀﺮب ﻣﺼﻔﻮﻓﺔ اﻟﺘﺤﻮﻳﻞ ﺑﻤﺼﻔﻮﻓﺔ اﻟﺪاﺋﺮة‪ ،‬ﺗﺬﻛﺮ اﺳﺘﺨﺪام‬
‫ﻣﺆﺛﺮ اﻟﺪوت ‪ 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‬ﻋﻠﻰ ﺣﻮاف اﻟﺼﻮرة‪ ،‬ھﺬا ﻧﺎﺗﺞ ﻋﻦ اﻟﺘﻘﻄﻌﺎت‬
‫اﻟﺤﺎﺻﻠﺔ ﻣﻦ اﻟﺪاﺋﺮة‪ ،‬واﻟﺬي ﻳﻨﺘﻘﻞ إﻟﻰ اﻟﺼﻮرة‪.‬‬
‫وﺳﻮف ﻧﺘﻮﻗﻊ داﺋﻤﺎ اﻧﻪ ﻛﻠﻤﺎ ﺻﻐﺮت اﻟﺼﻮرة ﻛﻠﻤﺎ زادت اﻟﺘﻠﻄﺨﺎت ﻓﻲ اﻟﺼﻮرة‪ ،‬وأﻧﻪ ﻛﻠﻤﺎ ﻛﺒﺮت اﻟﺪاﺋﺮة ﻛﻠﻤﺎ‬
‫ﻗﻠﺖ اﻟﻠﻄﺨﺎت‪ ،‬اﻟﺸﻜﻞ اﻟﺘﺎﻟﻲ ﻳﻮﺿﺢ ذﻟﻚ‪ ،‬ﺑﺎﺳﺘﺨﺪام اﻟﻘﻄﻊ ‪ ٥‬واﻟﻘﻄﻊ ‪ ،٣٠‬ﻻﺣﻆ اﺳﺘﻤﺮار وﺟﻮد اﻟﺤﻠﻘﺎت‬
‫ﻣﻊ ﺗﻐﯿﯿﺮ ﻗﯿﻤﺔ اﻟﻘﻄﻊ‪.‬‬

‫اﻟﻔﻠﺘﺮة ﻋﺎﻟﯿﺔ اﻟﻌﺒﻮر ‪High pass filtering‬‬


‫ﺑﻨﻔﺲ اﺳﻠﻮب اﻟﻔﻠﺘﺮة ﻣﻨﺨﻔﻀﺔ اﻟﻌﺒﻮر إﻻ أﻧﻨﺎ ﺳﻮف ﻧﻌﻜﺲ اﻟﻌﻤﻠﯿﺔ‪ ،‬ﻓﺴﻮف ﻧﺤﺬف أو ﻧﺘﺠﺎھﻞ اﻟﻘﯿﻢ ﺣﻮل‬
‫اﻟﻤﺮﻛﺰ وﻧﺤﺎﻓﻆ ﻋﻠﻰ اﻟﻘﯿﻢ اﻷﺧﺮى‪ ،‬ﺳﻨﻄﺒﻖ ذﻟﻚ ﺑﺘﻌﺪﻳﻞ ﺛﺎﻧﻮي ﻋﻠﻰ ﻣﺎ ﻓﻌﻠﻨﺎه ﺳﺎﺑﻘﺎ‪ ،‬وﻟﻨﺒﺪأ ﺑﻜﻮد إﻧﺸﺎء‬
‫اﻟﺪاﺋﺮة‪:‬‬
‫;)‪>> [x,y]=meshgrid(-128:127,-128:127‬‬
‫;)‪>> z=sqrt(x.^2+y.^2‬‬
‫;)‪>> c=(z>15‬‬
‫ﻻﺣﻆ اﻟﻔﺎرق ﺑﯿﻦ ھﺬه اﻟﺪاﺋﺮة وﺳﺎﺑﻘﺘﮫﺎ‪ ،‬ﺛﻢ ﻟﻨﻘﻢ ﺑﻀﺮب اﻟﻔﻠﺘﺮ‪/‬اﻟﺪاﺋﺮة ﺑﺎﻟﺘﺤﻮﻳﻞ اﻟﺬي ﺣﺼﻠﻨﺎ ﻋﻠﯿﻪ ﺳﺎﺑﻘﺎ‪.‬‬
‫;‪>> cfh=cf.*c‬‬
‫)'‪>> figure,fftshow(cfh,'log‬‬
‫ﺛﻢ ﻟﻨﻘﻢ ﺑﻌﻜﺲ اﻟﺘﺤﻮﻳﻞ ﻛﻤﺎ ﻓﻲ اﻟﻜﻮد اﻟﺘﺎﻟﻲ‪:‬‬
‫;)‪>> cfhi=ifft2(cfh‬‬
‫)'‪>> figure,fftshow(cfhi,'abs‬‬
‫وﻧﺘﯿﺠﺔ ذﻟﻚ ﻣﻮﺿﺤﺔ ﺑﺎﻟﺸﻜﻞ‪:‬‬

‫وﻛﻤﺎ ﺣﺼﻞ ﻓﻲ اﻟﻔﻠﺘﺮة اﻟﻤﻨﺨﻔﻀﺔ ﺣﺠﻢ اﻟﺪاﺋﺮة ﺗﺄﺛﺮ ﺑﺎﻟﻤﻌﻠﻮﻣﺎت اﻟﻤﺘﺎﺣﺔ ﻟﻌﻜﺲ اﻟﺘﺤﻮﻳﻞ‪ ،‬وﻛﺬﻟﻚ ﺑﺎﻟﻨﺴﺒﺔ‬
‫ﻟﻠﻨﺘﺎﺋﺞ اﻟﻨﮫﺎﺋﯿﺔ ﻣﻊ اﺧﺘﻼﻓﮫﺎ‪ .‬اﻟﺸﻜﻞ اﻟﺘﺎﻟﻲ ﻳﻮﺿﺢ ﺗﻄﺒﯿﻖ اﻟﻔﻠﺘﺮ ﻋﺎﻟﻲ اﻟﻌﺒﻮر ﻋﻠﻰ ﻣﺨﺘﻠﻒ ﻗﯿﻢ اﻟﻘﻄﻊ‬
‫)ﻗﯿﻤﺔ ‪ 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‬‬
‫واﻟﺸﻜﻞ اﻟﺘﺎﻟﻲ ﻳﻮﺿﺢ ﻧﺘﺎﺋﺞ ﻓﻠﺘﺮ ﺟﺎوﺳﯿﺎن ﻋﺎﻟﻲ اﻟﻌﺒﻮر ﻋﻠﻰ ﻧﻔﺲ اﻟﺼﻮرة‪:‬‬
‫ﻣﺪﺧﻞ إﻟﻰ ﻣﻌﺎﻟﺠﺔ اﻟﺼﻮر ﻣﻊ اﻟﻤﺎﺗﻼب ـ ﺗﺮﺟﻤﺔ ﻓﮫﺪ أل ﻗﺎﺳﻢ ‪fhdalqasem@yahoo.com‬‬

‫اﻟﻤﺤﺘﻮى‪:‬‬
‫‪ -‬اﺳﺘﻌﺎدة اﻟﺼﻮرة ‪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‬‬
‫ﺛﻢ ﻟﻨﻘﻮم ﺑﻌﻜﺲ ﻧﺎﺗﺞ اﻟﺘﺤﻮﻳﻞ وﻟﻨﺮاﻗﺐ اﻟﻨﺘﯿﺠﺔ‪.‬‬
‫ھﻨﺎك ﺑﺎﻟﻄﺒﻊ ﻋﺪة طﺮق ﻣﺨﺘﻠﻔﺔ وﻣﻄﻮﻟﺔ ﻟﻤﻌﺎﻟﺠﺔ اﻟﺘﺸﻮش اﻟﺪوري اﻟﺬي ﻳﻌﺘﺒﺮ ﻣﻦ اھﻢ اﻟﻤﻮاﺿﯿﻊ ﻓﻲ‬
‫ﻣﻌﺎﻟﺠﺔ اﻟﺼﻮر ﻟﻜﻨﻨﺎ ﻧﻜﺘﻔﻲ ﺑﮫﺬا اﻟﻤﺜﺎل ﻛﻨﻤﻮذج ﻧﻈﺮا ﻟﻀﯿﻖ اﻟﻮﻗﺖ‪.‬‬

‫ﺗﻘﺴﯿﻢ اﻟﺼﻮرة ‪image segmentation‬‬


‫ﻳﻘﺼﺪ ﺑﺎﻟﺘﻘﺴﯿﻢ ﺗﺠﺰﺋﺔ اﻟﺼﻮرة إﻟﻰ ﻋﻠﻰ ﻋﺪة ﻣﻜﻮﻧﺎت أو إﻟﻰ ﻛﺎﺋﻨﺎت ﻣﻨﻔﺼﻠﺔ واھﻢ ﻣﻮاﺿﯿﻌﻪ ھﻲ‪:‬‬
‫‪ (١‬اﻟﻘﯿﻤﺔ اﻟﮫﺪف )اﻟﻌﺘﺒﺔ( ‪threshold‬‬
‫‪ (٢‬اﻛﺘﺸﺎف ﺣﻮاف ﻛﺎﺋﻨﺎت اﻟﺼﻮرة ‪edge detection‬‬
‫اﻟﺒﺤﺚ ﻋﻦ اﻟﻘﯿﻤﺔ اﻟﮫﺪف )اﻟﻌﺘﺒﺔ( ‪thresholding‬‬
‫اﻟﻘﯿﻤﺔ اﻟﮫﺪف او اﻟﻌﺘﺒﺔ ھﻲ ﻗﯿﻤﺔ ﻣﻦ ﻗﯿﻢ ﻛﺜﺎﻓﺎت اﻟﻤﺴﺘﻮى اﻟﺮﻣﺎدي ﻓﻲ اﻟﺼﻮرة واﻟﺘﻲ ﺗﺤﺪد اﻟﻜﺎﺋﻨﺎت‬
‫اﻷﻣﺎﻣﯿﺔ ‪ foreground‬ﻓﻲ اﻟﺼﻮرة ﻣﻦ اﻟﻜﺎﺋﻨﺎت اﻟﺨﻠﻔﯿﺔ ‪.background‬‬
‫ﻣﺜﻼ ﻋﻨﺪﻣﺎ ﻧﻘﻮل أن ﺗﻜﻮن ﻋﻨﺪﻧﺎ ‪ t‬ﺑﯿﺎﻧﺎت ﺻﻮرة رﺟﻞ اﻟﻜﺎﻣﯿﺮا واردﻧﺎ اظﮫﺎر اﻟﻜﺎﺋﻨﺎت اﻟﺘﻲ ﻓﻲ اﻟﺼﻮرة ﻓﻘﻂ‬
‫ﺑﺪون اﻟﺨﻠﻔﯿﺔ ﻓﺈﻧﻨﺎ ﻗﺪ ﻧﻜﺘﺐ‪:‬‬
‫;)‪>> imshow( t>100‬‬
‫اﻷﻣﺮ اﻟﺴﺎﺑﻖ ﻳﻈﮫﺮ ﻟﻨﺎ اﻟﺼﻮرة ﺑﻘﯿﻤﺘﯿﻦ اﺑﯿﺾ واﺳﻮد ﻓﻘﻂ ‪ ..‬اﺳﻮد ﻟﻠﺨﻠﻔﯿﺔ واﺑﯿﺾ ﻟﻜﺎﺋﻨﺎت اﻟﺼﻮرة ﺣﺴﺐ‬
‫اﻟﺜﺮﻳﺸﻮﻟﺪ اﻟﻤﺤﺪد وھﻮ اﻟﻘﯿﻤﺔ ‪.١٠٠‬‬
‫وﺑﺎﻟﻄﺒﻊ ﻟﻜﻞ ﺻﻮرة ﻗﯿﻤﺔ ھﺪف )ﺛﺮﻳﺸﻮﻟﺪ ‪ (threshold‬ﺧﺎﺻﺔ ﺑﮫﺎ‪ ،‬ھﺬه اﻟﻘﯿﻤﺔ ﻧﺤﺘﺎﺟﮫﺎ داﺋﻤﺎ ﻋﻨﺪ ﺗﺤﻮﻳﻞ‬
‫اﻟﺼﻮرة اﻟﺮﻣﺎدﻳﺔ )ﺗﺪرج اﻟﺮﻣﺎدي ‪ (grayscale‬إﻟﻰ ﺻﻮرة ﺛﻨﺎﺋﯿﺔ ‪ ،binary‬وذﻟﻚ ﺑﺎﺳﺘﺨﺪام اﻟﺪاﻟﺔ ‪ im2bw‬اﻟﺘﻲ‬
‫ﻟﮫﺎ اﻟﺸﻜﻞ‪:‬‬
‫;)‪Bw= im2bw ( im , level‬‬
‫ﺣﯿﺚ ان اﻟﻤ ُ ﻌﺎﻣﻞ ‪ level‬ﻳﻘﺼﺪ ﺑﻪ اﻟﻘﯿﻤﺔ اﻟﮫﺪف اﻟﺘﻲ ﺗﺤﺪد ﻓﺼﻞ ﻛﺎﺋﻨﺎت اﻟﺼﻮرة ﻋﻦ ﺧﻠﻔﯿﺘﮫﺎ‪.‬‬
‫وﻳﻌﺒﺮ رﻳﺎﺿﯿﺎ ﻋﻦ اﻟﻘﯿﻤﺔ اﻟﮫﺪف ﺑﺎﻟﺼﯿﻐﺔ‪:‬‬

‫وھﻨﺎك داﻟﺔ ﺟﺎھﺰة ﺗﺤﺎول اﻛﺘﺸﺎف اﻟﻘﯿﻤﺔ اﻟﮫﺪف )اﻟﻌﺘﺒﺔ( ﺑﺎﺳﺘﺨﺪام طﺮق رﻳﺎﺿﯿﺔ اﺣﺼﺎﺋﯿﺔ ھﺬه اﻟﺪاﻟﺔ‬
‫ھﻲ‪:‬‬
‫;)‪thr=graythresh(t‬‬
‫ﺣﯿﺚ ‪ t‬ھﻲ اﻟﺼﻮرة اﻟﻤﻄﻠﻮﺑﺔ‪.‬‬
‫ھﺬه اﻟﺪاﻟﺔ ﺗﻨﻔﺬ اﻓﺘﺮاﺿﯿﺎ ﻓﻲ اﻟﺪاﻟﺔ ‪ im2bw‬ﻻﺣﺘﺴﺎب ﻗﯿﻤﺔ اﻟﻤ ُﻌﺎﻣﻞ ‪ ،level‬ﻟﮫﺬا ﻧﻜﺘﻔﻲ ﻋﺎدة ﺑﻜﺘﺎﺑﺔ‪:‬‬
‫;)‪Bw= im2bw (t‬‬
‫أو‪:‬‬
‫;))‪Bw= im2bw (t,graythresh(t‬‬
‫وﻷﻧﻨﺎ ﻧﺘﻌﺎﻣﻞ ﺣﺴﺎﺑﯿﺎ ﻓﻲ اﻟﻤﺎﺗﻼب داﺋﻤﺎ ﻣﻊ ﻗﯿﻤﺔ ﺣﻘﯿﻘﯿﺔ ‪ double‬ﻓﺈن ﻗﯿﻤﺔ اﻟﺜﺮﻳﺸﻮﻟﺪ ﺗﻜﻮن ) ‪1 > T > 0‬‬
‫(‪ ،‬وﻳﻤﻜﻦ ﺗﺤﻮﻳﻠﮫﺎ إﻟﻰ اﻟﻨﻄﺎق ]‪ [0,255‬ﺑﻀﺮﺑﮫﺎ ﻓﻲ ‪.٢٥٥‬‬
‫اﻟﺜﺮﻳﺸﻮﻟﺪ اﻟﻤﺰدوج ‪:‬‬
‫اﺣﯿﺎﻧﺎ ﻧﺤﺘﺎج إﻟﻰ وﺿﻊ ﻗﯿﻤﺘﻲ ھﺪف ﻟﻠﺼﻮرة ﻟﺘﺤﻮﻳﻠﮫﺎ إﻟﻰ اﻟﻨﻈﺎم اﻟﺜﻨﺎﺋﻲ ﻧﺴﺘﺨﺪم ﻋﻨﺪﺋﺬ ‪ T1‬و ‪ T2‬ﺑﺤﯿﺚ‬
‫ﺗﺘﺤﻘﻖ اﻟﺼﯿﻐﺔ‪:‬‬

‫ﺗﻄﺒﯿﻘﺎت اﻟﺜﺮﻳﺸﻮﻟﺞ‪ /‬اﻟﻌﺘﺒﺔ‪ /‬اﻟﻘﯿﻤﺔ اﻟﮫﺪف ھﻲ‪:‬‬


‫‪ .١‬اﻛﺘﺸﺎف اﻻﺟﺴﺎم اﻟﺮﺋﯿﺴﯿﺔ ﻓﻲ اﻟﺼﻮرة‪.‬‬
‫‪ .٢‬اظﮫﺎر اﻟﺘﻔﺎﺻﯿﻞ اﻟﻤﺨﻔﯿﺔ ﻓﻲ اﻟﺼﻮرة‪.‬‬
‫‪ .٣‬ﺣﺬف اﻟﺨﻠﻔﯿﺔ ووﺿﻊ ﺧﻠﻔﯿﺔ ﺑﺪﻳﻠﺔ‪.‬‬
‫وﺳﻨﻜﺘﻔﻲ ھﻨﺎ ﺑﻤﺜﺎل ﻳﻮﺿﺢ اﻟﺘﻄﺒﯿﻖ اﻷول‪).‬ﻟﺒﻘﯿﺔ اﻟﺘﻄﺒﯿﻘﺎت ﻳﺮﺟﻰ اﻟﻌﻮدة ﻟﻠﻜﺘﺎب(‪.‬‬
‫;)'‪>> r=imread('rice.tif‬‬
‫;)‪>> imshow(r),figure,imshow(r>110‬‬
‫ﺣﯿﺚ اﺳﺘﺨﺪﻣﻨﺎ ھﻨﺎ ‪ T=110‬ﻻﻛﺘﺸﺎف اﻻﺟﺴﺎم ﻓﻲ اﻟﺼﻮرة اﻟﻤﻮﺿﺤﺔ‪.‬‬
‫اﻛﺘﺸﺎف ﺣﻮاف ﻛﺎﺋﻨﺎت اﻟﺼﻮرة ‪edge detection‬‬
‫ﻳﺘﻢ اﺳﺘﺨﺪام اﻟﺪاﻟﺔ ‪ edge‬ﻻﻛﺘﺸﺎف ﺣﻮاف ﻛﺎﺋﻨﺎت اﻟﺼﻮرة‪ ،‬أي ﻟﺮﺳﻢ اﻟﺼﻮرة ﻣﻊ وﺿﻊ ﺣﺪود ﺑﯿﻀﺎء ﻋﻠﻰ‬
‫اﻻﺟﺴﺎم اﻟﺘﻲ ﺗﺘﻜﻮن ﻣﻨﮫﺎ اﻟﺼﻮرة‪.‬‬
‫;)‪>> edge (im, 'method', parameters‬‬
‫ﻛﻤﺎ ﻓﻲ داﻟﺔ اﻟﻔﻠﺘﺮ ﻓﺈن اﻟﺪاﻟﺔ ‪ edge‬ﺗﺴﺘﺨﺪم ﻋﺪة طﺮق واﻟﻄﺮﻳﻘﺔ اﻻﻓﺘﺮاﺿﯿﺔ ھﻲ '‪ 'sobel‬وھﻲ اﺣﺪى‬
‫اﻟﻄﺮق اﻟﻜﻼﺳﯿﻜﯿﺔ ﻻﻛﺘﺸﺎف اﻟﺤﻮاف‪ ،‬ﻛﻤﺎ ان ﻟﻜﻞ طﺮﻳﻘﺔ اﻟﻤ ُﻌﺎﻣﻼت اﻟﺨﺎﺻﺔ ﺑﮫﺎ‪.‬‬
‫اﻟﻤﺜﺎل اﻟﺘﺎﻟﻲ ﻳﻮﺿﺢ ﺗﻄﺒﯿﻖ اﻟﺪاﻟﺔ ﻋﻠﻰ اﻟﺼﻮرة ‪ r‬ﺳﺎﺑﻘﺎ‪،‬‬
‫;)'‪>> r=imread('rice.tif‬‬
‫;)‪>> redg=edge(r‬‬
‫;)‪>> imshow (redg‬‬
‫وﻻﺣﻆ ﻣﻌﻲ ان اﻟﺪاﻟﺔ ‪ edge‬ﺗﻘﻮم ﺑﻌﺮض اﻟﺼﻮرة اﻟﻤﺤﺪدة اﻓﺘﺮاﺿﯿﺎ أي ﻟﺴﻨﺎ ﺑﺤﺎﺟﺔ ﻟﻸﻣﺮ ‪ ،imshow‬ھﻜﺬا‪:‬‬
‫;)‪>> edge(r‬‬
‫ﻻﺣﻆ اﻳﻀﺎ أن اﻟـ '‪ 'method‬اﻻﻓﺘﺮاﺿﯿﺔ ھﻨﺎ ھﻲ طﺮﻳﻘﺔ ﺳﻮﺑﻞ ﻻﻛﺘﺸﺎف اﻟﺤﻮاف وھﻨﺎك طﺮق أﺧﺮى‬
‫ﺗﺴﺘﻄﯿﻊ اﻟﺘﻌﺮف ﻋﻠﯿﮫﺎ ﺑﺎﻟﺒﺤﺚ ﻋﻦ اﻟﺪاﻟﺔ ﻓﻲ ﺑﯿﺌﺔ اﻟﻤﺎﺗﻼب ﻧﺬﻛﺮ ﻣﻨﮫﺎ‪:‬‬
‫ﻓﻠﺘﺮ ﺑﺮﻳﻮﻳﺖ ‪:‬‬
‫;)'‪>> redg=edge(r,'prewitt‬‬
‫ﻓﻠﺘﺮ روﺑﺮت‬
‫;)'‪>> redg=edge(r,'robert‬‬
‫وھﺬه ﻣﻦ اﻟﻔﻠﺘﺮات اﻟﻜﻼﺳﯿﻜﯿﺔ اﻳﻀﺎ اﻟﺘﻲ ﺗﺴﺨﺪم ﺗﻘﻨﯿﺔ اﻟﻤﺸﺘﻘﺔ اﻷوﻟﻰ‪ ،‬اﻣﺎ اﻟﻔﻠﺘﺮﻳﻦ اﻟﻤﮫﻤﯿﻦ‬
‫واﻟﻤﺴﺘﺨﺪﻣﯿﻦ ﻋﺎدة ﻓﮫﻤﺎ‪:‬‬
‫ﻓﻠﺘﺮ ﻟﻮج )ﻻﺑﻼﺳﯿﺎن ﻋﻠﻰ ﺟﺎوﺳﯿﺎن(‬
‫;)'‪>> redg=edge(r,'log‬‬
‫وﻓﻠﺘﺮ ﻛﺎﻧﻲ‬
‫;)'‪>> redg=edge(r,'canny‬‬
‫ﺗﻤﺮﻳﻦ‪:‬‬
‫ﻳﺮﺟﻰ ﺗﻄﺒﯿﻖ ﺟﻤﯿﻊ ھﺬه اﻟﻔﻼﺗﺮ وﻣﻘﺎرﻧﺔ اﻟﻔﺎرق واﻳﻀﺎ اﺿﺎﻓﺔ ﻣﻌﺎﻣﻼﺗﮫﺎ واﻟﺘﻄﺒﯿﻖ ﻋﻠﻰ ﺻﻮر ﻣﺨﺘﻠﻔﺔ‪.‬‬

‫ﻣﻌﺎﻟﺠﺔ اﻟﺼﻮر اﻟﻤﻠﻮﻧﺔ ‪color image processing‬‬


‫ھﻨﺎك ﻋﺪة طﺮق ﻟﺘﻤﺜﯿﻞ اﻟﻠﻮن ﻓﻲ ﻣﻌﺎﻟﺠﺔ اﻟﺼﻮرة اﻟﺮﻗﻤﯿﺔ‪ ،‬وأﺷﮫﺮ ھﺬه اﻟﻄﺮق ھﻲ ‪ RGB‬وھﻲ اﻟﻄﺮﻳﻘﺔ‬
‫اﻟﻤﻌﺘﻤﺪة ﻟﻌﺮض اﻟﺼﻮرة اﻟﺤﻘﯿﻘﯿﺔ‪ ،‬إﻻ أﻧﮫﺎ ﻟﻸﺳﻒ ﻻ ﺗﻤﺜﻞ اﻟﻄﺮﻳﻘﺔ اﻟﻤﺜﻠﻰ ﻓﻲ اﻟﻤﻌﺎﻟﺠﺔ‪ ،‬ﻓﻜﺜﺎﻓﺔ اﻟﻠﻮن‬
‫اﻷﻛﺜﺮ ﺣﻀﻮرا ﻣﺜﻼ ھﻲ اﻟﺨﯿﺎر اﻟﺬي ﻳﺆﺛﺮ أﻛﺜﺮ ﻋﻠﻰ اﻟﺼﻮرة‪ ،‬وﻋﻠﻰ ھﺬا ﻓﻤﻦ اﻟﺼﻌﺐ ﻣﻌﺮﻓﺔ ذﻟﻚ اﻟﻠﻮن رﻳﺎﺿﯿﺎ‬
‫ﺛﻢ اﺳﺘﺨﺪاﻣﻪ‪.‬‬
‫ﺳﻮف ﻧﺴﺘﻌﺮض ﻓﯿﻤﺎ ﻳﻠﻲ طﺮﻳﻘﺘﯿﻦ أﺳﺎﺳﯿﺘﯿﻦ ﻟﺘﻤﺜﯿﻞ اﻻﻟﻮان ﻣﻦ ﺿﻤﻦ ﺟﻤﻠﺔ ﻛﺒﯿﺮة ﻣﻦ اﻟﻄﺮق اﻟﻤﺘﺒﻌﺔ‪:‬‬
‫اﻟﻄﺮﻳﻘﺔ اﻟﺜﺎﻧﯿﺔ ‪YIQ‬‬ ‫اﻟﻄﺮﻳﻘﺔ اﻷوﻟﻰ ‪HSV‬‬
‫أﺳﻠﻮب ‪HSV‬‬
‫ھﺬا اﻟﻨﻈﺎم ﻳﻤﺜﻞ اﻟﻠﻮن ﺑﺜﻼﺛﺔ ﻗﯿﻤﺔ ھﻲ‪.value ، saturation ، hue:‬‬
‫ﺣﯿﺚ ‪ hue‬ھﻲ اﻟﻠﻮن اﻟﻄﯿﻔﻲ اﻟﻤﻌﺮوف‪ ،‬و ‪ saturation‬ﻧﺴﺒﺔ اﻻﺷﺒﺎع ﺑﺎﻟﻠﻮن اﻻﺑﯿﺾ‪ ،‬اﻣﺎ ‪ value‬ﻓﺸﺪة‬
‫اﻟﻠﻤﻌﺎن او درﺟﺔ اﻟﺴﻄﻮع‪.‬‬
‫وھﺬه ھﻲ أﻓﻀﻞ وأﺷﮫﺮ اﻟﻄﺮق اﻟﻤﺘﺒﻌﺔ ﻟﻠﺘﻌﺎﻣﻞ ﻣﻊ اﻷﻟﻮان‪ ،‬وﻳﺘﻢ اﺳﺘﺨﺪام ﻣﻌﺎدﻻت رﻳﺎﺿﯿﺔ اﺣﺼﺎﺋﯿﺔ‬
‫ﻣﻌﺮوﻓﺔ ﻟﻠﺘﺤﻮﻳﻞ ﻣﻦ اﻷﺳﻠﻮب ‪ RBG‬إﻟﻰ ‪ ،HSV‬أﻣﺎ ﻓﻲ اﻟﻤﺎﺗﻼب ﻓﻨﺴﺘﺨﺪم اﻟﺪاﻟﺘﯿﻦ ‪ hsv2rbg‬أو ‪.rgb2hsv‬‬
‫أﺳﻠﻮب ‪YIQ‬‬
‫ھﻮ اﻟﻨﻈﺎم اﻟﻤﻌﺘﻤﺪ ﻟﺪى ھﯿﺌﺔ ‪ ntsc‬اﻻﻣﺮﻳﻜﯿﺔ‪ ،‬وﻳﺘﻤﯿﺰ ﺑﻔﺼﻞ اﻟﻜﺜﺎﻓﺔ ‪ intensity‬ﻋﻦ اﻟﻠﻮن ‪ ،color‬ﺣﯿﺚ ﻳﺘﻢ‬
‫وﺿﻊ اﻟﻜﺜﺎﻓﺔ ﻓﻲ اﻟﻤﺘﻐﯿﺮ اﻷول ‪ Y‬وﻣﻌﻠﻮﻣﺎت اﻻﻟﻮان ﺗﻜﻮن ﻓﻲ اﻟﻤﺘﻐﯿﺮات ‪ I‬و ‪.Q‬‬
‫وھﺬا ھﻮ اﻟﻨﻮع اﻟﻤﺴﺘﺨﺪم ﻓﻲ ﻣﻌﺎﻟﺠﺔ اﻟﺼﻮرة اﻟﻤﻠﻮﻧﺔ ﺣﯿﺚ ﻳﺘﻢ اﻟﺘﻌﺎﻣﻞ ﻣﻊ اﻟﻤﺘﻐﯿﺮ ‪ Y‬ﺑﺪﻻ ﻣﻦ اﻟﺘﻌﺎﻣﻞ ﻣﻊ‬
‫اﻟﺼﻮرة ﻛﺎﻣﻠﺔ‪.‬‬
‫وﻳﺘﻢ اﻟﺘﺤﻮﻳﻞ ﻣﻦ وإﻟﻰ اﻻﺳﻠﻮب ‪ RGB‬ﺑﺎﺳﺘﺨﺪام اﻟﺪاﻟﺘﯿﻦ‪ ntsc2rgb :‬و ‪ rgb2ntsc‬ﻛﺎﻟﺘﺎﻟﻲ‪:‬‬
‫;)'‪>> p=imread('peppers.png‬‬
‫;)‪>> pyiq= rgb2ntsc (p‬‬
‫ﺣﯿﺚ ان اﻟﺼﻮرة اﻟﺘﻲ ﺗﺤﺘﻮي ﻋﻠﻰ اﻟﻜﺜﺎﻓﺔ ‪ Y‬ھﻨﺎ ھﻲ ‪pyiq(:,:,1) :‬‬
‫;))‪imshow(puiq(:,:,1‬‬
‫ﻣﻌﺎﻟﺠﺔ اﻟﺼﻮر اﻟﻤﻠﻮﻧﺔ‬
‫ﻳﺘﻢ ﻣﻌﺎﻟﺠﺔ اﻟﺼﻮرة اﻟﻤﻠﻮﻧﺔ ‪ RGB‬ﺑﻌﺪة طﺮق اﺷﮫﺮھﺎ‪:‬‬
‫‪ .١‬ﻓﺼﻞ ﻛﻞ ﻟﻮن ﻋﻠﻰ ﺣﺪه واﻟﺘﻌﺎﻣﻞ ﻣﻌﻪ ﺛﻢ دﻣﺞ اﻷﻟﻮان ﻣﺠﺪدا‪.‬‬
‫‪ .٢‬اﻟﺘﺤﻮﻳﻞ إﻟﻰ ﺻﯿﻐﺔ ‪ YIQ‬ﺛﻢ اﻟﺘﻌﺎﻣﻞ ﻣﻊ اﻟﻠﻮن ‪ Y‬ﻓﻘﻂ ﺛﻢ اﻋﺎدة اﻟﺘﺤﻮﻳﻞ‪.‬‬
‫اﻟﺸﻜﻠﯿﻦ اﻟﺘﺎﻟﯿﯿﻦ ﻳﻮﺿﺤﺎن اﻟﻔﻜﺮﺗﯿﻦ اﻟﺴﺎﺑﻘﺘﯿﻦ‪:‬‬
‫ﻳﺮﺟﻰ ﻣﻼﺣﻈﺔ ان ﺗﻌﻘﯿﺪ اﻟﺮﺳﻤﺔ ﻻ ﻋﻼﻗﺔ ﻟﻪ ﺑﺘﻌﻘﯿﺪ اﻟﻌﻤﻠﯿﺔ‪ ،‬ﻓﺎﻟﻄﺮﻳﻘﺔ اﻟﺜﺎﻧﯿﺔ اﻗﻞ ﺗﻌﻘﯿﺪا ﻣﻦ اﻷوﻟﻰ‬
‫)ﻟﻤﺎذا؟(‪.‬‬
‫أﻣﺜﻠﺔ اﻟﻌﻤﻠﯿﺎت ﻋﻠﻰ اﻟﺼﻮرة اﻟﻤﻠﻮﻧﺔ‪:‬‬
‫‪ .١‬ﺗﺤﺴﯿﻦ اﻟﺘﺒﺎﻳﻦ ‪:contrast stretching‬‬
‫ﻟﯿﻜﻦ ﻟﺪﻳﻨﺎ اﻟﺼﻮرة ‪:‬‬
‫;) '‪p = imread ('peppers.png‬‬
‫وﻟﻨﻘﻢ اﻵن ﺑﺘﺤﻮﻳﻠﮫﺎ إﻟﻰ ﺻﯿﻐﺔ ‪:YIQ‬‬
‫;)‪py=rgb2ntsc(p‬‬
‫وﺳﻮف ﻧﺴﺘﺨﺪم ﻟﺘﺤﺴﯿﻦ اﻟﺘﺒﺎﻳﻦ ﻓﻘﻂ اﻟﺼﯿﻐﺔ )‪ ،py(:,:,1‬ﻛﺎﻟﺘﺎﻟﻲ‪:‬‬
‫;))‪pyc=histeq(py(:,:,1‬‬
‫ﺛﻢ ﻟﻨﻘﻢ اﻵن ﺑﺈﻋﺎدة اﻟﺘﺤﻮﻳﻞ‪:‬‬
‫;)‪pq = ntsc2rgb (pyc‬‬
‫وﺳﻮف ﻧﺴﺘﺨﺪم ﻓﯿﻤﺎ ﻳﻠﻲ اﻟﻄﺮﻳﻘﺔ اﻟﺜﺎﻧﯿﺔ ﻟﺘﺤﺴﯿﻦ اﻟﺘﺒﺎﻳﻦ‪:‬‬
‫;)‪pr=p(:,:,1‬‬
‫;)‪pg=p(:,:,2‬‬
‫;)‪pb=p(:,:,3‬‬
‫وذﻟﻚ ﺑﺘﻄﺒﯿﻖ اﻟﺘﺤﺴﯿﻦ ﻋﻠﻰ اﻟﺼﻮر اﻟﺜﻼث‪:‬‬
‫;)‪prq=histeq(pr‬‬
‫;)‪pgq=histeq(pg‬‬
‫;)‪pbq=histeq(pb‬‬
‫وﻟﻨﻘﻢ اﺧﯿﺮا ﺑﺪﻣﺞ اﻟﺼﻮر اﻟﺜﻼث‪:‬‬
‫;)‪pqc= cat (3, prq,pgq,pbq‬‬
‫واﻵن ﻟﺴﻨﺘﻌﺮض اﻟﺼﻮرﺗﯿﻦ وﻧﻘﺎرن ﺑﯿﻨﮫﻤﺎ‪:‬‬
‫;)‪Imshow (p), figure, imshow(pq), figure, imshow(pqc‬‬
‫‪ .٢‬اﻟﻔﻠﺘﺮة اﻟﺤﯿﺰﻳﺔ ‪:spatial filtering‬‬
‫ﻣﻦ أﺟﻞ ا ﻟﻔﻼﺗﺮ اﻟﻤﻨﺨﻔﻀﺔ ﻓﻼ ﻓﺮق ﺑﯿﻦ اﻟﻄﺮﻳﻘﺘﯿﻦ ﻟﻜﻦ ﻣﻦ اﺟﻞ اﻟﻔﻼﺗﺮ اﻟﻌﺎﻟﯿﺔ ﻓﯿﻔﻀﻞ داﺋﻤﺎ‬
‫اﺳﺘﺨﺪام اﻟﻄﺮﻳﻘﺔ اﻷوﻟﻰ )اﺳﻠﻮب ‪.(YIQ‬‬
‫وﻟﻨﻄﺒﻖ اﻵن اﻟﻔﻠﺘﺮ اﻟﻤﻨﺨﻔﺾ '‪ 'average‬ﺑﺎﻟﻄﺮﻳﻘﺔ اﻟﺜﺎﻧﯿﺔ‪:‬‬
‫;‪>> c=p‬‬
‫;)‪>> a15=fspecial('average',15‬‬
‫;))‪>> cr = filter2 (a15,c(:,:,1‬‬
‫;))‪>> cg = filter2 (a15,c(:,:,2‬‬
‫;))‪>> cb = filter2 (a15,c(:,:,3‬‬
‫;)‪>> blur = cat (3,cr,cg,cb‬‬
‫;)‪>> imshow (blur‬‬
‫ﺛﻢ ﻟﻨﻄﺒﻖ اﻟﻔﻠﺘﺮ ‪ unsharp‬ﻛﻔﻠﺘﺮ ﻋﺎﻟﻲ اﻟﻌﺒﻮر ﺑﺎﻟﻄﺮﻳﻘﺔ اﻷوﻟﻰ‪:‬‬
‫;)‪>> cn=rgb2ntsc(c‬‬
‫;)'‪>> a=fspecial('unsharp‬‬
‫;))‪>> cn(:,:,1)=filter2(a,cn(:,:,1‬‬
‫;)‪>> cu=ntsc2rgb(cn‬‬
‫)‪>> imshow(cu‬‬
‫‪ .٣‬إزاﻟﺔ اﻟﺘﺸﻮﻳﺶ ‪noise removal‬‬
‫اﻟﻜﻮد اﻟﺘﺎﻟﻲ ﻳﻮﺿﺢ طﺮﻳﻘﺔ ﺗﻄﺒﯿﻖ ﻣﺤﺎﻛﺎة اﻟﺘﺸﻮﻳﺶ ﺛﻢ طﺮﻳﻘﺔ ازاﻟﺘﻪ‪:‬‬
‫;‪>> tw=p‬‬
‫;)'‪>> tn=imnoise(tw,'salt & pepper‬‬
‫;)‪>> imshow(tn‬‬
‫;))‪>> figure,imshow(tn(:,:,1‬‬
‫;))‪>> figure,imshow(tn(:,:,2‬‬
‫;))‪>> figure,imshow(tn(:,:,3‬‬
‫اﺳﺘﺨﺪام اﻟﻔﻠﺘﺮ ﻏﯿﺮ اﻟﺨﻄﻲ ‪ medfilt2‬ﻹزاﻟﺔ اﻟﺘﺸﻮش‬
‫;))‪>> trm=medfilt2(tn(:,:,1‬‬
‫;))‪>> tgm=medfilt2(tn(:,:,2‬‬
‫;))‪>> tbm=medfilt2(tn(:,:,3‬‬
‫;)‪>> tm=cat(3,trm,tgm,tbm‬‬
‫)‪>> imshow(tm‬‬
‫ﻧﻔﺲ ﻣﺎ ﺳﺒﻖ وﻟﻜﻦ ﺑﺎﻟﻄﺮﻳﻘﺔ اﻷوﻟﻰ‪:‬‬
‫;)‪>>tnn=rgb2ntsc(tn‬‬
‫;))‪>> tnn(:,:,1)=medfilt2(tnn(:,:,1‬‬
‫;)‪>> tm2=ntsc2rgb(tnn‬‬
‫;)‪>> imshow(tm2‬‬

‫‪ .٤‬ﺗﻘﺴﯿﻢ اﻟﺼﻮرة واﻛﺘﺸﺎف ﺣﻮاف ﻛﺎﺋﻨﺎت اﻟﺼﻮرة‬


‫ﻓﻲ ﺣﺎﻟﺔ اﻟﺘﻘﺴﯿﻢ ﻳﻔﻀﻞ ﻋﺎدة ﺗﺤﻮﻳﻞ اﻟﺼﻮرة اﻟﻤﻠﻮﻧﺔ إﻟﻰ ﺗﺪرج اﻟﺮﻣﺎدي‬
‫>>‬ ‫;‪f=p‬‬
‫>>‬ ‫;)‪fg=rgb2gray(f‬‬
‫>>‬ ‫;)‪fe1=edge(fg‬‬
‫>>‬ ‫;)‪imshow(fe1‬‬
‫ﻛﻤﺎ اﻧﻪ ﻣﻦ اﻟﻤﻤﻜﻦ اﻟﺘﻌﺎﻣﻞ ﻣﻊ اﻻﻟﻮان اﻟﺜﻼﺛﺔ ﺣﺴﺐ اﻟﻄﺮﻳﻘﺔ اﻟﺜﺎﻧﯿﺔ‪:‬‬
‫>>‬ ‫;))‪f1=edge(f(:,:,1‬‬
‫>>‬ ‫;))‪f2=edge(f(:,:,2‬‬
‫>>‬ ‫;))‪f3=edge(f(:,:,3‬‬
‫>>‬ ‫;‪fe2=f1 | f2 | f3‬‬
‫>>‬ ‫)‪figure,imshow(fe2‬‬

‫=====================‬

‫ﻣﺪﺧﻞ إﻟﻰ ﻣﻌﺎﻟﺠﺔ اﻟﺼﻮر ﻣﻊ اﻟﻤﺎﺗﻼب ـ ﺗﺮﺟﻤﺔ ﻓﮫﺪ أل ﻗﺎﺳﻢ ‪fhdalqasem@yahoo.com‬‬

‫اﻟﻤﺤﺘﻮى‪:‬‬
‫اﻟﻔﺼﻞ اﻟﺜﺎﻧﻲ ﻣﻌﺎﻟﺠﺔ اﻟﻨﻘﻄﺔ ‪..‬‬
‫اﻟﻔﺼﻞ اﻟﺜﺎﻟﺚ‪ :‬ﻣﻌﺎﻟﺠﺔ اﻟﺠﻮار ‪..‬‬
‫اﻟﻔﺼﻞ اﻟﺮاﺑﻊ‪ :‬ﺗﺤﻮﻳﻞ ﻓﻮرﻳﯿﻪ‪...‬‬
‫ﻣﻠﺨﺺ ﻟﻠﻔﺼﻮل ‪٥‬و‪٦‬و‪٧‬و‪ :١٠‬اﺳﺘﻌﺎدة اﻟﺼﻮر اﻟﺘﻘﺴﯿﻢ وﻣﻌﺎﻟﺠﺔ اﻟﺼﻮر اﻟﻤﻠﻮﻧﺔ‪..‬‬

You might also like