تقييم الموضوع :
  • 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]
}}}
تم الشكر بواسطة:


المواضيع المحتمل أن تكون متشابهة .
الموضوع : الكاتب الردود : المشاهدات : آخر رد
Video [درس فيديو] تقارير الكريستال ريبورت وتغيير مسار الصور أثناء التشغيل رمضان272 0 1,607 28-03-22, 03:18 AM
آخر رد: رمضان272
  شرح خوارزميات معالجة الصور (من دروس الاستاذ فوزي برزنجي) ناديه الشجيري 19 34,330 20-02-22, 02:13 PM
آخر رد: رضوان الجماعي
  التعامل مع الصور Images في بيئة الدوت نت باستخدام +GDI - مقدمة RaggiTech 3 5,856 30-07-21, 05:14 PM
آخر رد: kebboud
  معلومة :: تعلم كيف تحفظ صورة في My.Settings بدون الإحتياج إلى مسارها! أسامة أحمد 4 6,097 18-07-21, 02:53 AM
آخر رد: kebboud
  Compare Images المقارنة بين الصور Abu Ehab 0 3,269 31-10-18, 04:27 PM
آخر رد: Abu Ehab
  [مشروع] تعلم كيف تصنع برنامج لنشر منشورات لحساب الفيس بوك الخاص بك Basil Abdallah 8 6,264 01-07-18, 01:21 AM
آخر رد: YousefOkasha
  مقدمة إلي ضغط الصور ..... Zip Bitmap silverlight 0 2,392 10-05-18, 04:35 AM
آخر رد: silverlight
  مشروع لجلب الصور من الماسحة الضوئية (Scanner) m.sami.ak 14 12,086 22-01-17, 10:41 AM
آخر رد: amko
  [نقاش] هل تعلم هذا عن Select Case ali.alfoly 3 3,400 30-12-16, 07:00 PM
آخر رد: Basil Abdallah
  [VB.NET] تشغيل Twain الخاص بسحب الصور من السكنر في حالة net framework4 ahmed saleh 4 4,374 25-10-15, 07:20 PM
آخر رد: عدنان الشمري

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


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