تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
تعلم كيف تقوم بعمليات توضيح و تمويه و زخرفة و توهج الصور
#1
كاتب الموضوع : egyption-coder

السلام عليكم

[SIZE=4]سنشرح بعض الأساليب التى يمكن تطبيقها على الصور باستخدام اوامر قائمة
process

[/SIZE]
اولا عملية التمويه او مقاربة الأختلاف بين البكسلات المتجاورة او الـ bluring

و هى عملية تشبه ما يقوم به الأيكوليزر عندما نقارب بين ترددات الصوت حيث ان كل ما نريده هو مزيد من التجانس بين البكسلات فى الصورة و من ثم اذا استطعنا عمل ذلك على صورة كاملة فيمكن للأبداع ان يدفعنا الى انشاء ريشة او دائرة محددة المساحة كتلك الموجوده فى الفوتوشوب ثم نقوم بعمل التجانس داخل تلك المساحة فقط و كل مبرمج و ابداعه
و لكن نعود الى موضوعنا و هو كيف ننفذ هذا التجانس ؟
كل ما سنفعله هو اننا سنأخذ مجموعة من البكسلات المتجاورة و لتكن مكونة من سبع او تسع بكسلات متجاورة واحد منهم سننفذ عليه العملية و ستة او ثمانية سنقارب بينهم هذا البيكسل
فلنفترض ان البكسل الذى نعمل عليه مثلا ازرق و ان باقى البيكسلات صفراء فهنا يوجد اختلاف كبير بينه و بين باقى البيكسلات و لذا سنقوم بأخذ متوسط للبيكسلات التسعة و نخصصه لهذا البيكسل
فمثلا لو كانت قيمة هذا البيكسل 18 و باقى البيكسلات الثمانية هى (9 - 11 - 9 - 10 - 12 - 8 - 10 - 11) فيكون المتوسط هو ( 18 + 9 + 11 + 9 + 10 + 12 + 8 + 10 + 11) مقسوما على 9 و هو يساوى 11 تقريبا و هكذا تم تقريب قيمة البيكسل الى البيكسلات المجاوره له و لاحظ انه كلما زادت عدد البيكسلات المأخوذة فى المرة الواحدة كلما تاهت البيانات الهامة فى الصورة
فنحن هنا عملنا على حجم 3×3 و لو زاد هذا الحجم ليصبح 5×5 لزاد عدد البيكسلات التى تأخذ نفس القيمه مما يؤدى الى ضياع بعض التفاصيل و هكذا

و فى الكود التالى لن تجد صعوبة فى فهم ما نفعله اذا عرفت ان المتغيرات red - green - blue تمثل الألوان الأساسية للبكسل بينما المتغيرات j - i تمثل احداثيات البيكسل الحالى و بالتالى فأن j-1 و i-1 تمثل البيكسل السابق و البيكسل التالى
كما اننا سوف نعرض معدل التقدم على التكست الخاصة بالفورم حتى لا يمل المستخدم
و بالطبع سنحتاج الى فورم و نضيف لها pictureBox و زر

و سنستورد مجال الأسماء Imports System.Drawing.Drawing2D


كود :
[COLOR=navy][SIZE=4]Private Sub Processblur_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles ProcessSmooth.Click
Dim bmap As Bitmap
bmap = New Bitmap(PictureBox1.Image)
PictureBox1.Image = bmap
Dim tempbmp As New Bitmap(PictureBox1.Image)
Dim DX As Integer = 1
Dim DY As Integer = 1
Dim red, green, blue As Integer
Dim i, j As Integer
With tempbmp
For i = DX To .Height - DX - 1
For j = DY To .Width - DY - 1
red = CInt((CInt(.GetPixel(j - 1, i - 1).R) + _
CInt(.GetPixel(j - 1, i).R) + _
CInt(.GetPixel(j - 1, i + 1).R) + _
CInt(.GetPixel(j, i - 1).R) + _
CInt(.GetPixel(j, i).R) + _
CInt(.GetPixel(j, i + 1).R) + _
CInt(.GetPixel(j + 1, i - 1).R) + _
CInt(.GetPixel(j + 1, i).R) + _
CInt(.GetPixel(j + 1, i + 1).R)) / 9)
green = CInt((CInt(.GetPixel(j - 1, i - 1).G) + _
CInt(.GetPixel(j - 1, i).G) + _
CInt(.GetPixel(j - 1, i + 1).G) + _
CInt(.GetPixel(j, i - 1).G) + _
CInt(.GetPixel(j, i).G) + _
CInt(.GetPixel(j, i + 1).G) + _
CInt(.GetPixel(j + 1, i - 1).G) + _
CInt(.GetPixel(j + 1, i).G) + _
CInt(.GetPixel(j + 1, i + 1).G)) / 9)
blue = CInt((CInt(.GetPixel(j - 1, i - 1).B) + _
CInt(.GetPixel(j - 1, i).B) + _
CInt(.GetPixel(j - 1, i + 1).B) + _
CInt(.GetPixel(j, i - 1).B) + _
CInt(.GetPixel(j, i).B) + _
CInt(.GetPixel(j, i + 1).B) + _
CInt(.GetPixel(j + 1, i - 1).B) + _
CInt(.GetPixel(j + 1, i).B) + _
CInt(.GetPixel(j + 1, i + 1).B)) / 9)
red = Math.Min(Math.Max(red, 0), 255)
green = Math.Min(Math.Max(green, 0), 255)
blue = Math.Min(Math.Max(blue, 0), 255)
bmap.SetPixel(j, i, Color.FromARGB(red, green, blue))
Next
If i Mod 10 = 0 Then
PictureBox1.Invalidate()
PictureBox1.Refresh()
Me.Text = Int( _
100 * i / (PictureBox1.Image.Height - 2)).ToString & “%”
End If
Next
End With
PictureBox1.Refresh()
Me.Text = “تم تمويه الصورة”
End Sub[/SIZE][/COLOR]
ثانيا زيادة وضوح الصورة

