MATLAB: как сохранить выходные значения после использования return - PullRequest
0 голосов
/ 17 марта 2019

У меня есть этот сегмент кода:

function [S,r1,r2,c1,c2] = xor2imgs(org,templete,Diff)
    while (r+O - 1) <= N
           while (c+P - 1) <= M
               if sum_temp <= sum(sum(sum(org(r:r+O-1,c:c+P-1)))) %cond #1              
                   matrix = org;
                   matrix(r:r+O-1,c:c+P -1) = org(r:r+O-1,c:c+P-1)-templete(1:O,1:P); 
                   mat_sum = sum(sum(sum(matrix)));
                   diff2 = org_sum-mat_sum;               
                   if (mat_sum == diff) && (diff2 > Diff) %cond #2
                       S = org_sum-mat_sum; 
                       r1 = r;
                       r2 = r1+O-1;
                       c1 = c;
                       c2 = c1+P-1;
                       return ; %must return to the original function yet keep the output values 
                   end
               end
           end
        end 
end

Что я должен сделать, чтобы передать значения [S, r1, r2, c1, c2] в функцию вызывающей стороны после использования return?Я вызвал функцию как

 [S,r1,r2,c1,c2] = xor2imgs(org,newtemplete,S);

в другой функции, но она продолжает возвращать нули для каждого выхода ....

1 Ответ

0 голосов
/ 19 марта 2019

Я предполагаю, что все ваши переменные определены выше цикла while ...

Вы можете использовать несколько break операторов. Причина, по которой требуется несколько операторов прерывания, заключается в том, что у вас есть вложенные циклы, и одного оператора прерывания будет недостаточно. Я добавил в ваш код переменную счетчика, чтобы изменить ее на 1, когда вам нужно выйти из циклов:

counter = 0;
function [S,r1,r2,c1,c2] = xor2imgs(org,templete,Diff)
    while (r+O - 1) <= N
        while (c+P - 1) <= M
            if sum_temp <= sum(sum(sum(org(r:r+O-1,c:c+P-1)))) %cond #1              
                matrix = org;
                matrix(r:r+O-1,c:c+P -1) = org(r:r+O-1,c:c+P-1)-templete(1:O,1:P); 
                mat_sum = sum(sum(sum(matrix)));
                diff2 = org_sum-mat_sum;               
                if (mat_sum == diff) && (diff2 > Diff) %cond #2
                    S = org_sum-mat_sum; 
                    r1 = r;
                    r2 = r1+O-1;
                    c1 = c;
                    c2 = c1+P-1;
                    counter = 1;
                    break;
                end
            end
        end
        if isequal(counter,1)
            break;
        end
    end 
end
...