转换向量索引超出数组边界 - matlab

Posted

技术标签:

【中文标题】转换向量索引超出数组边界 - matlab【英文标题】:Convesion vector Index exceeds array bounds - matlab 【发布时间】:2018-11-22 17:54:34 【问题描述】:

我在 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

【问题讨论】:

conVector 函数中,如果DNA(end) &gt;= SNA(end) 您将继续递增d 直到它超出数组边界。 【参考方案1】:

如果DNA(d:end) 中的所有值都小于SNA(s) 中的值,则循环继续将1 加到d 但不加1 到s,最后超出界限,因为它仅受s 限制.

我猜你应该要么把s = s+1从内部条件中取出,所以它会在每次迭代时执行,或者在d上添加一个条件到循环中,或者将它转换为for循环。

【讨论】:

以上是关于转换向量索引超出数组边界 - matlab的主要内容,如果未能解决你的问题,请参考以下文章

C++:向量边界

MATLAB - 将向量转换为矩阵

MATLAB:在向量和向量数组之间进行均方根误差的最快方法

如何通过C ++中的数据获得向量的索引

matlab基本函数find

排序向量查找的更快版本 (MATLAB)