Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
function adj = pairwiseBoundaryLengths(map)
% map содержит разметку изображения по областям
h = size(map, 1);
w = size(map, 2);
n = max(map(:));
% вертикальные и горизонтальные границы
% фокус - записываем для каждой границы номера граничащих областей
% но разворачиваем пару чисел в одномерный индекс, чтобы проще было потом суммировать
vertical = (map(1 : h - 1, :) - 1) * n + map(2 : h, :);
horizontal = (map(:, 1 : w - 1) - 1) * n + map(:, 2 : w);
adj = zeros(n);
adj(:) = vl_binsum(adj(:), 1, vertical(:));
adj(:) = vl_binsum(adj(:), 1, horizontal(:));
adj = adj + adj';
adj = adj .* (ones(n) - eye(n));
end
int **m_labels;
...
} else {
if (*m_labels[bIndex] <= *m_labels[cIndex])
*m_labels[cIndex] = *m_labels[bIndex];
else
*m_labels[bIndex] = *m_labels[cIndex];
m_labels[index] = m_labels[bIndex];
}
} else {
if (*m_labels[bIndex] <= *m_labels[cIndex])
*m_labels[cIndex] = *m_labels[bIndex];
else
*m_labels[bIndex] = *m_labels[cIndex];
m_labels[index] = m_labels[bIndex];
}
} else {
*m_labels[cIndex] = *m_labels[bIndex];
m_labels[index] = m_labels[bIndex];
}
[h, w] = size(map);
% логический массив, содержащий 1 для внутренних элементов
inner = map(2:h-1, 3:w)~=0 & map(2:h-1,1:w-2)~=0 & map(3:h, 2:w-1)~=0 & map(1:h-2, 2:w-1)~=0;
map = map(2:h-1, 2:w-1);
map(inner) = 0;
Подсчет объектов на бинарном изображении. Часть 1