• Регистрация
nata123
nata1230.00
н/д
  • Написать
  • Подписаться

Поиск индексов строк состоящих только из одних единиц в Matlab

Изображения и видео 
08.01.2020

Нужно провести деление матрицы на две новые матрицы, если 4 строки подряд полностью состоят из одних единиц, только те что в середине, при этом верхние и нижние строки из всех единиц во внимание не брать . 

До чего смогда дойти это полностью удалить все единичные строки в матрице.

T = [ 1 1 1 1 1 1 1 1 1 1; 

      0 0 0 0 0 1 0 0 0 0;

      0 1 0 0 0 0 0 0 0 0;

      0 0 0 0 0 0 0 0 0 0;

      1 1 1 1 1 1 1 1 1 1;

      1 1 1 1 1 1 1 1 1 1;

      1 1 1 1 1 1 1 1 1 1;

      1 1 1 1 1 1 1 1 1 1;

      0 0 0 0 1 0 0 0 0 0;

      0 0 0 0 0 0 0 0 0 0;

      0 0 0 0 0 0 0 0 1 0;

      1 1 1 1 1 1 1 1 1 1;

      1 1 1 1 1 1 1 1 1 1;

      1 1 1 1 1 1 1 1 1 1];

Azer=ones(1,length(T(1,:)));

n=length(T(:,1));

for jj=n:-1:1 

      if T(jj,:)==Azer;   

         T(jj,:)=[];

      end  

 end;

 

И найти индексы всех едичных строк:

[x,~] = find(B == 1); 

One = x(1:8)'; % берем одно вхождение всех (всего размерность х=80, делим их на 10 (это столбцов) отсюда 8).

А как сделать чтобы искались индексы только тех которые стоят друг по 4 по порядку. При том матрица может быть намного больше.

Логично для этого надо задать матрицу [4*размерность матрицы] из одних единиц и сравнивать с каждыми 4 строками матрицы. А потом в отдельную переменную через find записать индексы. Но как Matlab это осуществит будь матрица вот такой? Индексы же будут дублироваться по несколько раз. 

 T = [ 1 1 1 1 1 1 1 1 1 1; 

      0 0 0 0 0 1 0 0 0 0;

      0 1 0 0 0 0 0 0 0 0;

      0 0 0 0 0 0 0 0 0 0;

      1 1 1 1 1 1 1 1 1 1;

      1 1 1 1 1 1 1 1 1 1;

      1 1 1 1 1 1 1 1 1 1;

      1 1 1 1 1 1 1 1 1 1;

      1 1 1 1 1 1 1 1 1 1;

      1 1 1 1 1 1 1 1 1 1;

      1 1 1 1 1 1 1 1 1 1;

      0 0 0 0 1 0 0 0 0 0;

      0 0 0 0 0 0 0 0 0 0;

      0 0 0 0 0 0 0 0 1 0;

      1 1 1 1 1 1 1 1 1 1;

      1 1 1 1 1 1 1 1 1 1;

      1 1 1 1 1 1 1 1 1 1];

Как такую вещь выполнить в Matlab. Помогите и подскажите пожалуйста!

В дальнейшем это хотелось бы применить для обработки бинарных изображений, а там размерность до 1024*1024. И обработка вовсе усложняется.

Теги

  • #Matlab
  • MATLAB
  • обработка изображений
  • матрица
    08.01.2020

    Ответы

    • Centurio
      Centurio+34.00
      9.01.2020 15:11

      "Нужно провести деление матрицы нв две новые матрицы"

      На какие матрицы? Какого размера? Из каких элементов состоящие? Каковы условия формирования матриц?

      Найти индексы единичных строк и убрать эти строки можно так:

      A=prod(T,2);

      x=find(A); % определение индексов единичных строк

      T(x,:)=[];

      • Marat
        Marat+1716.31
        9.01.2020 16:43

        Как вариант, для заданной матрицы Т.

         

        A = all(T,2);

        out = double(diff([~A(1);A(:)]) == 1);

        v = accumarray(cumsum(out).*A(:)+1,1);

        out(out == 1) = v(2:end);

        idx_consec_4s = out >= 4;