Не уверен, как работает функция Hist в MATLAB - PullRequest
1 голос
/ 14 декабря 2011

Я не очень уверен, как работает функция Hist в MATLAB. Кажется, у меня мало проблем с этим.

По сути, в приведенном ниже коде я пытаюсь запустить код, инвариантный к вращению, Uniform Local Binary Pattern (LBP). У меня нет проблем с кодом LBP, но проблема связана с функцией исторических (указано в коде ниже).

Проблема в том, что диапазон, который я должен получить, составляет от 0: 9, но когда я применяю функцию гистограммы, я получаю значения больше 9, такие как 35, 27 и даже значения, такие как 178114. Не очень уверен, как это исправить.

I2 = imread('test.png');
RIUniformHist=[];
m=size(I2,1);
n=size(I2,2);
for i=1:10:m
    for j=1:10:n
        for k=i+1:i+8
           for l=j+1:j+8
             J0=I2(k,l);
             I3(k-1,l-1)=I2(k-1,l-1)>J0;
             I3(k-1,l)=I2(k-1,l)>J0;
             I3(k-1,l+1)=I2(k-1,l+1)>J0; 
             I3(k,l+1)=I2(k,l+1)>J0;
             I3(k+1,l+1)=I2(k+1,l+1)>J0; 
             I3(k+1,l)=I2(k+1,l)>J0; 
             I3(k+1,l-1)=I2(k+1,l-1)>J0; 
             I3(k,l-1)=I2(k,l-1)>J0;
             LBP=I3(k-1,l-1)*2^7+I3(k-1,l)*2^6+I3(k-1,l+1)*2^5+I3(k,l+1)*2^4+I3(k+1,l+1)*2^3+I3(k+1,l)*2^2+I3(k+1,l-1)*2^1+I3(k,l-1)*2^0;
             bits = bitand(LBP, 2.^(7:-1:0))>0;
             if nnz(diff(bits([1:end, 1]))) <= 2
                RIULBP(k,l)=abs(I3(k-1,l-1)-I3(k-1,l))+ abs(I3(k-1,l)-I3(k-1,l+1))+ abs(I3(k-1,l+1)-I3(k,l+1))+ abs(I3(k,l+1)-I3(k+1,l+1))+abs(I3(k+1,l+1)-I3(k+1,l))+abs(I3(k+1,l)-I3(k+1,l-1))+abs(I3(k+1,l-1)-I3(k,l-1));
             else
                RIULBP(k,l)=9;
             end
           end
        end
        RIULBP=uint8(RIULBP);
        RIULBPv=reshape(RIULBP,1,size(RIULBP,1)*size(RIULBP,2));   
        RIUHist=hist(RIULBPv,0:9); % problem
        RIUniformHist = [RIUniformHist RIUHist];
    end
end

1 Ответ

1 голос
/ 14 декабря 2011

Вектор, возвращаемый

RIUHist=hist(data, bins)

- это количество элементов data, ближайших к точке, обозначенной вектором bins.Таким образом, если у вас есть значение 178114, это означает, что 178114 элементов data, которые были ближайшими к соответствующему индексу в bins.

, можно использовать

*.1013 *

, чтобы позволить Matlab выбирать ячейки (я полагаю, что он использует 20 ячеек) или

[RIUHist, binsOut] = hist(data, binCount)

Чтобы позволить Matlab выбирать ячейки, но форсировать определенное количество ящиков (я часто использую 100 или 200).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...