100% found this document useful (1 vote)
2K views

Matlab Image Processing

This document provides an introduction to image processing with MATLAB. It discusses several types of image processing techniques including point processing, neighborhood processing, and point operations. Point processing involves transforming pixel values, neighborhood processing considers neighboring pixel values, and point operations change pixel values without considering neighbors. The document provides examples of mathematical operations that can be applied to images on a per-pixel basis, such as adding or subtracting a constant value from each pixel value.

Uploaded by

Abdul Aziz Turdi
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
100% found this document useful (1 vote)
2K views

Matlab Image Processing

This document provides an introduction to image processing with MATLAB. It discusses several types of image processing techniques including point processing, neighborhood processing, and point operations. Point processing involves transforming pixel values, neighborhood processing considers neighboring pixel values, and point operations change pixel values without considering neighbors. The document provides examples of mathematical operations that can be applied to images on a per-pixel basis, such as adding or subtracting a constant value from each pixel value.

Uploaded by

Abdul Aziz Turdi
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 56

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

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

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

‫اﻟﻔﺼﻞ اﻟﺜﺎﻧﻲ ﻣﻌﺎﻟﺠﺔ اﻟﻨﻘﻄﺔ ‪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‬‬
‫ﺗﻤﺎرﻳﻦ‬
‫ﻣﺪﺧﻞ إﻟﻰ ﻣﻌﺎﻟﺠﺔ اﻟﺼﻮر ﻣﻊ اﻟﻤﺎﺗﻼب ـ ﺗﺮﺟﻤﺔ ﻓﮫﺪ أل ﻗﺎﺳﻢ ‪[email protected]‬‬

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

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

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


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

‫ﺗﻘﺴﯿﻢ اﻟﺼﻮرة ‪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‬‬

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

‫ﻣﺪﺧﻞ إﻟﻰ ﻣﻌﺎﻟﺠﺔ اﻟﺼﻮر ﻣﻊ اﻟﻤﺎﺗﻼب ـ ﺗﺮﺟﻤﺔ ﻓﮫﺪ أل ﻗﺎﺳﻢ ‪[email protected]‬‬

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

You might also like