مقدمة في معالجة الصور
سيتم شرح كلا من :
أنواع الصورة الرقمية
في الماتلاب.
فتح وقراءة صورة.
منحني الهيستوغرام و
تحسين التباين.
عمليات مختلفة على
الصور.
أنواع الصورة الرقمية
في الماتلاب :
Binary Image
هي الصورة التي تمثل
بمصفوفة بعداها MxN وهي تحوي اللونين الأسود والأبيض فقط .
بحيث ياخذ كل بكسل
قيمة تمثل لون فالأسود يأخذ قيمة 0 بينما الأبيض يأخذ قيمة 1.
(لا يوجد لون رمادي
في هذا النوع من الصور).
Grayscale Image
هي صورة تمثل بمصفوفة
ثنائية البعد MxN وعناصرها من النوع double
تقع بين المجال [0,1]
حيث 0 يمثل الأسود و 1 الأبيض و ما بينهما درجات اللون الرمادي. كل
عنصر في المصفوفة يمثل درجة لون لبكسل واحد ابيض او اسود او ما بينهما.
TrueColor RGB Image
هي صورة تمثل بمصفوفة
ثلاثية ثلاثية البعد MxNx3 عناصرها من نوع double او unit8 (سوف
نشرح النوعين لاحقاً) , فكل بكسل في الصورة ينتج عن دمج ثلاثة مركبات لإعطاء اللون
المناسب فالمركبة الحمراء مكونة من مصفوفة ثنائية (تستخرج من المصفوفة ثلاثية
البعد) MxN يكون فيها قيمة اللون بين المجال [0,1] الأسود 0 و الأحمر 1 و ما
بينهما هو درجات اللون الأحمر , و كذلك بالنسبة للأزرق و الأخضر.
وبدمج ثلاثة الألوان
RGB من ثلاثة مصفوفات ثنائية البعد نحصل على الألوان الحقيقية.
يوجد نوعان لمجال
اللون :
Double : يكون مجاله [0,1] بحيث يكون الأسود 0 و اللون 1 و درجات اللون بينهما بحيث
تكون قيم اللون اصغر من الواحد (فاصلة) مثلا 0.234 .
Unit8 : تكون قيمته صحيحة Integer و يتراوح مجاله [0,255]
بحيث 0 يمثل الأسود و 255 اللون و ما بينهما درجات اللون.
يستخدم نوع unit8
بدلاً من ال double للتقليل من مساحة الذاكرة
و لتسريع من عملية معالجة الصور.
فتح وقراءة صورة :
يتم فتح وقراءة صورة
من أي نوع بإستخدام تعليمة Imread: ويتم عرضها بإستخدام
التعليمة imshow ونميز حالتين :
1- فتح صورة من
الحاسب : لفتح صورة وعرضها من الجهاز الحاسب نستخدم الصيغة التالية :
;(X=imread (filename,format
Imshow(x);
حيث تتم قراءة الصورة
عبر المسار filename ذات الإمتداد format ومن ثم تخزينها في المصفوفة x .
2- فتح صورة من
برنامج الماتلاب نفسه وعرضها نستخدم الصيغة التالية :
X=imread (filename,format );
Imshow(x)
مثال : صورة من نوع RGB
X = imread('onion.png');
imshow(X) ;
Imwrite:
بفرض أننا قمنا بمعالجة صورة معينة وأجرينا عليها التغييرات المناسبة ثم أردنا حفظ
أو طباعة هذه الصورة على جهاز الحاسب بإسم جديد وإمتداد جديد نستخدم هذه التعليمة
بالصيغة التالية:
Imwrite(image , filename);
مثال:
x=imread('C:\Users\DigitalNet\Desktop\ferrari','jpeg')
imshow(x)
imwrite(x,’newferrari.bmp’);
هنا قمنا بطباعة نفس
الصورة الموجودة على سطح المكتب إلى مسار الماتلاب الآني (current folder
يظهر في شريط الأدوات في واجهة برنامج الماتلاب ) باسم جديد newferrari
وإمتداد جديد bmp.
Iminfo:
تمكننا هذه التعليمة بالحصول على معلومات كاملة عن الصورة وبكتاية الصيغة التالية :
info=imfinfo(filename,format)
نحصل على معلومات
أهمها :
مسار ملف الصورة –
حجم الملف – العرض – الإرتفاع – الإمتداد – نظام الألوان.
تحويل بين الصور :
Im2bw: يمكن تحويل الصورة أيا كان نوعها إلى صورة ثنائية ( أبيض وأسود)
بإستخدام هذه التعليمة :
binary image=im2bw(image,level);
حيث image تمثل الصورة الأصلية أما level فهي شدة العتبة تتراوح بين
الصفر والواحد حيث تتحول جميع البكسلات التي قيمتها فوق العتبة إلى الأبيض أو تحمل
القيمة 1 أما البكسلات التي تحمل قيم تحت العتبة فتتحول إلى اللون الأسود أو تحمل
القيمة صفر .
مثال :
x=imread('C:\Users\DigitalNet\Desktop\mosque','jpeg');
imshow(x);
y=im2bw(x,0.25);
imshow(y);
منحني الهيستوغرام:
يظهر هذا المنحني
توزع الاضاءة في الصورة على البكسلات ,حيث يعبر محور السينات على شدة الاضاءة و
محور الوايات بكسلات الصورة
باستخدام تعليمة
·
Imhist(I)
تظهر هذه التعليمة
الهيستوغرام (تقسيم الإضاءة داخل الصورة ) للصورة (I) ,إن
عدد الـ bins في الهيستوغرام محدد بنوع الصورة فإذا كان نوع الصورة grayscale فإن imhist
يستخدم قيم افتراضية من 256 bins , أما إذا كانت الصورة ثنائية فإن imhist
تستخدم 2 bins.
·
Imhist(I,n) :
تعرض الهيستوغرام حيث
n تحدد عدد ال bins المستخدم في الهيستوغرام , و تحدد ايضا طول حاجز اللون , ( إذا
كانت الصورة ثنائية n تأخذ قيمتين فقط ).
تحسين تباين
الصورة :
يمكن تحسين تباين
الصورة باستخدام تعليمة histeq
كما يلي :
حيث تقوم هذه التعليمة بفرد مستويات الاضاءة على كافة بكسلات الصورة , و لا
تبقى موزعة على بكسلات معينة .
I = imread('pout.tif');
imshow(I)
figure, imhist(I)
I2 = histeq(I);
figure, imshow(I2)
figure, imhist(I2)
و يمكننا تحسين تباين الصورة من خلال :
imadjust : يمكننا تعديل تباين
الصورة بإستخدام هذه التعليمة ولها عدة أشكال
أحدها :
j=imadjust(i)
وبذلك تكون الصورة j هي نفس الصورة I مع زيادة تباين الصورة من
خلال زيادة درجة الإشباع 1% للبيانات
مثال :
I=imread('pout.tif');
imshow(I);
J =imadjust(I);
figure;
imshow(J);
عمليات أخرى على الصورة :
· تكبير و
تصغير حجم الصورة :
Imresize : يمكننا تغيير حجم الصورة ثناثية البعد بإستخدام هذه التعليمة
الصيغة الأولى :
J=imresize(I,Scale)
حيث I هي الصورة قبل إعادة
التقييس و scale نسبة التقييس فإذا كانت أكبر من الواحد فسيزداد
حجم الصورة أما إذا كانت أصغر من الواحد فسينقص حجم الصورة.
تدوير الصورة :
Imrotate: بهذه التعليمة نستطيع تدوير الصورة بزاوية معينة بالدرجات.
J=imrotate(I,Angle);
حيث I هي الصورة الأصلية المراد تدويرها وangle زاوية الدوران مقدرة بالدرجات
مثال :
I = imread('circuit.tif');
J = imrotate(I,45,'bilinear');
imshow(I)
figure,
imshow(J)
· اقتطاع جزء من الصورة:
Imcrop : يمكننا من خلال هذه التعليمة من إقتطاع جزء من الصورة وإنشاء
صورة جديدة من المصورة المقتطعة
J=imcrop(I);
حيث j هي الصورة المقتطعة يدويا
حيث يتوجب عليك تحديد الجزء من الصورة الذي نريد إقتطاعه يدويا
· قلب الصورة :
Fliplr: تمكننا هذه االتعليمة من إجراء قلب للصورة من اليمين لليسار (لا
ننسى أن الصورة عبارة عن مصفوفة ) أي وكأن الصورة وضعت أمام مرآة .
J=fliplr(I);
حيث I الصورة الأصلية
Flipud : تمكننا هذه االتعليمة من إجراء قلب للصورة من الأعلى إلى
الأسفل (لا ننسى أن الصورة عبارة عن
مصفوفة ) .
J=flipud(I);
حيث I الصورة الأصلية
· تصميم مرشحات :
Fspecial: تصميم مرشح ثنائي البعد من أحد الأنواع الشهيرة مثل مرشح غاوص أو
لابلاسيان أو اللوغاريتمي او المتوسط ....ويمكن كتابته بالصيغة التالية :
h = fspecial(type, parameters );
حيث type تمثل نوع المرشح و parameter مواصفات هذا المرشح.
مثال :
I = imread('cameraman.tif');
subplot(2,2,1);
imshow(I); title('Original Image');
H = fspecial('motion',20,45);
MotionBlur = imfilter(I,H,'replicate');
subplot(2,2,2);
imshow(MotionBlur);title('Motion Blurred Image');
H = fspecial('disk',10);
blurred = imfilter(I,H,'replicate');
subplot(2,2,3);
imshow(blurred); title('Blurred Image');
H = fspecial('unsharp');
sharpened = imfilter(I,H,'replicate');
subplot(2,2,4);
imshow(sharpened); title('Sharpened Image');
· إضافة ضجيج :
Imnoise : إضافة ضجيج
للصورة بكتابة الصيغة التالية
J = imnoise(I,type)
حيث I هي الصورة الأصلية
type يمثل نوع الضجيج فقد يكون Gaussian أو salt and papper أو poisson ....
مثال :
I = imread('eight.tif');
J = imnoise(I,'salt & pepper',0.02);
figure,
imshow(I)
figure,
imshow(J)
· Videoinput : يمكننا هذه
التعليمة من تشغيل الفيديو وإستعراضه من كاميرا الحاسب أو أي كاميرا أو أي كاميرا موصولة معه عن طريق ال USB وهذه الصيغة
obj = videoinput(adaptorname,deviceID,format)
حيث adaptername إسم المتغير للكاميرا و deviceID هورقم يدل على ID الكاميرا و format تمثل صيغة العرض قد تكون YUY2-640*480 أو MJPG-640*480 طبعا لا ننسى أن
الرقم 640*480 يمثل حجم الصورة ويمكن
تغييره .
مثال :
cam=videoinput('winvideo',1,'YUY2_640x480');
set(cam,'returnedcolorspace','rgb');
vidRes = get(cam, 'VideoResolution');
nBands = get(cam, 'NumberOfBands');
hImage = image( zeros(vidRes(2), vidRes(1), nBands) );
preview(cam,hImage);
ملاحظة :
preview: لإستعراض
الفيديوومشاهدته في نافذة ضمن واجهة الماتلاب
Getsnapshot: مهمته إلتقاط صورة من الكاميرا وتكتب بالصيغة التالية
Image=getsnapshot(obj);
يأتي هذا التابع مرافقا لتابع videoinput حيث obj إسم متحول الذي خزن فيه الفيديو
مثال :
cam=videoinput('winvideo',1,'YUY2_640x480');
set(cam,'returnedcolorspace','rgb');
vidRes = get(cam, 'VideoResolution');
nBands = get(cam, 'NumberOfBands');
hImage = image( zeros(vidRes(2), vidRes(1), nBands) );
preview(cam,hImage);
pause(10);
image1=getsnapshot(cam);
figure;
imshow(image1);