避免重启for循环

时间:2017-10-02 11:03:05

标签: matlab for-loop matrix restart

我有一个带图片的文件夹。对于每张图片,我想取最大值并将其添加到一个新矩阵(我创建了一个零矩阵,因此零将替换为新值。)

这是我的代码:

function handles = original(hObject, eventdata, handles)

handles.weed=handles.selected;
pic=imread(handles.me);
handles.pic=pic;
axes(handles.axes1)
imshow(pic);
num=max(pic(:))
zeroMat = zeros(1,70);
handles.zeroMat = zeroMat;

for i =1:3
    if zeroMat(1,i)~= 0;
        i=i+1
    else
        zeroMat(1,i)=num
        break
    end
end

zeroMat(1,i)=num

每次选择新图片时,zeromat都会重新启动一个新的零矩阵。我知道为什么会这样,但不幸的是我不知道如何克服它。

这是输出:

pic1:

zeroMat =

  Columns 1 through 20

   255     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0

  Columns 21 through 40

     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0

  Columns 41 through 60

     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0

  Columns 61 through 70

     0     0     0     0     0     0     0     0     0     0

PIC2:

  Columns 1 through 20

   203     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0

  Columns 21 through 40

     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0

  Columns 41 through 60

     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0

  Columns 61 through 70

     0     0     0     0     0     0     0     0     0     0

1 个答案:

答案 0 :(得分:0)

我无法告诉如何调用此函数,因此无法建议如何更改逻辑。粗略的解决方法可能是包含行

if ~isfield(handles,'zeroMat')
    handles.zeroMat = zeros(1,70);
end % if

在第一次运行函数时应该创建handles.zeroMat。然后你可以做类似

的事情
firstNonzero = find(handles.zeroMat > 0, 1, 'first'); % 'first' not needed, default
handles.zeroMat(firstNonzero) = max(pic(:));