تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
تعديل الصور : التحديد Sharpening
#1
<< بسم الله الرحمن الرحيم >>

السلام عليكم إخواني القرآء , كما هو حال الدرس السابق في إضافة الضبابية بما يعرف فلتر ال Blur
اليوم تعالوا لنتعلم ما هو عكس ال Blur و هو ما يعرف بال Sharpening أو التحديد و كل هذه الكلمات معروفة بالنسبة لمصمم ال Photoshop فهذه الفلاتر هي فلاتر محورية في التصميم .


تعريف بفلتر ال Sharpening :

زيادة نسبة التباين ( الفرق في اللون ) بين كل Pixel و مجاوراتها و يجب الانتباه جدا بأن المقصود ليس التباين الكلي للصورة Contrast و إنما تباين Pixel عن أخرى .


قبل البدء :
فقط لتكون أخي القارئ جاهزا لهذا الدرس عليك بالإطلاع على فكرة تنفيذ فلتر Blur ليسهل الأمر عليك هنا .
((الموضوع موجود في المنتدى بشكل مستقل))

فكرة الفلتر :
بما أننا نريد أن نجعل كل Pixel متباينة عن الأخرى فنحن بحاجة لجعلها تبرز أكثر عن مجاوراتها لكن كيف العمل هنا ؟؟ , بمعنى آخر ما هي العملية المعاكسة للمتوسط الحسابي ( العملية التي تعتمد عليها فلترة Blur ) ؟!؟!


فكرة تنفيذ :
إننا إذا بحاجة لزيادة نسبة الألوان في كل Pixel لكن بنسبة معقولة لا تجعلها غامقة جدا .

- الحل يتم بالشكل التالي لنأخذ اللون الأحمر في بكسل معينة و نأخذ قيمة اللون الأحمر في مجاورتها و من ثم نعدل نسبة الأحمر في النقطة الأولى النقطة فنقوم بإضافة ( فرق الأحمرين - إن جاز التعبير - )و بذلك نكون قد زدنا فرق الأحمرين بين هاتين ال Pixels و إذا كررنا العملية على اللون الأخضر و الأزرق حصلنا على فرق نسب لونية أكبر بين ال Pixel المدروسة و مجاورتها و بالتالي أصبحت أكثر تباينا و هو المطلوب .


إن فكرة الحل هذه هي و يكون الكود هو الباقي علينا لنثبت الفكرة أكثر و أكثر :


إنشاء المشروع :
- نبدأ مشروع Windows Forms Application و نضع على الفورم الأداوت التالية باسمائها الافتراضية :
1 - ProgressBar للإستدلال على تقدم عملية الفلترة .
2 - Button للبدء بالفلترة .
3 - PictureBox تحوي على الصورة المراد تنفيذ الفلتر عليها .
و هذا الكود مشروح سطرا بسطر :

كود :
[SIZE=4][b][FONT=courier new]
[/FONT][/b][/SIZE]
[align=left][b][SIZE=3]
[/SIZE][FONT=courier new][SIZE=3]'بداية أمر الضغط على الزر
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

'إرجاع قيمة صغرية لشريط التقدم
ProgressBar1.Value = 0

'جعل القيمة الأعظمية لشريط التفدم مساوية القيمة الرقمية لارتفاع الصورة في مربع الصور
ProgressBar1.Maximum = Val(PictureBox1.Image.Height)

'تعريف متغير على أنه صورة و إعطائه الصورة الموجودة في مربع الصور
Dim AHED As New Bitmap(PictureBox1.Image)

'إرجاع قيمة المتغير إلى مربع الصورة لتتأثر بالتغيرات الحاصلة
PictureBox1.Image = AHED

'تعريف متغيرات للألوان و الاحداثيات
Dim Red, Green, Blue, I, J As Integer

'عبارة الاختصار
With AHED

'جملة تكرار للإحداثي الصادي
For I = 1 To .Height - 2

'جملة تكرار للاحداثي السيني
For J = 1 To .Width - 2

'أخذ قيمة اللون الأحمر من النقطة و إضافة نصف الفرق بين " الأحمرين " و هذا ما تحدثنا عنه
Red = CInt(.GetPixel(J, I).R) + (0.5 * (CInt(.GetPixel(J, I).R) - CInt(.GetPixel(J - 1, I - 1).R)))

'إن كانت القيمة سالبة ترجع موجبة باستخدام الضرب بالواحد السالب
If Red < 0 Then Red = Red * -1