تماما كما توقعت كل ما سنفعله هو عكس ما قمنا به عند اجراء التمويه و لكن ليس تماماً
اولا يجب ان نعلم ان الفارق بين البيكسلات المتجاورة فى الأجزاة الغير واضحة يكون صفر او عدد قليل جدا اما اذا كان هذا البيكسل على الحافة الخارجية للصورة فسيكون الفرق كبيرا جداا سواء كان قيمة موجبة او سالبة
فأذا كان الفارق بين البيكسلين صفر فلن يمكن اجراء التوضيح هنا اما ان كان هناك فارق فمن الممكن اجراء عملية التوضيح
و لكن كيف يتم تنفيذ العملية الواقع اننا لا نقوم الا بحساب الفارق بين البيكسلات ثم زيادة هذا الفاصل بنسبة ما و لتكن 50 % مثلا
و تكون المعادلة هى
القيمة الجديدة = القيمة الأصلية + 2\1 × الفارق بين البيكسلين

و يمكننا الأن متابعة الكود



كود :
[COLOR=navy][SIZE=4]Private Sub ProcessSharpen_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles ProcessSharpen.Click
Dim bmap As Bitmap
bmap = New Bitmap(PictureBox1.Image)
PictureBox1.Image = bmap
Dim tempbmp As New Bitmap(PictureBox1.Image)
Dim DX As Integer = 1
Dim DY As Integer = 1
Dim red, green, blue As Integer
Dim i, j As Integer
With tempbmp
For i = DX To .Height - DX - 1
For j = DY To .Width - DY - 1
red = CInt(.GetPixel(j, i).R) + 0.5 * _
CInt((.GetPixel(j, i).R) - _
CInt(bmap.GetPixel(j - DX, i - DY).R))
green = CInt(.GetPixel(j, i).G) + 0.5 * _
CInt((.GetPixel(j, i).G) - _
CInt(bmap.GetPixel(j - DX, i - DY).G))
blue = CInt(.GetPixel(j, i).B) + 0.5 * _
CInt((.GetPixel(j, i).B - _
CInt(bmap.GetPixel(j - DX, i - DY).B)))
red = Math.Min(Math.Max(red, 0), 255)
green = Math.Min(Math.Max(green, 0), 255)
blue = Math.Min(Math.Max(blue, 0), 255)
bmap.SetPixel(j, i, Color.FromARGB(red, green, blue))
Next
If i Mod 10 = 0 Then
PictureBox1.Invalidate()
PictureBox1.Refresh()
Me.Text = Int( _
100 * i / (PictureBox1.Image.Height - 2)).ToString & “%”
End If
Next
End With
PictureBox1.Refresh()
Me.Text = “تم زيادة التوضيح للصورة”
End Sub[/SIZE][/COLOR]
}}}}
تم الشكر بواسطة:


المواضيع المحتمل أن تكون متشابهة .
الموضوع : الكاتب الردود : المشاهدات : آخر رد
  [نقاش] هل تعلم هذا عن Select Case ali.alfoly 2 66 08-12-16, 12:19 PM
آخر رد: ali.alfoly
  مشروع لجلب الصور من الماسحة الضوئية (Scanner) m.sami.ak 12 4,053 25-08-16, 09:30 PM
آخر رد: jassim316
  شرح خوارزميات معالجة الصور (من دروس الاستاذ فوزي برزنجي) ناديه الشجيري 14 7,830 09-04-16, 11:26 PM
آخر رد: بديع
  [VB.NET] تشغيل Twain الخاص بسحب الصور من السكنر في حالة net framework4 ahmed saleh 4 681 25-10-15, 07:20 PM
آخر رد: عدنان الشمري
  هل تعلم؟ Aly El-Haddad 7 1,274 17-08-15, 01:59 AM
آخر رد: عبد الله
  [VB.NET] التعامل مع الصور في vb net أحمد النجار 2 1,023 03-06-15, 10:45 PM
آخر رد: أحمد النجار
  تحويل الفيديو في برامجك-الجزء الثاني( إصلاح للمشاكل + تعديل للروابط + توضيح للأمر ) RaggiTech 1 718 10-12-14, 06:37 PM
آخر رد: abulayth
  بشرى لكل من يريد تعلم البرمجة بالفيجوال بيسك دوت نت arbtech 8 1,613 21-08-13, 11:32 PM
آخر رد: arbtech
  طريقة عمل برنامج زخرفة النصوص 3booody 3 1,552 19-06-13, 11:36 PM
آخر رد: Hassan Khamees
  تعلم أستخدام My.Settings لحفظ التغييرات عند الإغلاق Aly El-Haddad 15 2,741 13-06-13, 05:32 PM
آخر رد: ابراهيم

التنقل السريع :


يقوم بقرائة الموضوع: بالاضافة الى ( 1 ) ضيف كريم