• 0

كيفية صياغة خوارزمية لمعالجة الصور

  • 0

هناك عدة خوارزميات لمعالجة الصور أحداهم خوارزمية تدعى (تطبيع RGB Normalized  (RGB و RGB هي اختصار الألوان (red green blue) وهي ما سأذكر خوارزميتها هنا

ما هو Normalized RGB أو تطبيع قيم RGB ؟
في بعض الأحيان ، تريد التخلص من التشوهات الناجمة عن الأضواء والظلال في صورة ما. يمكن أن يكون تطبيع قيم RGB للصورة في مثل هكذا حالات طريقة بسيطة وفعالة لتحقيق ذلك.

عند تطبيع قيم RGB لصورة ما، تقوم بتقسيم قيمة كل بكسل على مجموع قيمة البيكسل على جميع القنوات. لذلك إذا كان لديك بكسل مع R و G و B مكثفة في صورة معينة ... فإن قيمها الطبيعية ستكون R / S و G / S و B / S (حيث ، S = R + G + B).

لاحظ الصورتين التاليتين:

Capture.PNG

الصورة العليا هي اللقطة الأصلية المأخوذة من الكاميرا. الصورة السفلى هي نسختها الطبيعية. قد لا تبدو جميلة، لكن يوجد بعض التغييرات المهمة والأساسية كالظلال في الصورة، قد لا يكون هذا هو أفضل صورة لإظهار RGB طبيعية. لكنه أحد الحلول المتاحة...

 خوارزمية Normalized RGB تظهر من خلال الشيفرة التالية

IplImage* NormalizeImage(IplImage* theimg)
{


    IplImage* redchannel = cvCreateImage(cvGetSize(theimg), 8, 1);
    IplImage* greenchannel = cvCreateImage(cvGetSize(theimg), 8, 1);
    IplImage* bluechannel = cvCreateImage(cvGetSize(theimg), 8, 1);


    IplImage* redavg = cvCreateImage(cvGetSize(theimg), 8, 1);
    IplImage* greenavg = cvCreateImage(cvGetSize(theimg), 8, 1);

    IplImage* blueavg= cvCreateImage(cvGetSize(theimg), 8, 1);

    IplImage* imgavg = cvCreateImage(cvGetSize(theimg), 8, 3);


    cvSplit(theimg, bluechannel, greenchannel, redchannel, NULL);


    for(int x=0;x<theimg->width;x++)
    {
        for(int y=0;y<theimg->height;y++)
        {


            int redValue = cvGetReal2D(redchannel, y, x);
            int greenValue = cvGetReal2D(greenchannel, y, x);
            int blueValue = cvGetReal2D(bluechannel, y, x);


            double sum = redValue+greenValue+blueValue;


            cvSetReal2D(redavg, y, x, redValue/sum*255);
            cvSetReal2D(greenavg, y, x, greenValue/sum*255);
            cvSetReal2D(blueavg, y, x, blueValue/sum*255);
        }
    }


    cvMerge(blueavg, greenavg, redavg, NULL, imgavg);


    cvReleaseImage(&redchannel);
    cvReleaseImage(&greenchannel);
    cvReleaseImage(&bluechannel);
    cvReleaseImage(&redavg);
    cvReleaseImage(&greenavg);

    cvReleaseImage(&blueavg);

    return imgavg;

}

يمكنك التعرف بشكل أوسع على طريقة كتابة شيفرة خوارزمية normalized RGB من خلال مصدر الشيفرة السابقة هنا... يمكنك أيضًا التعرف على خوارزميات أخرى لمعالجة الصور من خلال نفس الموقع من هنا

بالتوفيق... 

1 شخص أعجب بهذا

انشر على الشّبكات الاجتماعية


رابط هذه المساهمة
  • 0

السلام عليكم

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

وشكرا

انشر على الشّبكات الاجتماعية


رابط هذه المساهمة

يجب أن تكون عضوًا لدينا لتتمكّن من التعليق

انشاء حساب جديد

يستغرق التسجيل بضع ثوان فقط


سجّل حسابًا جديدًا

تسجيل الدخول

تملك حسابا مسجّلا بالفعل؟


سجّل دخولك الآن