MATLABでの2進数から10進数への変換
-
29-10-2019 - |
質問
バイナリを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:
または、両方のループを完全に削除して、
他のヒント
私はあなたがそこで何をしているのか正確にはわかりませんが、 bin2dec
やりたいことを?
COLFILT を使用して別のソリューションを追加しています機能。
これには、すべてのスライディングウィンドウをマトリックスの列に配置することが含まれます。これは、カスタム関数を使用して処理し、結果を元のマトリックスに再配置します。内部的には、 IM2COL と
ここに例があります: ジェネラコディセタグプレ
@gnovice との比較の2番目の回答は、 NLFILTER ドキュメントからこのヒントを読んでください。 :
nlfilterは、大きな画像を処理するのに長い時間がかかる場合があります。ある場合には、 colfilt関数は、同じ操作をはるかに高速に実行できます。
所属していません StackOverflow