Работа с массивом значений

Обсуждение вопросов, связанных с другими тулбоксами

Модератор: Admin

Winlogon
Пользователь
Сообщения: 1
Зарегистрирован: Вт июн 27, 2017 9:02 pm

Работа с массивом значений

Сообщение Winlogon » Вт июн 27, 2017 9:46 pm

Доброго времени суток
Очень нужна ваша помощь!
Каждый элемент матрицы принимает значение "0" или "1".
Данный код разбивает матрицу на блоки 2X2 пикселя и делает из него один пиксель. Значение этого пикселя зависят от суммы значений всех четырех пикселей. Если они больше порога - пиксель равен "1", иначе - "0". На первом шаге берется 1 и 2 строка с 1 и 2 столбцом. На след. шаге берется 1 и 2 строка с 2 и 3 столбцом и т. д.
Вопрос в том, как сделать так, что бы при выборе блока 2х2 , не выбирались те строки и столбцы, которые уже были использованы в предыдущих шагах?

Код: Выделить всё

n=4;
m=fix(n/2);
%Threshold reduction T=1
% A=threshold(B,n,T)
T=1;
A=zeros(size(B));
for i=1:size(B,1)-n+1
    for j=1:size(B,2)-n+1
        if sum(sum(B(i:i+n-1,j:j+n-1)))>=T
           A(i+m,j+m)=1;
        end;
    end
end
clear B

sandy
Эксперт
Сообщения: 5294
Зарегистрирован: Ср сен 22, 2004 4:49 pm

Re: Работа с массивом значений

Сообщение sandy » Ср июн 28, 2017 8:31 pm

Вопрос в том, как сделать так, что бы при выборе блока 2х2 , не выбирались те строки и столбцы, которые уже были использованы в предыдущих шагах?

Вы сами себе противоречите:
На первом шаге берется 1 и 2 строка с 1 и 2 столбцом. На след. шаге берется 1 и 2 строка с 2 и 3 столбцом и т. д.

В вашем примере столбец 2 был использован два раза.
Так что вам на самом деле нужно?
С уважением

Александр Сергиенко

abobroff
Пользователь
Сообщения: 477
Зарегистрирован: Пн окт 25, 2010 1:21 pm

Re: Работа с массивом значений

Сообщение abobroff » Вс сен 17, 2017 1:42 am

Код: Выделить всё

A = [12    70    19    28     6    10    11
    79    76    27     4    32     1    64
    30    44    80    68    78    43    13
    61    66    49    43    70    66    14
    97    11    77    46    13    73    10
    44    94    40    61    14    54    15];
trld = 200;
[m,n] = size(A);
[ii,jj] = ndgrid(ceil((1:m)/2),ceil((1:n)/2));
out = accumarray([ii(:),jj(:)],A(:),[],@(x)sum(x) > trld);