تحديد عتبة الرسم البياني المتوازن

في معالجة الصور ، تُعدّ طريقة عتبة الهيستوغرام المتوازنة (BHT) [ 1 ] طريقةً بسيطةً للغاية تُستخدم لتحديد عتبة الصور تلقائيًا . ومثل طريقة أوتسو [ 2 ] وطريقة تحديد العتبة بالاختيار التكراري [ 3 ] ، تعتمد هذه الطريقة على الهيستوغرام . يفترض هذا النهج أن الصورة مُقسّمة إلى فئتين رئيسيتين: الخلفية والمقدمة . وتسعى طريقة BHT إلى إيجاد مستوى العتبة الأمثل الذي يفصل الهيستوغرام إلى هاتين الفئتين.

الصورة الأصلية.
صورة مُعالجة بالعتبة.
تطور المنهج.

تعتمد هذه الطريقة على وزن الرسم البياني، وتحديد أي الجانبين أثقل، ثم إزالة الوزن من الجانب الأثقل حتى يصبح هو الأخف. وتُكرر العملية نفسها حتى تتلاقى حواف الميزان .

نظراً لبساطتها، فإن هذه الطريقة تعتبر خياراً جيداً كنهج أولي عند تقديم موضوع تحديد عتبة الصورة التلقائية .

الخوارزمية

القائمة التالية، المكتوبة بلغة C ، هي نسخة مبسطة من طريقة تحديد العتبة باستخدام المدرج التكراري المتوازن :

int BHThreshold ( int [] histogram ) { i_m = ( int )(( i_s + i_e ) / 2.0f ); // مركز الميزان I_m w_l = get_weight ( i_s , i_m + 1 , histogram ); // الوزن على اليسار W_l w_r = get_weight ( i_m + 1 , i_e + 1 , histogram ); // الوزن على اليمين W_r while ( i_s <= i_e ) { if ( w_r > w_l ) { // الجانب الأيمن أثقل w_r -= histogram [ i_e -- ]; if ((( i_s + i_e ) / 2 ) < i_m ) { w_r += histogram [ i_m ]; w_l -= histogram [ i_m -- ]; } } else if ( w_l >= w_r ) { // الجانب الأيسر أثقل w_l -= histogram [ i_s ++ ]; if ((( i_s + i_e ) / 2 ) >= i_m ) { w_l += histogram [ i_m + 1 ]; w_r -= histogram [ i_m + 1 ]; i_m ++ ; } } } return i_m ; }

فيما يلي مثال على تطبيق محتمل بلغة بايثون :

def balance_histogram_thresholding ( histogram , minimum_bin_count : int = 5 , jump : int = 1 ) -> int : """  يحدد عتبة مثالية من خلال موازنة الرسم البياني للصورة،  مع التركيز على خانات الرسم البياني المهمة لتقسيم الصورة إلى جزأين. الوسائط:  histogram (قائمة): رسم بياني لتوزيع البكسلات في الصورة، مُعبَّر عنه بقائمة من الأعداد الصحيحة،  حيث يُمثل كل عنصر عدد البكسلات  عند مستوى شدة مُحدد.  minimum_bin_count (عدد صحيح): الحد الأدنى لعدد البكسلات في خانة معينة ليتم أخذها في الاعتبار عند  تحديد العتبة. يتم تجاهل الخانات التي يقل عدد البكسلات فيها عن هذه  القيمة، مما يُقلل من تأثير التشويش.  jump (عدد صحيح): حجم الخطوة لضبط العتبة أثناء التكرار.  تُسرِّع القيم الأكبر من التقارب، ولكنها قد تتجاوز العتبة المُثلى. القيمة المُعادة:  عدد صحيح: قيمة العتبة المحسوبة. تُمثل هذه القيمة مستوى الشدة  (أي فهرس الرسم البياني المُدخل) الذي يفصل  الأجزاء المهمة من الرسم البياني إلى مجموعتين، يُمكن تفسيرهما على أنهما المقدمة  والخلفية.  إذا أعادت الدالة القيمة -1، فهذا يُشير إلى أن الخوارزمية لم تتمكن من إيجاد  عتبة مناسبة ضمن القيود (على سبيل المثال، جميع الخانات أقل من  الحد الأدنى لعدد الخانات).  """ # إيجاد فهرسي البداية والنهاية حيث تكون خانات الرسم البياني مهمة start_index = 0 while start_index < len ( histogram ) and histogram [ start_index ] < minimum_bin_count : start_index += 1end_index = len ( histogram ) - 1 while end_index >= 0 and histogram [ end_index ] < minimum_bin_count : end_index -= 1# تحقق مما إذا لم يتم العثور على أي صناديق صالحة إذا كان start_index >= end_index: أرجع -1 # يشير إلى وجود خطأ أو عدم قابلية للتطبيق# تهيئة العتبة العتبة = ( فهرس_البداية + فهرس_النهاية ) // 2# اضبط العتبة بشكل متكرر طالما أن start_index <= end_index : # احسب الأوزان على جانبي العتبة weight_left = sum ( histogram [ start_index : threshold ]) weight_right = sum ( histogram [ threshold : end_index + 1 ])# اضبط العتبة بناءً على الأوزان إذا كان الوزن الأيسر أكبر من الوزن الأيمن : ابدأ_الفهرس += قفزة وإذا كان الوزن الأيسر أصغر من الوزن الأيمن : أنهِ_الفهرس _-= قفزة وإلا : # أوزان متساوية؛ حرك كلا الفهرسين ابدأ_الفهرس += قفزة أنهِ_الفهرس _-= قفزة# حساب العتبة الجديدة العتبة = ( مؤشر_البداية + مؤشر_النهاية ) // 2عتبة العودة

مراجع

  1. أ. أنجوس وهـ. شهبازكيا. عتبة الصورة ثنائية المستوى - طريقة سريعة. إشارات حيوية 2008. المجلد: 2. ص: 70-76.
  2. نوبويوكي أوتسو (1979). "طريقة اختيار العتبة من المدرجات التكرارية لمستويات الرمادي". معاملات IEEE للأنظمة والإنسان والسيبرانية 9: 62-66.
  3. ريدلر تي دبليو، كالفارد إس. (1978) عتبة الصورة باستخدام طريقة اختيار تكرارية، معاملات IEEE للأنظمة والإنسان وعلم التحكم الآلي، SMC-8: 630-632.