mid-project-86.pdf

‫ﺑﻪ ﻧﺎم ﺧﺪا‬
‫ﺑﺮﻧﺎﻣﻪ ﺳﺎزي ﭘﻴﺸﺮﻓﺘﻪ‬
‫داﻧﺸﻜﺪه م‪.‬ﻛﺎﻣﭙﻴﻮﺗﺮ‪ ،‬داﻧﺸﮕﺎه ﺻﻨﻌﺘﻲ ﺷﺮﻳﻒ‬
‫ﭘﺮوژه ﻣﻴﺎن ﺗﺮم ﺟﺎوا‬
‫زﻣﺎن ﺗﺤﻮﻳﻞ ‪ 15 :‬اردي ﺑﻬﺸﺖ ‪86‬‬
‫ﭘﺮوژه ﺧﻮد را ﺗﺎ ﻧﻴﻤﻪ ﺷﺐ زﻣﺎن ﺗﺤﻮﻳﻞ ﺑﻪ آدرس اي‪-‬ﻣﻴﻞ درس ارﺳﺎل ﻧﻤﺎﻳﻴﺪ‪.‬‬
‫‪[email protected]‬‬
‫‪proj1-StudentID‬‬
‫ﺗﻮﺿﻴﺤﺎت ﻣﻮرد ﻧﻴﺎز‬
‫*‪proj1.zip| proj1.rar| proj1.tar.‬‬
‫‪email‬‬
‫‪subject‬‬
‫‪Body‬‬
‫‪Attachment‬‬
‫ﻫﻤﺎﻧﻄﻮر ﻛﻪ ﻣﻲ داﻧﻴﺪ ﻫﺮ ﺗﺼﻮﻳﺮ از ﻣﺠﻤﻮﻋﻪ اي از ﭘﻴﻜﺴﻞ ﻫﺎ ﺗﺸﻜﻴﻞ ﺷﺪه اﺳﺖ‪ .‬ﻫﺮ ﭘﻴﻜﺴﻞ ﺣﺪاﻗﻞ ‪5‬‬
‫ﻣﺸﺨﺼﻪ ﻋﺪدي دارد‪ .‬ﺷﺎﻣﻞ ﻃﻮل و ﻋﺮض ﻧﻘﻄﻪ و رﻧﮓ آن ) ﺷﺎﻣﻞ ‪ 3‬ﭘﺎراﻣﺘﺮ ‪ r,g,b‬ﻣﻌﺮف رﻧﮓ ﺑﺎﻧﺪ ﻗﺮﻣﺰ‪ ،‬ﺳﺒﺰ و‬
‫آﺑﻲ(‪ .‬ﻳﻚ ﻓﻴﻠﺘﺮ را ﺑﻪ اﻳﻦ ﺻﻮرت ﺗﻌﺮﻳﻒ ﻣﻲ ﻛﻨﻴﻢ‪ .‬ﻓﻴﻠﺘﺮ ﻣﺠﻤﻮﻋﻪ اي ﺷﺎﻣﻞ ‪ 3‬ﺗﺎﺑﻊ ‪5‬ﭘﺎراﻣﺘﺮي ﻣﻲ ﺑﺎﺷﺪ‪ .‬ﺑﻪ ﺻﻮرﺗﻲ‬
‫ﻛﻪ ﺑﻪ ازاي ﻫﺮ ﭘﻴﻜﺴﻞ ﺑﺎ ﻃﻮل ‪ x,y‬ﺧﻮاﻫﻴﻢ داﺷﺖ‪:‬‬
‫)‪Pr' = f1(Px, Py, Pr, Pg, Pb‬‬
‫)‪Pg' = f1(Px, Py, Pr, Pg, Pb‬‬
‫)‪Pb' = f1(Px, Py, Pr, Pg, Pb‬‬
‫ﻫﺪف اﻳﻦ ﭘﺮوژه اﻳﻦ اﺳﺖ ﻛﻪ ﻳﻚ ﺗﺼﻮﻳﺮ ورودي را ﺗﺤﺖ ﻓﻴﻠﺘﺮ ﺗﻌﺮﻳﻒ ﺷﺪه از ﺳﻮي ﻛﺎرﺑﺮ ﺗﺒﺪﻳﻞ ﻧﻤﺎﻳﻴﺪ‪.‬‬
‫ﺑﻪ اﻳﻦ ﻣﻨﻈﻮر اﺑﺘﺪا ﻣﻲ ﺑﺎﻳﺴﺖ از روي ﻳﻚ ﻓﺎﻳﻞ ورودي ‪ 1‬ﻳﻚ ﺗﺼﻮﻳﺮ را ﺧﻮاﻧﺪه و ﺑﺮ روي ﺻﻔﺤﻪ‬
‫ﻧﻤﺎﻳﺶ ﻣﻲ دﻫﻴﺪ‪ .‬ﺳﭙﺲ ﺑﺎﻳﺪ ﺳﻪ ﻓﺮﻣﻮل ‪ 5‬ﭘﺎراﻣﺘﺮي ‪ x,y,r,g,b‬را از ﻛﺎرﺑﺮ ﮔﺮﻓﺘﻪ و ﻫﺮ ﻳﻚ را ﺑﺮاي‬
‫ﻳﻜﻲ از ﺳﻪ رﻧﮓ ﻗﺮﻣﺰ‪-‬آﺑﻲ و ﺳﺒﺰ ﻣﻮﺟﻮد در ﻫﺮ ﭘﻴﻜﺴﻞ اﻋﻤﺎل ﻛﻨﻴﺪ و ﻧﺘﺎﻳﺞ را ﻧﻤﺎﻳﺶ دﻫﻴﺪ‪.‬‬
‫ﻣﺜﻼ ﻓﻴﻠﺘﺮ‬
‫‪Pr' = 0‬‬
‫‪Pg' = g‬‬
‫‪Pb' = b‬‬
‫رﻧﮓ ﻗﺮﻣﺰ ﺗﺼﻮﻳﺮ را ﺣﺬف ﻣﻲ ﻛﻨﺪ ﻳﺎ ﻓﻴﺘﻠﺮ‬
‫)‪Pr' = 256*sin(x‬‬
‫‪Pg' = r+g‬‬
‫‪Pb' = y‬‬
‫ﺑﺮﺣﺴﺐ ﻃﻮل ﭘﻴﻜﺴﻞ ﻣﻴﺰان رﻧﮓ ﻗﺮﻣﺰ را ﺑﻪ ﻃﻮر ﻣﺘﻨﺎوب ﺗﻐﻴﻴﺮ ﻣﻲ دﻫﺪ‪ .‬ﺷﺪت رﻧﮓ ﺳﺒﺰ را ﺑﺎ ﺑﺮاﺑﺮ رﻧﮓ ﻗﺮﻣﺰ ﻗﺮار‬
‫ﻣﻲ دﻫﺪ و ﺑﺮ ﺣﺴﺐ ﻋﺮض ﻧﻘﻄﻪ ﺷﺪت رﻧﮓ آﺑﻲ را ﻳﻜﻨﻮاﺧﺖ ﻣﻲ ﻛﻨﺪ‪.‬‬
‫‪ 1‬ﺑﺮﻧﺎﻣﻪ ﺷﻤﺎ ﻣﻲ ﺑﺎﻳﺴﺖ ﺣﺪاﻗﻞ از ﻓﺮﻣﺖ ﻓﺎﻳﻞ ‪ bmp‬ﭘﺸﺘﻴﺒﺎﻧﻲ ﻛﻨﺪ‪ .‬در ﺻﻮرﺗﻲ ﻛﻪ از ﺑﺴﺘﻪ ﻫﺎي ﭘﻴﺸﺮﻓﺘﻪ ﻣﺜﻞ ‪ JAI‬اﺳﺘﻔﺎده ﻣﻲ ﻛﻨﻴﺪ‬
‫ﭘﺸﺘﻴﺒﺎﻧﻲ از دﻳﮕﺮ ﻓﺮﻣﺖ ﻫﺎي ﺗﺼﻮﻳﺮي ﻣﺰﻳﺘﻲ ﻧﺨﻮاﻫﺪ داﺷﺖ‪.‬‬
‫ﺗﻮﺟﻪ ﻛﻨﻴﺪ ﻛﻪ ﺑﺎزه ﻣﻮرد ﻗﺒﻮل ﺑﺮاي ﻫﺮ ﻳﻚ از ﻃﻴﻒ ﻫﺎ از ‪ 0‬ﺗﺎ ‪ 255‬ﻣﻲ ﺑﺎﺷﺪ‪ .‬ﭘﺲ اﻋﺪاد ﻣﻨﻔﻲ را ﺑﺮاﺑﺮ ﻫﻤﺎن ﺻﻔﺮ و‬
‫اﻋﺪاد ﺑﻴﺶ از ‪ 255‬را ﺑﺮاﺑﺮ ‪ 255‬ﻗﺮار دﻫﻴﺪ‪ .‬ﺗﻮﺻﻴﻪ ﻣﻲ ﻛﻨﻴﻢ اﻳﻦ روﻧﺪ را در ﻃﻲ ﻳﻚ ﻓﺮاﻳﻨﺪ ‪Exception‬‬
‫‪ Handling‬اﻧﺠﺎم دﻫﻴﺪ‪.‬‬
‫ﻧﻤﻮﻧﻪ ﻫﺎي ﺑﻴﺸﺘﺮي از ﻓﻴﻠﺘﺮ ﻫﺎ در ﺿﻤﻴﻤﻪ آﻣﺪه اﺳﺖ‪.‬‬
‫ﺗﻮﺟﻪ ﻛﻨﻴﺪ‪:‬‬
‫•‬
‫ﻫﺮ داﻧﺸﺠﻮ ﻣﻲ ﺑﺎﻳﺴﺖ ﭘﺮوژه ﺧﻮد را ﺑﻪ ﺻﻮرت ﻣﺴﺘﻘﻞ و ﺗﻨﻬﺎ اﻧﺠﺎم دﻫﺪ‪ .‬در ﺻﻮرت وﺟﻮد‬
‫ﺷﺒﺎﻫﺖ ﻫﺎي ﺑﻴﺶ از اﻧﺪازه در ﺑﻴﻦ دو ) ﻳﺎ ﭼﻨﺪ ( ﭘﺮوژه ﻫﻤﻪ اﻓﺮاد درﮔﻴﺮ دﭼﺎر ﻛﺴﺮ ﻧﻤﺮه ﺧﻮاﻫﻨﺪ‬
‫ﺷﺪ‪.‬‬
‫•‬
‫از آﻧﺠﺎﻳﻲ ﻛﻪ ﻫﺰﻳﻨﻪ ﻛﺸﻴﺪن ﺣﺘﻲ ﻳﻚ ﭘﻴﻜﺴﻞ ﺑﺮ روي ‪ device‬ﺑﺴﻴﺎر زﻳﺎد اﺳﺖ ﺑﺎ ﺑﺎﻓﺮ ﻛﺮدن‬
‫ﺗﺼﻮﻳﺮﺗﺎن ) در ﻣﻘﺎﺑﻞ ﭘﺮدازش ‪ ( real-time‬ﺳﺮﻋﺖ اﺟﺮاي ﺑﺮﻧﺎﻣﻪ ﺧﻮد را ﺗﺎ ﺟﺎي ﻣﻤﻜﻦ ﺑﺎﻻ‬
‫ﺑﺒﺮﻳﺪ‪.‬‬
‫•‬
‫ﺑﺮاي ﻛﺸﻴﺪن ﺗﺼﻮﻳﺮ ﻫﺎ ﻣﺠﺎز ﻣﻲ ﺑﺎﺷﻴﺪ ﻛﻪ از ﭘﻜﻴﺞ ﻫﺎي ﺧﻮد ﺟﺎوا ) ﻣﺎﻧﻨﺪ ﻛﻼس ﻫﺎي درون‬
‫‪ java.awt‬ﺑﻪ ﺧﺼﻮص ‪ Graphics2D‬و ‪ Image‬و ﻳﺎ ﺑﺴﺘﻪ ‪Java Advace Imaging‬‬
‫‪ JAI‬ﻛﻪ ﺷﺮﻛﺖ ‪ sun‬ﺑﻪ ﺻﻮرت ﻣﺠﺰا از ‪ j2SE‬اﻳﺠﺎد ﻛﺮده اﺳﺖ ( اﺳﺘﻔﺎده ﻛﻨﻴﺪ ﻳﺎ اﻳﻦ ﻛﻪ‬
‫ﺧﻮدﺗﺎن ﻛﻼس ﻣﻨﺎﺳﺐ را ﺑﺮاي ﺧﻮد ﺑﻨﻮﻳﺴﻴﺪ اﻣﺎ ﺑﻪ ﻫﻴﭻ ﻋﻨﻮان ﻣﺠﺎز ﺑﻪ اﺳﺘﻔﺎده از ﻛﻼس ﻫﺎي‬
‫ﺷﺨﺺ‪/‬ﺷﺮﻛﺖ ﺛﺎﻟﺚ در ﺑﺮﻧﺎﻣﻪ ﺗﺎن ﻧﻤﻲ ﺑﺎﺷﻴﺪ‪.‬‬
‫•‬
‫ﺑﺮاي ﻧﻮﺷﺘﻦ ﭘﺎرﺳﺮ رﻳﺎﺿﻲ ﻣﻤﻜﻦ اﺳﺖ ﺧﻮدﺗﺎن آﻧﺮا ﻣﺴﺘﻘﻴﻤﺎٌ ﭘﻴﺎده ﺳﺎزي ﻛﻨﻴﺪ وﻟﻲ ﺗﻮﺻﻴﻪ ﻣﻲ‬
‫ﻛﻨﻴﻢ از ﻛﻼس ‪ Compiler‬ﻣﻮﺟﻮد در ‪ JDK 6‬اﺳﺘﻔﺎده ﻛﻨﻴﺪ‪.‬‬
‫•‬
‫ﻓﺮﻣﻮل ﻫﺎي وارد ﺷﺪه از ﺳﻮي ﻛﺎرﺑﺮ ﻣﻲ ﺗﻮاﻧﺪ ﺷﺎﻣﻞ ﻋﻤﻠﻴﺎت ﺳﺎده رﻳﺎﺿﻲ ) ^ ‪ ( + - * /‬و‬
‫ﻋﻤﻠﻴﺎت ﭘﻴﺸﺮﻓﺘﻪ ﺗﺮ ) ﻣﺎﻧﻨﺪ ‪ ( sin, cos, tan, atn‬ﺑﺎﺷﺪ‬
‫•‬
‫ﺑﺮﻧﺎﻣﻪ ﺷﻤﺎ ﺑﺎﻳﺪ از ﻳﻚ ﻣﻌﻤﺎري ﻣﻨﻈﻢ و ﻣﻨﻄﻘﻲ ﺷﻴﻲ ﮔﺮا ﭘﻴﺮوي ﻧﻤﺎﻳﺪ‪ .‬ﺑﺨﺸﻲ از ﻧﻤﺮه ﺷﻤﺎ ﺑﻪ‬
‫اﻳﻦ ﻣﻬﻢ اﺧﺘﺼﺎص ﺧﻮاﻫﺪ ﻳﺎﻓﺖ‪ .‬ﺑﻪ ﻋﻼوه ﺑﺮﻧﺎﻣﻪ ﺷﻤﺎ ﺑﺎﻳﺪ ‪ exception‬ﻫﺎ را ) ﺑﻪ ﺧﺼﻮص در‬
‫ﻗﺴﻤﺖ ﻣﺮﺑﻮط ﺑﻪ ﭘﺎرﺳﺮ و ﻳﺎ ﻓﺎﻳﻞ ( ﺑﻪ وﺟﻪ ﻣﻨﺎﺳﺒﻲ ‪ handle‬ﻧﻤﺎﻳﺪ‪.‬‬
‫•‬
‫راﺑﻂ ﻛﺎرﺑﺮي ﻣﻨﺎﺳﺐ ﻧﻴﺰ ﻣﻬﻢ ﻣﻲ ﺑﺎﺷﺪ‪ .‬ﺗﻮﺻﻴﻪ ﻣﻲ ﻛﻨﻴﻢ ﺑﺮاي راﺑﻂ ﻛﺎرﺑﺮي از ﺑﺴﺘﻪ‬
‫‪ javax.swing‬اﺳﺘﻔﺎده ﻧﻤﺎﻳﻴﺪ‪ .‬ﺑﺮاي آﺷﻨﺎﻳﻲ ﺑﺎ آن ﻣﻲ ﺗﻮاﻧﻴﺪ از ﻛﻼس ﻫﺎي ﺣﻞ ﺗﻤﺮﻳﻦ ﻳﺎ‬
‫‪ swing tutorial‬ﻛﻤﻚ ﺑﮕﻴﺮﻳﺪ‪ .‬ﻣﺤﻴﻂ ﻫﺎي ﺗﻮﺳﻌﻪ ﺧﻮب ﻣﺎﻧﻨﺪ ‪ NetBeans‬ﭘﺸﺘﻴﺒﺎﻧﻲ و‬
‫ﺗﻌﺎﻣﻞ ﺧﻮﺑﻲ ﺑﺎ ‪ swing‬دارﻧﺪ‪.‬‬
‫•‬
‫ﺑﺮاي ﭘﺮدازش ﺗﺼﺎوﻳﺮ‪ ،‬ﻋﻼوه ﺑﺮ ﺳﻴﺴﺘﻢ رﻧﮓ ‪ RGB‬ﻣﻲ ﺗﻮان از ﺳﻴﺴﺘﻢ ‪ 2 LHS‬ﻧﻴﺰ اﺳﺘﻔﺎده ﻛﺮد‪.‬‬
‫اﻳﻦ دو ﺳﻴﺴﺘﻢ ﺑﻪ راﺣﺘﻲ ﻗﺎﺑﻞ ﺗﺒﺪﻳﻞ ﺑﻪ ﻳﻜﺪﻳﮕﺮ ﻫﺴﺘﻨﺪ و از ﻃﺮﻓﻲ ﻋﻤﻠﻴﺎﺗﻲ ﻣﺎﻧﻨﺪ روﺷﻦ ﻳﺎ‬
‫ﺗﺎرﻳﻚ و ﻣﺎت ﻛﺮدن ﺗﺼﻮﻳﺮ در ‪ LHS‬ﺳﺎده ﺗﺮ اﺳﺖ‪ .‬ﭘﻴﺎده ﺳﺎزي ﭘﺮدازش ‪ LHS‬در ﺑﺮﻧﺎﻣﻪ ﺗﺎن‬
‫ﻣﺸﻤﻮل ﻧﻤﺮه اﺿﺎﻓﻲ ﻣﻲ ﺑﺎﺷﺪ‪.‬‬
‫•‬
‫ﭘﻴﺎده ﺳﺎزي ﺗﻌﺪادي از ﻓﻴﻠﺘﺮ ﻫﺎي ﻛﻼﺳﻴﻚ ﻣﺎﻧﻨﺪ ‪ Blur, Sharpen‬و ‪، emboss‬‬
‫‪ noise‬و ﻓﻴﻠﺘﺮ ﻫﺎي ) ﭘﺎﻳﻴﻦ‪،‬ﻣﻴﺎن و ﺑﺎﻻ( ﮔﺬر ‪،‬و ﻳﺎ ﻓﻴﻠﺘﺮ ﻫﺎي ﺟﺎﻟﺐ ﻧﻴﺰ ﻣﺸﻤﻮل ﻧﻤﺮه‬
‫اﺿﺎﻓﻲ ﺑﻴﺸﺘﺮي ﺧﻮاﻫﺪ ﺑﻮد‪.‬‬
‫‪Lighting, Hue, Saturation 2‬‬
‫•‬
‫ﻣﺎﺷﻴﻦ ﻣﺠﺎزي ﻛﻪ ﺑﺮﻧﺎﻣﻪ ﺷﻤﺎ را ﺗﺴﺖ ﺧﻮاﻫﺪ ﻛﺮد ﻣﻄﺎﺑﻖ ﺑﺎ ‪ J2SE 6‬ﻣﻲ ﺑﺎﺷﺪ‪ .‬ﺑﻨﺎﺑﺮ اﻳﻦ از‬
‫اﺳﺘﻔﺎده از دﻳﮕﺮ ﻛﻤﭙﺎﻳﻠﺮ ﻫﺎي ﺟﺎوا ﻣﺎﻧﻨﺪ ‪ gcj‬ﺟﺪا ﭘﺮﻫﻴﺰ ﻛﻨﻴﺪ‪.‬‬
‫•‬
‫در اﻧﺘﻬﺎ ﻛﻠﻴﻪ ﻓﺎﻳﻞ ﻫﺎي ﺳﻮرس ﭘﺮوژه ﺧﻮد را ﺑﻪ ﻫﻤﺮاه ﻳﻚ ﻓﺎﻳﻞ اﺳﻜﺮﻳﭙﺖ ﻛﻪ آﻧﻬﺎ را ﻛﻤﭙﺎﻳﻞ و‬
‫اﺟﺮا ﻣﻲ ﻛﻨﺪ ﻓﺸﺮده ﻛﺮده و ﺑﻪ اي‪-‬ﻣﻴﻞ درس ﺑﻔﺮﺳﺘﻴﺪ‪ .‬اﮔﺮ از ﺳﻴﺴﺘﻢ ﻋﺎﻣﻞ وﻳﻨﺪوز اﺳﺘﻔﺎده ﻣﻲ‬
‫ﻛﻨﻴﺪ ﺣﺘﻤﺎ ﭘﺴﻮﻧﺪ ﻓﺎﻳﻞ اﺳﻜﺮﻳﭙﺖ )‪ (cmd, bat, vbs‬را از اﻧﺘﻬﺎي اﺳﻢ ﻓﺎﻳﻞ ﭘﺎك ﻧﻤﺎﻳﻴﺪ‪ .‬ﭼﺮا ﻛﻪ‬
‫اﻛﺜﺮ ﺳﺮور ﻫﺎي اي‪-‬ﻣﻴﻞ ﺑﺎ ﭼﻨﻴﻦ ﻓﺎﻳﻞ ﻫﺎﻳﻲ ﻣﺸﻜﻞ دارﻧﺪ‪ .‬اﻟﺒﺘﻪ ﻣﻲ ﺗﻮاﻧﻴﺪ از ارﺷﻴﻮ ﻫﺎي ‪ jar‬ﻫﻢ‬
‫ﺑﺮاي ﻓﺮﺳﺘﺎدن ﭘﺮوژه اﺳﺘﻔﺎده ﻛﻨﻴﺪ‬
‫ﻣﻮﻓﻖ ﺑﺎﺷﻴﺪ‪.‬‬
‫ﺗﻮﺿﻴﺤﺎت ﺑﻴﺸﺘﺮ در ﺳﺮ ﻛﻼس ﺣﻞ ﺗﻤﺮﻳﻦ اراﺋﻪ ﺧﻮاﻫﺪ ﺷﺪ‪.‬‬
‫ﺿﻤﻴﻤﻪ‪:‬‬
‫ﻧﻤﻮﻧﻪ اﺟﺮاﻳﻲ ﺑﺮﺧﻲ از ﻓﻴﻠﺘﺮﻫﺎ‪:‬‬
‫اﮔﻪ ﮔﻔﺘﻴﻦ اﻳﻦ ﻛﻴﻪ؟‬
‫ﭘﺮﻧﺲ آﻳﻠﻴﻦ از !‪SH4‬‬
:‫اﻳﻦ ﻫﻢ ﻳﻚ ﻓﻴﻠﺘﺮ ﺟﺎﻟﺐ ﻏﻴﺮ ﺧﻄﻲ‬
A <= P(i - 1, j - 1).Color
C <= P(i + 1, j - 1).Color
E <= P(i + 1, j).Color
G <= P(i, j + 1).Color
Color <= (A + B + C + D + E +
P(i,j).Color <= Color
B
D
F
H
F
<= P(i, j - 1) .Color
<= P(i - 1, j) .Color
<= P(i - 1, j + 1) .Color
<= P(i + 1, j + 1) .Color
+ G + H) / 8
Emboss ‫اﻳﻦ ﻫﻢ ﻳﻚ ﻓﻴﻠﺘﺮ‬
Color = P(i,j).Color
Color' = P( i + 1, j + 1).Color
r = Abs(Color.r – Color'.r + 128)
g = Abs(Color.g – Color'.g + 128)
b = Abs(Color.b – Color'.b + 128)
P(i,j) = Color(r,g,b)