'العملية نفسها على اللون الأخضر
Green = CInt(.GetPixel(J, I).G) + (0.5 * (CInt(.GetPixel(J, I).G) - CInt(.GetPixel(J - 1, I - 1).G)))
If Green < 0 Then Green = Green * -1

'مرة أخرى على اللون الأزرق
Blue = CInt(.GetPixel(J, I).B) + (0.5 * (CInt(.GetPixel(J, I).B) - CInt(.GetPixel(J - 1, I - 1).B)))
If Blue < 0 Then Blue = Blue * -1

'من الممكن بعد العملية الحسابية أن تكون القيمة أكبر من 255 و هذا خطأ
'نصلح الأمر بالدالة الرياضية التي تختار القيمة الأصغر من القيمتين المرجعتين لها
'و بذلك لن تتعدى القيمة فوق سقف ال 255
Red = Math.Min(Red, 255)

'نفس الحركة بالنسبة للون الأزرق
Blue = Math.Min(Blue, 255)

'مرة أخرى للون الأخضر
Green = Math.Min(Green, 255)

'إعادة القيم مرة أخرى إلى النقطة بعد التعديل
.SetPixel(J, I, Color.FromArgb(Red, Green, Blue))

'إنهاء عبارة التكرار الأولى
Next

'تحديث الصورة
PictureBox1.Refresh()

'زيادة قيمة شريط التقدم خطوة
ProgressBar1.Value = ProgressBar1.Value + 1

'إنهاء التكرار الثاني
Next

'إنهاء عبارة الاختصار
End With

'تحديث الصورة
PictureBox1.Refresh()

'إنهاء العملية بإكمال شريط التقدم
ProgressBar1.Value = ProgressBar1.Maximum

' نهاية الحدث
End Sub[/SIZE]
[/FONT][/b][/align]


ملاحظة مهمة : للتحكم بشدة الفلتر يمكننا تغيير 0.5 الموجودة في الكود بشكل طردي ( زيادة زيادة أو نقصان نقصان ) مع الانتباه لجعلها متساوية في كل الألوان لكي لا تتغير ألوان الصورة


و أحب أن أنوه مرة أخرى بأن الدرس و الشرح و المثال من تأليفي الشخصي .

تحياتي للجميع
أخوكم المبرمج الطموح vb6



الملفات المرفقة
.zip   01282311044.zip (الحجم : 228.35 ك ب / التحميلات : 33)

حصريا للمنتدى :
درس: كيفية حساب عدد الأسطر في نص

-- إذا لم تزد على الحياة شيئاً فأنت زائد عليها --
-- المبرمج الطموح vb6 --


الرد }}}}
تم الشكر بواسطة:


المواضيع المحتمل أن تكون متشابهة .
الموضوع : الكاتب الردود : المشاهدات : آخر رد
  [شرح] اتصال بقاعدة بيانات اكسيس , اضافة بيان , تعديل بيان , حذف بيان , عرض البيانات . ahmed salam 20 9,106 26-09-16, 08:12 AM
آخر رد: abumuhannadzym
  مشروع لجلب الصور من الماسحة الضوئية (Scanner) m.sami.ak 12 4,032 25-08-16, 09:30 PM
آخر رد: jassim316
  [VB.NET] أتمنى تعديل المشروع adel27 11 706 30-06-16, 06:19 AM
آخر رد: ابو نجلاء
  شرح خوارزميات معالجة الصور (من دروس الاستاذ فوزي برزنجي) ناديه الشجيري 14 7,807 09-04-16, 11:26 PM
آخر رد: بديع
  [VB.NET] تشغيل Twain الخاص بسحب الصور من السكنر في حالة net framework4 ahmed saleh 4 672 25-10-15, 07:20 PM
آخر رد: عدنان الشمري
  [VB.NET] التعامل مع الصور في vb net أحمد النجار 2 1,014 03-06-15, 10:45 PM
آخر رد: أحمد النجار
  تحويل الفيديو في برامجك-الجزء الثاني( إصلاح للمشاكل + تعديل للروابط + توضيح للأمر ) RaggiTech 1 715 10-12-14, 06:37 PM
آخر رد: abulayth
  مقال - استخلاص الصور من صورة متحركة gif RaggiTech 1 571 05-10-12, 03:39 PM
آخر رد: RaggiTech
  درس -- تعلم فلتر التحديد Sharpening مع شرح مفصل و مثال توضيحي RaggiTech 0 668 03-10-12, 02:09 PM
آخر رد: RaggiTech
  تعلم كيف تقوم بعمليات توضيح و تمويه و زخرفة و توهج الصور RaggiTech 0 446 03-10-12, 10:02 AM
آخر رد: RaggiTech

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


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