اذهب إلى المحتوى
  • 0

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

محمد عبد الرحمن2

السؤال

Recommended Posts

  • 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 من خلال مصدر الشيفرة السابقة هنا... يمكنك أيضًا التعرف على خوارزميات أخرى لمعالجة الصور من خلال نفس الموقع من هنا

بالتوفيق... 

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0

السلام عليكم

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

وشكرا

رابط هذا التعليق
شارك على الشبكات الإجتماعية

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...