Próbuję wykonać lokalny wzór binarny w MATLAB przy użyciu przybornika do przetwarzania obrazu. Kiedy wykonuję, nie mogę uzyskać obrazu LBP i histogramu LBP.
clear all;
close all;
clc;
I=imread("test.png");
figure,imshow(I)
%% Crop
I2 = imcrop(I);
figure, imshow(I2)
w=size(I2,1);
h=size(I2,2);
%% LBP
scale = 2.^[7 6 5; 0 -inf 4; 1 2 3];
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^7+I3(i-1,j)*2^6+I3(i-1,j+1)*2^5+I3(i,j+1)*2^4+I3(i+1,j+1)*2^3+I3(i+1,j)*2^2+I3(i+1,j-1)*2^1+I3(i,j-1)*2^0;
end
end
figure,imshow(LBP)
figure,imhist(LBP)
jaki jest problem.i powinien otrzymać numery od 0 do 255.
Odpowiedzi:
2 dla odpowiedzi № 1I3(i-1,j-1)=I2(i-1,j-1)>J0;
tworzy logiczny wynik. Jeśli nie pójdziesz i nie rzucisz tego na coś innego, obraz będzie zerowy i jedyny.
Najprostszym sposobem jest zainicjowanie I3
poza pętlą, tj. mieć I3=I2;
przed rozpoczęciem pętli. W ten sposób wszystkie twoje zadania w pętli zostaną przekonwertowane na dowolną klasę I2
było.
0 dla odpowiedzi nr 2
posługiwać się : figure, imshow (uint8 (LBP));
Ponieważ obraz LBP jest w PODWÓJNY, musisz go rzucić.