هناك عدة خوارزميات لمعالجة الصور أحداهم خوارزمية تدعى (تطبيع 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).
لاحظ الصورتين التاليتين:
الصورة العليا هي اللقطة الأصلية المأخوذة من الكاميرا. الصورة السفلى هي نسختها الطبيعية. قد لا تبدو جميلة، لكن يوجد بعض التغييرات المهمة والأساسية كالظلال في الصورة، قد لا يكون هذا هو أفضل صورة لإظهار 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 من خلال مصدر الشيفرة السابقة هنا... يمكنك أيضًا التعرف على خوارزميات أخرى لمعالجة الصور من خلال نفس الموقع من هنا
بالتوفيق...