You are on page 1of 5

‫‪Edit by : Fathalla R.

Faraj Mansouri‬‬

‫بعض خوارزميات معالجة الصور‬


‫خوارزمية تحويل الصورة الملونة الى صورة ذات تدرج رمادي‪:‬‬
‫أي صورة معروضة على الشاشة تتكون من عدة اآلف من النقاط الضوئية تعرف بال ‪ pixels‬و‬
‫هذا ما تعرفنا اليه سابقا خالل هذا المقرر‪ .‬و ان عدد هذه النقاط يعتمد على‪:‬‬
‫• حجم الصورة ‪ Size of image .‬حيث انه كلما كان حجم الصورة أقل كان عدد االنقاط‬
‫أقل‪.‬‬
‫• درجة وضوح الصورة والدقة اللونية لها ‪ Resolution.‬فانه كلما كانت الدقة عالية‬
‫كانت الحاجة الى النقاط اكثر‪ ،‬وبالتأكيد كثرة نقاط الصورة يعطي الصورة دقة اكثر‬
‫لقد عرفنا سابقا ان كل بكسل من هذا الكم الهائل يتألف من ثالث ألوان رئيسة ( أحمر وأخضر‬
‫وأزرق) ‪ RGB‬في حالة الصور الملونة وهو المقصود بالمكونات الثالث الرئيسة للبكسل‬
‫الواحد‪.‬‬
‫فأذا اردنا تفكيك الصورة سنقوم بهذه المعالجة على النحو التالي‪:‬‬
‫‪ -1‬نفكك الصورة الى نقاطها االساسية‪ ،‬ونقرأ الصورة بكسل بكسل‪.‬‬

‫‪For‬‬ ‫= ‪i‬‬ ‫‪0 To‬‬ ‫‪(your image ).Height - 1‬‬


‫‪For‬‬ ‫= ‪j‬‬ ‫‪0 To (your image ).Width – 1‬‬

‫و تاليا يمكن قرأة كل لون في الصورة و وضعه في متغير‪.‬‬


‫‪ -2‬تفكيك الصورة و االحتفاظ بقيم االلوان‪.‬‬
‫‪red = (your image ).GetPixel(j, i).R‬‬
‫‪green = (your image ).GetPixel(j, i).G‬‬
‫‪blue =(your image ).GetPixel(j, i).B‬‬

‫‪ -3‬ان خوارزمية تحويل الصورة الملونة الى صورة ذات تدرج رمادي تعتمد على حساب‬
‫المعدل اللوني‪ ،‬ثم رسم ال ‪ pixels‬من جديد ولكن باإلعتماد على المعدل اللوني بدل قيم‬
‫المكونات الثالث‪.‬‬

‫‪avg = (red + green + blue) / 3‬‬


