[CENTER]وعليكم السلام
اقترح عليك استخدام الدالة
regionprops
فهي تعتبر جد فعالة في مثل هاته التطبيقات
هذه بعض الامثلة على صورتك
الكود الاول
clear all
clc
close all
I=imread('dipum.jpg');
bw = im2bw(I, graythresh(I));
[m n]=size(bw);
L = bwlabel(bw);
imshow(L)
ry = regionprops(L, 'area');
area=cat(1, ry.Area);
[Y,f]=max(area);
c = regionprops(L, 'Extrema');
centr = cat(1, c.Extrema);
dimen=centr((f-1)*8+1:f*8,:)
for h=1:8
hold on
plot(dimen(h,1),dimen(h,2),'+');
end
في هذا الكود استخدمنا خاصية
Extrema
وهي تعطينا 8 حواف للشكل الذي نريد العمل عليه
شرح الكود
اولا
قمنا بتحويل الصورة الى صورة ثنائية، اي 1 و0 فقط
بعدها قمنا بتحويلها مرة اخرى الى صورة “دلالية” والتي تقسم الصورة الثنائية الى مصفوفة حسب الاشكال المتوفرة
ثانيا
استخدمنا الدالة
regionprops
والتي تقسم لنا الصورة الى مناطق حسب المصفوفة السابقة
حتى وان يبدو ان صورتك فيها فقط منطقتين، لكن هناك العديد من المناطق الصغيرة الغير واضحة
لذلك سنختار المنطقة الاكبر والتي تهمنا
ثالثا
قمنا باستخراج حواف المنطقة الكبيرة التي تهمنا باستخدام الخاصية
Extrema
من المفروض انها تعطينا 8 حواف، لما الشكل يكون متعدد الاضلاع
لكن بما انه شبه مستطيل فان بعض الحواف تتطابق
والحواف تكون
353.5000 0.5000
549.5000 0.5000
551.5000 110.5000
551.5000 111.5000
500.5000 704.5000
332.5000 704.5000
332.5000 704.5000
332.5000 703.5000
كما نرى في الصورة
من هذه الاحداثيات تستطيع استخراج العرض
[COLOR=Red]الكود الثاني
[/color]
clear all
clc
close all
I=imread('dipum.jpg');
bw = im2bw(I, graythresh(I));
[m n]=size(bw);
L = bwlabel(bw);
imshow(L)
ry = regionprops(L, 'area');
area=cat(1, ry.Area);
[Y,f]=max(area);
x = regionprops(L, 'BoundingBox');
centrx = cat(1, x.BoundingBox);
G=centrx(f,:)
hold on
plot(G(1,1),1:m,'+','MarkerSize',2);
hold on
plot(G(1,3)+G(1,1),1:m,'+','MarkerSize',2);
هي نفس الدالة
لكن هذه المرة نستخدم خاصية
BoundingBox
اي المستطيل الذي يحوي الشكل
شرح الكود
نفس الشرح للكود السابق
لكن النتيجة هذه المرة تكون احداثيات المستطيل
332.5000 0.5000 219.0000 704.0000
الاحداثيات الاولى
332.5000 0.5000
هي احداثيات اعلى نقطة على اليسار للمستطيل
اي الزاوية العليا اليسرى
الاحداثيات
219.0000 704.0000
هي على التوالي عرض وطول المستطيل
لو نرسم هذا المستطيل بطريقة بدائية
ستكون النتيجة
يمكنك استخدام الخصائص الاخرى للدالة
فهي جد قوية ومساعدة
[/center]