質問

バイナリを10進数に変換するのに問題があります(非常に長いようです)。

%% 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:

実行していることを単純化する1つの方法は、最初にスケール係数の3行3列の行列(つまり、2の累乗)を作成し、ループの前に初期化することです。 ジェネラコディセタグプレ

次に、ループ内のすべてを次のベクトル化された演算に置き換えることができます。 ジェネラコディセタグプレ

オプション2:

または、両方のループを完全に削除して、 NLFILTER を使用して、マトリックスのジェネラコダイスタグコードを取得します: ジェネラコディセタグプレ

他のヒント

私はあなたがそこで何をしているのか正確にはわかりませんが、 bin2dec やりたいことを?

COLFILT を使用して別のソリューションを追加しています機能。

これには、すべてのスライディングウィンドウをマトリックスの列に配置することが含まれます。これは、カスタム関数を使用して処理し、結果を元のマトリックスに再配置します。内部的には、 IM2COL COL2IM 関数。

ここに例があります: ジェネラコディセタグプレ

screenshot

@gnovice との比較の2番目の回答は、 NLFILTER ドキュメントからこのヒントを読んでください。 :

nlfilterは、大きな画像を処理するのに長い時間がかかる場合があります。ある場合には、 colfilt関数は、同じ操作をはるかに高速に実行できます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top