Получение разных результатов между LBP-функцией Matlab и моей собственной - PullRequest
0 голосов
/ 04 сентября 2018

Я пытаюсь закодировать алгоритм Local Binary Pattern Ojala вручную, но получаю другие результаты из функции Matlab extractLBPFeatures . Не могли бы вы сказать, какие моменты я пропустил? Вы можете найти подробную информацию о LBP ниже;

Wiki-ноль

Позвольте мне объяснить мой код MATLAB;

% LBP Algorithm
sample = [  %SAMPLE PATTERN
            119 115 94 59 46;
            115 113 104 87 54;
            110 109 102 99 76;
            121 114 101 99 96;
            127 123 112 101 101;
            131 126 118 107 97;
            136 127 121 112 99
         ];
original = extractLBPFeatures(uint8(sample)); %MATLAB LBP FUNC.

manual = manualLBP(sample); %MANUAL LBP FUNC.

function result = manualLBP(sample)
    unipatterns = [ %UNIPATTERNS (count:58) known by Ojala's paper.
                    0,1,2,3,4,6,7,...
                    8,12,14,15,16,24,28,...
                    30,31,32,48,56,60,62,...
                    63,64,96,112,120,124,126,...
                    127,128,129,131,135,143,159,...
                    191,192,193,195,199,207,223,...
                    224,225,227,231,239,240,241,...
                    243,247,248,249,251,252,253,...
                    254,255
                    ];
    m=size(sample,1);
    n=size(sample,2);
    for i=2:m-1
        for j=2:n-1
            c=sample(i,j);
            I3(1,1)=sample(i-1,j-1)>c;
            I3(1,2)=sample(i-1,j)>c;
            I3(1,3)=sample(i-1,j+1)>c;
            I3(2,3)=sample(i,j+1)>c;
            I3(3,3)=sample(i+1,j+1)>c;
            I3(3,2)=sample(i+1,j)>c;
            I3(3,1)=sample(i+1,j-1)>c;
            I3(2,1)=sample(i,j-1)>c;
            LBP(i-1,j-1) = I3(1,1)*2^7 + I3(1,2)*2^6 + I3(1,3)*2^5 + I3(2,3)*2^4 + I3(3,3)*2^3+I3(3,2)*2^2 + I3(3,1)*2^1 + I3(2,1)*2^0;
        end 
    end

    LBPtmp = LBP(:); %SERIALIZE LBP. (MATIX TO VECTOR)

    for i=1:size(unipatterns,2)
        result(i) = sum(LBPtmp == unipatterns(i));
    end

    result(59) = size(LBPtmp,1)-sum(result(:)~=0); % LBP(59) = PIXELCOUNT - UNIPATTERN_COUNT
    result = result/norm(result); %L2 NORMALIZATION
end

The different scores between Matlab LBP and own code

Я не использовал никаких параметров, таких как CellSize, Normalization и т. Д. Просто пытался понять, в чем различия между двумя кодами.

...