تحقق من كل بكسل للحصول على لون معين (ضمن عتبة معينة)

StackOverflow https://stackoverflow.com/questions/650472

سؤال

لدي صورة RGB في MATLAB ، وأريد أن أحلق كل بكسل والتحقق مما إذا كانت لونها ببشرة (ISH) [ربما سأفعل ذلك في مساحة HSV في مرحلة لاحقة لإنكار آثار الإضاءة وما إلى ذلك

هل يعرف أحد أفضل طريقة للقيام بذلك؟ بناء جملة Matlab الغريب يربكني قليلاً!

في الوقت الحالي لدي:

for x = 1:size(I,1)
    for y = 1:size(I,2)
            %Get the value from this x,y coordinate and check the colour.
    end
end

لكنني أعتقد أن هذا خطأ فظيع.

كيف يمكنك الوصول إلى الأجزاء المختلفة من المصفوفة بشكل صحيح؟

هل كانت مفيدة؟

المحلول

إد ،

لا تحتاج إلى حلقة:

>> a  = magic(5)

a =

    17    24     1     8    15
    23     5     7    14    16
     4     6    13    20    22
    10    12    19    21     3
    11    18    25     2     9


>> vi = (a > 5) & (a < 10)

vi =

     0     0     0     1     0
     0     0     1     0     0
     0     1     0     0     0
     0     0     0     0     0
     0     0     0     0     1

يمكنك أن ترى كيف يمكن توسيع هذا البيان ل RGB وما شابه. أود أن أجعل وظيفة


وظيفة OUT = ISFLESH (في)

٪٪ وضع رمز فحص اللحم هنا


أظن أنك تريد مجموعة من هذه (Iscaucasian ، Isasian ، إلخ ...) ستكون المشكلة هي أن هناك مجموعة كبيرة من ألوان اللحم ، لذلك سترغب في التحقق من القرب من جيرانه نطاق ألوان مماثل.

هذا الجزء من المشكلة سهل ، لكن المشكلة الأكبر محفوفة بالمخاطر.

-دوغ

نصائح أخرى

شيء واحد يجب وضعه في الاعتبار هو أن صور RGB عبارة عن مصفوفات ثلاثية الأبعاد. أول "صفحة" (أي A (: ،: ، 1)) أحمر ، والثاني أخضر ، والثالث أزرق. في بعض الأحيان أجد أنه من الأسهل العمل على مصفوفات RGB عن طريق إعادة تشكيلها في مصفوفات N-by-3 حيث تكون جميع البكسلات الحمراء في العمود 1 ، والأخضر في العمود 2 ، والأزرق في العمود 3. هذه هي كيفية القيام بذلك:

A = (a 3-D RGB image);
matSize = size(A);
A = reshape(A,prod(matSize(1:2)),3);
...
% Modify or extract data from reshaped matrix
...
A = reshape(A,matSize);  % Return A to original dimensions

لست متأكدًا مما إذا كان هذا سيساعدك على وجه التحديد مع ما تريد القيام به ، لكنني غالبًا ما أجده مفيدًا.

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

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top