Индекс вектора конвекции превышает границы массива - matlab - PullRequest
0 голосов
/ 22 ноября 2018

Я создаю некоторую программу в Matlab для «согласования гистограммы».
Когда я пытаюсь реализовать функцию «conVector», я получаю ошибку «Индекс превышает границы массива».Кто-нибудь может помочь мне с этой ошибкой?

Вот мой полный код.Спасибо!

function [newImage] = histShape (srcimg,destimg)
%find the histogram of the image

src = imgHist(srcimg);
dest = imgHist(destimg);

sna = normalizationHist(src);
dna = normalizationHist(dest);

conVector(sna,dna);

end

function [Hist] = imgHist (img)
[Rows,Cols] = size(img);
Hist = zeros(1,256);
for i=1:Rows
    for j=1:Cols
        Hist(img(i,j)+1)=Hist(img(i,j)+1)+1;
    end
end

end


function [Ahist] = normalizationHist (hist)
[Rows,Cols] = size(hist);
Ahist = hist;
for i=2:256
    Ahist(i)=Ahist(i-1)+hist(i);
end

Ahist = Ahist/(Rows*Cols);

end

function [cv] = conVector(SNA,DNA)
cv=zeros(1,257);
s = 1;
d = 1;
while s<=256
    if DNA(d)<SNA(s)
        d = d+1;
    else
        cv(s)=d;
        s = s+1;

    end
end
end

1 Ответ

0 голосов
/ 22 ноября 2018

Если все значения в DNA(d:end) меньше, чем значение в SNA(s), чем в цикле, продолжайте прибавлять 1 к d, но не к s, и, наконец, выйдете за пределы, поскольку оно обусловлено только s.

Полагаю, вам следует либо вывести s = s+1 из внутреннего условия, чтобы оно выполнялось на каждой итерации, либо добавить условие в d в цикл, либо преобразовать его в for петля.

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