مشغل برويت

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

وصف مبسط

ببساطة، يحسب المُشغّل تدرج شدة الصورة عند كل نقطة، مُحددًا اتجاه أكبر زيادة ممكنة من الضوء إلى الظلام، ومعدل التغير في ذلك الاتجاه. وبالتالي، تُظهر النتيجة مدى "حدة" أو "سلاسة" تغير الصورة عند تلك النقطة، وبالتالي مدى احتمالية أن يُمثل جزء من الصورة حافة ، بالإضافة إلى كيفية توجيه تلك الحافة. ​​عمليًا، يُعد حساب مقدار التغير (احتمالية وجود حافة) أكثر موثوقية وأسهل في التفسير من حساب اتجاه التغير.

رياضيًا، يُعرَّف تدرج دالة ذات متغيرين (هنا دالة شدة الصورة) عند كل نقطة في الصورة بأنه متجه ثنائي الأبعاد ، مركباته هي مشتقات الدالة في الاتجاهين الأفقي والرأسي. عند كل نقطة في الصورة، يشير متجه التدرج إلى اتجاه أكبر زيادة ممكنة في الشدة، ويتناسب طول متجه التدرج مع معدل التغير في ذلك الاتجاه. هذا يعني أن نتيجة مؤثر برويت عند نقطة في الصورة تقع في منطقة ذات شدة ثابتة هي متجه صفري، بينما عند نقطة على حافة، يكون متجهًا يشير عبر الحافة، من القيم الداكنة إلى القيم الفاتحة.

التركيبة

رياضيًا، يستخدم المؤثر نواتين بحجم 3×3 يتم دمجهما مع الصورة الأصلية لحساب تقريبات للمشتقات - واحدة للتغيرات الأفقية، والأخرى للتغيرات الرأسية. إذا عرّفناأ{\displaystyle \mathbf {A} }باعتبارها الصورة المصدرية، وجيx{\displaystyle \mathbf {G_{x}} }وجيy{\displaystyle \mathbf {G_{y}} }هما صورتان تحتوي كل نقطة منهما على تقريبات المشتقة الأفقية والرأسية، ويتم حساب الأخيرة على النحو التالي:

جيy=[+1+1+1000-1-1-1]*أوجيx=[+10-1+10-1+10-1]*أ\begin{bmatrix}\mathbf{G_{y}} = \begin{bmatrix}\mathbf{A}\mathbf{A} \quad \mathbf{A}\quad \mathbf{G_{x}} = \begin{bmatrix}\mathbf{A}\mathbf{A}\mathbf{A}\mathbf{A}}

أين*{\displaystyle *}يشير هنا إلى عملية الالتفاف ثنائية الأبعاد .

بما أن نواة برويت يمكن تحليلها إلى نواتج ضرب نواة حساب المتوسط ​​ونواة حساب التفاضل، فإنها تحسب التدرج مع التنعيم. لذلك، فهي مرشح قابل للفصل . على سبيل المثال،جيx{\displaystyle \mathbf {G_{x}} }يمكن كتابتها على النحو التالي

[+10-1+10-1+10-1]=[111][+10-1]{\displaystyle {\begin{bmatrix}+1&0&-1\\+1&0&-1\\+1&0&-1\end{bmatrix}}={\begin{bmatrix}1\\1\\1\end{bmatrix}}{\begin{bmatrix}+1&0&-1\end{bmatrix}}}

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

جي=جيx2+جيy2{\displaystyle \mathbf {G} ={\sqrt {{\mathbf {G} _{x}}^{2}+{\mathbf {G} _{y}}^{2}}}}

باستخدام هذه المعلومات، يمكننا أيضًا حساب اتجاه التدرج:

Θ=atan2(جيy،جيx){\displaystyle \mathbf {\Theta} =\operatorname {atan2} \left({\mathbf {G} _{y},\mathbf {G} _{x}}\right)}

حيث، على سبيل المثال، تكون قيمة Θ تساوي 0 للحافة الرأسية التي تكون أغمق على الجانب الأيمن.

مثال

صورة بالأبيض والأسود لجدار من الطوب وحامل دراجات
تدرج لوني مع مُعامل برويت لصورة رمادية لجدار من الطوب وحامل دراجات

مثال على الكود

كود MATLAB % | مُعامل Prewitt من الصفر% قراءة الصورة المدخلة input_image = imread ( '[اسم ملف الصورة المدخلة].[تنسيق الملف]' );% عرض الصورة المدخلة input_image = uint8 ( input_image ); figure , imshow ( input_image ); title ( 'الصورة المدخلة' );% تحويل صورة RGB ذات الألوان الحقيقية إلى صورة رمادية input_image = rgb2gray ( input_image );% تحويل الصورة إلى عدد عشري input_image = double ( input_image );% قم بتخصيص مصفوفة الصورة المُفلترة مسبقًا بالأصفار filtered_image = zeros ( size ( input_image ));قناع عامل بريويت Mx = [ - 1 0 1 ; - 1 0 1 ; - 1 0 1 ]; My = [ - 1 - 1 - 1 ; 0 0 0 ; 1 1 1] ;عملية كشف الحواف % عندما يكون i = 1 و j = 1، فإن موضع البكسل في الصورة المُفلترة % سيكون filtered_image(2, 2) % القناع بحجم 3x3، لذا نحتاج إلى المرور % إلى filtered_image(size(input_image, 1) - 2 %, size(input_image, 2) - 2) % وبالتالي، لا نأخذ الحدود في الاعتبار. for i = 1 : size ( input_image , 1 ) - 2 for j = 1 : size ( input_image , 2 ) - 2تقريب التدرج Gx = مجموع ( مجموع ( Mx .* input_image ( i : i + 2 , j : j + 2 ))); Gy = مجموع ( مجموع ( My .* input_image ( i : i + 2 , j : j + 2 ))); % حساب مقدار المتجه filtered_image ( i + 1 , j + 1 ) = جذر ( Gx .^ 2 + Gy .^ 2 ); end end% عرض الصورة المُفلترة filtered_image = uint8 ( filtered_image ); figure , imshow ( filtered_image ); title ( 'الصورة المُفلترة' );% تحديد قيمة عتبة thresholdValue = 100 ; % تتراوح بين [0 و255] output_image = max ( filtered_image , thresholdValue ); output_image ( output_image == round ( thresholdValue )) = 0 ;% عرض الصورة الناتجة output_image = im2bw ( output_image ); figure , imshow ( output_image ); title ( 'الصورة التي تم اكتشاف حوافها' );

انظر أيضاً

مراجع

  1. ديم، جولز ر.؛ تاكامورا، تاميو (11 ديسمبر 2013). "نهج بديل لتصنيف السحب عبر الأقمار الصناعية: تطبيق تدرج الحواف" . التقدم في علم الأرصاد الجوية . 2013 : 1-8 . doi : 10.1155/2013/584816 . ISSN 1687-9309 . 
  2. برويت، جيه إم إس (1970). "تحسين واستخراج الكائنات". معالجة الصور وعلم النفس التصويري . دار النشر الأكاديمية.

[ 1 ]