‫)) ‪(your image ).SetPixel(j, i, Color.FromArgb(avg, avg, avg‬‬

‫‪1‬‬
‫‪Edit by : Fathalla R. Faraj Mansouri‬‬

‫هناك طرق اخرى و لكن تظل طريقة المعدل اللوني افضل‬


‫))‪(your image ).SetPixel(j, i, Color.FromArgb(red, red, red‬‬

‫‪or‬‬
‫‪(your image ).SetPixel(j, i, Color.FromArgb(green, green, gree‬‬
‫))‪n‬‬

‫خوارزمية تحويل الصورة الملونة الى صورة ثنائية‬


‫وهي أبسط أنواع الصور‪ ,‬وتأخذ قيمتين فقط لأللوان‪ ,‬وهما اللون األسود واللون األبيض‪ ,‬وهذا‬
‫النوع من الصور له تطبيقات كثيرة في الكمبيوتر‪ ,‬كأن تكون المعلومات المطلوبة صور طبية )‬
‫صور أشعة ‪ X‬دائما ً تكون ثنائية( أو الحدود الخارجية للجسم وكذلك لتحديد مكان الجسم وإدراكه‬
‫من قبل اإلنسان اآللي مثالً‪ ( ،‬وفي التصوير الليلي غالبا ً ما يكون اللون األخضر مع األسود)‪ ,‬أو‬
‫التحقق من تشوهات األجسام المصنوعة ( في المصانع تكون الحاجة الى الصور الثنائية في‬
‫يطابق التصميم أو المواصفات‬ ‫معرفة الشكل الخارجي للتصميم ومعرفة هل أن المنتج‬
‫المطلوبة)‪ ,‬وغيرها من التطبيقات المالئمة لها‪.‬‬
‫ويمكن الحصول على الصور الثنائية من الصور الملونة أو من الصور ذات التدرج الرمادي‬
‫باإلعتماد على عملية ‪Threshold Operation‬وهي تحديد قيمة معينة لشرط ‪,Threshold‬‬
‫تتحول فيها األلوان األعلى قيمة منها الى اللون األبيض‪ ,‬واأللوان األدنى الى اللون األسود‪.‬‬

‫‪ -1‬نفكك الصورة ‪ ،‬ونقرأ الصورة بكسل بكسل‪.‬‬

‫‪For‬‬ ‫= ‪i‬‬ ‫‪0 To‬‬ ‫‪(your image ).Height - 1‬‬


‫‪For‬‬ ‫= ‪j‬‬ ‫‪0 To (your image ).Width – 1‬‬

‫‪ -2‬ثم سيتم تفكيك كل بكسل الى عناصره الرئيسة‪ ،‬وأحتفظ بقيمة كل مكون في متغير‪:‬‬
‫‪red = (your image ).GetPixel(j, i).R‬‬
‫‪green = (your image ).GetPixel(j, i).G‬‬
‫‪blue =(your image ).GetPixel(j, i).B‬‬

‫‪2‬‬
‫‪Edit by : Fathalla R. Faraj Mansouri‬‬

‫‪ -3‬كذلك حساب المعدل اللوني لكل بكسل‪ ،‬و تحديد شرط ‪Threshold‬عشوائيا ً مثالً ( بما‬
‫أن الحد األعلى للون البكسل األبيض يقارب ‪ 16‬مليون واألدنى صفر‪ ،‬يمكن أن أقول أن‬
‫شرط ‪Threshold‬هو ‪ 6‬ماليين أو ‪ 7‬ماليين أو ‪ 8‬مثالً ) لكن هذه الطريقة غير ناجحة‬
‫إلحتماالت أن تكون الصورة ليلية‪ ،‬أو بالعكس في وضح النهار‪ ،‬وهنا يجب أن تعتمد‬
‫‪Threshold‬على المعدل اللوني للصورة‪.‬‬
‫‪ -4‬خوارزمية تحويل الصورة الملونة الى صورة ثنائية هي في حساب المعدل اللوني‪ ،‬فإن‬
‫كان البكسل أكبر من معدل الصورة اللوني سنحوله الى أبيض‪ ،‬والعكس يتم تحويله الى‬
‫األسود‪ ،‬ثم رسم البكسالت من جديد ولكن باإلعتماد على القيمتين الناتجتين من عملية‬
‫التعتيب‪Thresholding.‬‬

‫‪If (red * green * blue) < (thrshold) Then‬‬


‫))‪bmap.SetPixel (j, i, Color.FromArgb(0, 0, 0‬‬
‫))‪Else : bmap.SetPixel (j, i, Color.FromArgb(255, 255, 255‬‬
‫‪End If‬‬

‫خوارزمية تحويل الصورة الى الـ‪Negative‬‬


‫بما انه عكس اللون هو المكمل اللوني‪ ،‬يعني لو جمعت قيمة اللونين معا ً ( األصل والعكس )‬
‫فسينتج اللون األبيض ( أعلى األلوان قيمة )‪ ،‬الحظ معي هذه المعادلة‪:‬‬
‫أبيض ‪ -‬اللون األصلي = اللون العكس‪.‬‬
‫أبيض – أبيض = أسود‪.‬‬
‫أبيض – أسود = أبيض‪.‬‬
‫أبيض – أزرق = أصفر‪.‬‬
‫أبيض – أصفر = أزرق‪.‬‬
‫من هذا المنطلق يتم أستخراج فكرة ( خوارزمية ) العكس‪ ،‬وهي أن أستخرج القيمة اللونية‬
‫للبكسل‪ ،‬ثم أطرحها من اللون األبيض‪.‬‬
‫و الخطوات ستكون كالتي‪:‬‬
‫‪ -1‬نفكك الصورة الى بكسالتها‪ ،‬ونقرأ الصورة بكسل بكسل‪.‬‬
‫‪For‬‬ ‫= ‪i‬‬ ‫‪0 To‬‬ ‫‪(your image ).Height - 1‬‬
‫‪For‬‬ ‫= ‪j‬‬ ‫‪0 To (your image ).Width – 1‬‬
‫‪ -2‬ثم سوف نفكك كل بكسل الى عناصره الرئيسة‪ ،‬وأحتفظ بقيمة كل مكون‪:‬‬

‫‪3‬‬
‫‪Edit by : Fathalla R. Faraj Mansouri‬‬

‫‪red = (your image ).GetPixel(j, i).R‬‬


‫‪green = (your image ).GetPixel(j, i).G‬‬
‫‪blue =(your image ).GetPixel(j, i).B‬‬

‫‪ -3‬سنستبدل القيمة المخزونة في ال ‪ red‬الى احمر ‪ 255 -‬وكذلك للمكون األخضر‬


‫واألزرق‬
‫‪red = 255 – red‬‬
‫‪If red < 0 Then red = 0‬‬

‫الخطوة اإلخيرة خطوة للتأكد‪ ،‬لكي ال تكون قيمة المكون سالبة‬


‫وبالتأكيد إعادة رسم النقاط على الصورة من جديد بعد المعالجة‪.‬‬
‫خوارزمية تغيير إضاءة الصورة‬
‫من مبدأ أن البياض يزاد بإزدياد القيمة اللونية ألي بكسل وبالتالي تزداد إضاءة الصورة ككل‪،‬‬
‫كذلك السواد يزداد كلما قللنا القيمة اللونية له‪ ،‬مما يؤدي الى تقليل مستوى اإلضاءة‪.‬‬
‫و هناك طريقتان‪:‬‬
‫أ‪ -‬أن تزيد او تقلل من القيمة اللونية للبكسل مباشرة‪.‬‬
‫ب‪ -‬أن تزيد أو تقلل من قيم المكونات الثالث للبكسل‪.‬‬
‫سوف نستخدم الفكرة الثانية‪:‬‬
‫‪ -1‬نفكك الصورة الى ونقرأ الصورة بكسل بكسل‪.‬‬

‫‪For‬‬ ‫= ‪i‬‬ ‫‪0 To‬‬ ‫‪(your image ).Height - 1‬‬


‫‪For‬‬ ‫= ‪j‬‬ ‫‪0 To (your image ).Width – 1‬‬

‫‪ -2‬ثم يتم تفكيك كل بكسل الى مكوناته الرئيسةمع االحتفاظ بقيمة كل لون‪:‬‬

‫‪red = (your image ).GetPixel(j, i).R‬‬


‫‪green = (your image ).GetPixel(j, i).G‬‬
‫‪blue =(your image ).GetPixel(j, i).B‬‬

‫‪ -3‬خوارزمية تغيير مستوى اإلضاءة هو أن نضيف قيمة او ننقصها من كل مكون‪ ،‬مع مع‬
‫التأكد من أن ال يعبر قيمة ‪ 255‬أو ينقص عن قيمة الصفر‪.‬‬

‫‪4‬‬
‫‪Edit by : Fathalla R. Faraj Mansouri‬‬

‫‪red = red + Value‬‬


‫‪If red > 255 Then red = 255‬‬
‫‪If red < 0 Then red = 0‬‬
‫لم يبق سوى إعادة رسم الصورة‪.‬‬
‫خوارزمية تغيير الوان محددة في الصورة‬
‫هنا بدل من إضافة قيمة معينة ومتساوية لكل مكون من مكونات البكسل‪ ،‬سنضيف قيمة لمكون‬
‫واحد‪ ،‬أو قيم مختلفة للمكونات الثالث‪.‬‬

‫‪red = red + Value1‬‬


‫‪If red > 255 Then red = 255‬‬
‫‪If red < 0 Then red = 0‬‬
‫‪green = green + Value2‬‬
‫‪If green > 255 Then green = 255‬‬
‫‪If green < 0 Then green = 0‬‬
‫‪blue = blue + Value3‬‬
‫‪If blue > 255 Then blue = 255‬‬
‫‪If blue < 0 Then blue = 0‬‬

‫خوارزمية قلب الصورة افقيا‪Flip Horizontal‬‬


‫خوارزمية قلب الصورة عموديا‬
‫خوارزمية قلب الصورة افقيا و عموديا‬
‫خوارزمية المرآة‪Mirror‬‬

‫‪5‬‬

You might also like