سؤال

لدي مشكلة في تحويل النظام الثنائي إلى النظام العشري (يبدو طويلًا جدًا).

%% Read

clear all;
close all;
clc;
I=imread('test.png');
imshow(I);

%% Crop
I2 = imcrop(I);
figure, imshow(I2)
w=size(I2,1);
h=size(I2,2);
%% LBP
for i=2:w-1
    for j=2:h-1
        J0=I2(i,j);
        I3(i-1,j-1)=I2(i-1,j-1)>J0;
        I3(i-1,j)=I2(i-1,j)>J0;
        I3(i-1,j+1)=I2(i-1,j+1)>J0; 
        I3(i,j+1)=I2(i,j+1)>J0;
        I3(i+1,j+1)=I2(i+1,j+1)>J0; 
        I3(i+1,j)=I2(i+1,j)>J0; 
        I3(i+1,j-1)=I2(i+1,j-1)>J0; 
        I3(i,j-1)=I2(i,j-1)>J0;
        LBP(i,j)=I3(i-1,j-1)*2^8+I3(i-1,j)*2^7+I3(i-1,j+1)*2^6+I3(i,j+1)*2^5+I3(i+1,j+1)*2^4+I3(i+1,j)*2^3+I3(i+1,j-1)*2^2+I3(i,j-1)*2^1;
    end
end
figure,imshow(I3)
figure,imhist(LBP)

هل من الممكن تغيير هذا الخط

LBP(i,j)=I3(i-1,j-1)*2^8+I3(i-1,j)*2^7+I3(i-1,j+1)*2^6+I3(i,j+1)*2^5+I3(i+1,j+1)*2^4+I3(i+1,j)*2^3+I3(i+1,j-1)*2^2+I3(i,j-1)*2^1;

إلى شيء أقصر؟

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

المحلول

الخيار 1:

تتمثل إحدى طرق تبسيط ما تفعله في إنشاء مصفوفة 3 في 3 لعوامل القياس (أي قوى الرقمين) وتهيئتها قبل الحلقات: Genacodicetagpre

ثم يمكنك استبدال كل شيء داخل الحلقة الخاصة بك بهذه العمليات الموجهة: Genacodicetagpre

الخيار 2:

بدلاً من ذلك ، أعتقد أنه يمكنك إزالة كلتا الحلقتين تمامًا واستبدالهما بمكالمة واحدة إلى NLFILTER للحصول على رمز رمز المصفوفة الخاص بك:

Genacodicetagpre

نصائح أخرى

لست متأكدًا تمامًا مما تفعله هناك، لكنه متأكد من ذلك bin2dec افعل ما تريد؟

أقوم بإضافة حل آخر باستخدام COLFILT وظيفة.

تتضمن وضع كل النوافذ المنزلقة في أعمدة مصفوفة ، والتي نعالجها باستخدام وظيفة مخصصة ، ثم تعيد ترتيب النتيجة في المصفوفة الأصلية. داخليًا ، يستخدم IM2COL و COL2IM .

هنا مثال: Genacodicetagpre

screenshot

بالمقارنة مع gnovice الإجابة الثانية ، اقرأ هذه النصيحة من وثائق NLFILTER :

قد تستغرق عملية

nlfilter وقتًا طويلاً لمعالجة الصور الكبيرة. في بعض الحالات، يمكن أن تؤدي وظيفة colfilt نفس العملية بشكل أسرع.

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