تقييم الموضوع :
  • 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 ك ب / التحميلات : 71)

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

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


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


المواضيع المحتمل أن تكون متشابهة .
الموضوع : الكاتب الردود : المشاهدات : آخر رد
Video [درس فيديو] تقارير الكريستال ريبورت وتغيير مسار الصور أثناء التشغيل رمضان272 0 1,616 28-03-22, 03:18 AM
آخر رد: رمضان272
  [شرح] اتصال بقاعدة بيانات اكسيس , اضافة بيان , تعديل بيان , حذف بيان , عرض البيانات . ahmed salam 25 38,266 23-02-22, 06:04 PM
آخر رد: رضوان الجماعي
  شرح خوارزميات معالجة الصور (من دروس الاستاذ فوزي برزنجي) ناديه الشجيري 19 34,376 20-02-22, 02:13 PM
آخر رد: رضوان الجماعي
  التعامل مع الصور Images في بيئة الدوت نت باستخدام +GDI - مقدمة RaggiTech 3 5,868 30-07-21, 05:14 PM
آخر رد: kebboud
  Compare Images المقارنة بين الصور Abu Ehab 0 3,276 31-10-18, 04:27 PM
آخر رد: Abu Ehab
  مقدمة إلي ضغط الصور ..... Zip Bitmap silverlight 0 2,392 10-05-18, 04:35 AM
آخر رد: silverlight
  [درس فيديو] شرح ربط البرنامج بقاعدة بيانات, إدراج حذف تعديل جلب البيانات ( بدون أن تكتب سطر واحد) عبدالله الدوسري 4 6,458 08-02-18, 12:55 AM
آخر رد: Ameer Eagle
  مشروع لجلب الصور من الماسحة الضوئية (Scanner) m.sami.ak 14 12,101 22-01-17, 10:41 AM
آخر رد: amko
  [VB.NET] أتمنى تعديل المشروع adel27 10 5,108 30-06-16, 06:19 AM
آخر رد: ابو نجلاء
  [VB.NET] تشغيل Twain الخاص بسحب الصور من السكنر في حالة net framework4 ahmed saleh 4 4,387 25-10-15, 07:20 PM
آخر رد: عدنان الشمري

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


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