nels002 Ответов: 0

Как добавить новые результаты в существующий массив ячеек?


Предположим, что у меня есть выход ("myArray"), который представляет собой массив ячеек 1x4, а также цикл while, в котором я вызываю функцию, которая производит новый результат того же размера и переменной, что и мой исходный массив.

Как добавить новый результат в существующий, чтобы у меня все еще был массив 1х4 с новыми результатами, обновленными в существующие ячейки?

См. пример кода ниже:

% image
SegI = [2 2 2 0 0
        2 2 2 0 0
        1 1 2 0 0
        1 1 1 1 0
        1 1 1 1 1];

figure, imshow(SegI, [], 'InitialMagnification','fit')     
grid on; 

% face vectors obtained from each internal node in the image; such that edge %directions of 1|2 are denoted as 'm', and 0|2 as 'n', and others as NaN
% i made the 'b' up just for the purpose of detecting the output easily
allfaces = {NaN,NaN,NaN,NaN; NaN,NaN,NaN,NaN; 'm',NaN,'m',NaN; NaN,NaN,NaN,NaN; NaN,NaN,'n','n'; NaN,'n',NaN,'n'; NaN,'m',NaN,NaN; NaN,NaN,NaN,'m'; NaN,NaN,NaN,NaN; NaN,'m','b',NaN; 'm',NaN,NaN,'n';  NaN,NaN,NaN,NaN; NaN,NaN,NaN,NaN; NaN,NaN,NaN,NaN; NaN,NaN,NaN,NaN; NaN,NaN,NaN,NaN};


% find point vertices... which are nodes that contain pixel edges of both 1|2 and %0|2
Pvertex = find( any(strcmp('m', allfaces),2) & any(strcmp('n', allfaces),2) );


% create storage cell array as well as initialize Pvertex to inodej
myArray = cell(numel(Pvertex), 4);
inodej  = Pvertex;
cp = [3,3];     %coordinates of Pvertex


for k = 1: numel(Pvertex)      %loop through all Pvertices

    % find next node from Pvertex
     [myArray, allfaces, inodej, ynode, xnode, dist_node] = Obtain_nodes(k, cp, inodej, myArray, allfaces);


    while dist_node < sqrt(2)
        % find nodes until exit loop
       [myArray, allfaces, inodej, ynode, xnode, dist_node] = Obtain_nodes(k, cp, inodej, myArray, allfaces);
    end


end



Функция задается следующим образом:

function [myArray, allfaces, inodej, ynode, xnode, dist_node] = Obtain_nodes(k, cp, inodej, myArray, allfaces)
% This function computes new nodes from previous ones, as well as
% store each results in the storage cell "myArray" 


if ( find( strcmp('m', allfaces(inodej(k),:)) ) == 1 ) == true 
    % Find the node at the northern end of the face after inodej
    inodej(k,:) =  inodej(k,:) - 1;

    % extract the n, s, e, w faces from allfaces
    a = allfaces(inodej(k),:);

    % store the new results (exclude the existing result at the southern face)
    a(1) = {NaN};
    myArray(k,:) = a;

    % Obtain a new allfaces that deals the South face for the current node  
    allfaces(inodej(k),:) = a;


elseif ( find( strcmp('m', allfaces(inodej(k),:)) ) == 2 ) == true 
    % Find the node at the southern end of the face  after inodej
    inodej(k,:) = inodej(k,:) - 4;

    % extract n, s, e, w faces from allfaces
    a = allfaces(inodej(k),:);

    % store the new results (exclude the node at the northern face)
    a(2) = {NaN};
    myArray(k,:) = a;


    % Obtain a new allfaces that deals the North face for the current node
    allfaces(inodej(k),:) = a;

end



Первый вызов функции в цикл for возвращается:

inodej = 10
, и
myArray = {NaN, 'm', 'b', NaN}


Вызов функции внутри цикл while возвращается:

inodej = 6
, который рисует результат из 6-го ряда всех лиц, чтобы дать:
myArray = {NaN, NaN, NaN, 'n'}


Однако я не вижу своего первоначального (1-го) результата после цикл while завершается, потому что новый(2-й) результат обновляет массив ячеек. Следовательно, проблема для меня заключается в том, как получить любые новые результаты, сохраненные и обновленные с предыдущими в качестве цикл while выполняемый.

Я ожидал бы, что мой окончательный результат будет в такой форме:

[{NaN, NaN}] [{'m', NaN}] [{'b', NaN}] [{NaN, 'n'}]



[^]



Пожалуйста также имейте в виду что я мог бы например увеличить расстояние поиска (dist_node) в этом случае я не знал бы заранее (за исключением визуального осмотра), сколько новых результатов я мог бы получить. Таким образом, код должен иметь возможность добавлять как можно больше новых результатов.

Пожалуйста, мне нужна любая помощь/предложения/советы, чтобы пройти через это. Заранее спасибо.

Что я уже пробовал:

Я добавил пример кода в описание.

0 Ответов