2014-02-18 4 views
0

Я использую MATLAB для обработки изображений и имеет изображения с сегментами. Вот пример изображения: http://www.mathworks.de/help/releases/R2013b/images/examples/ipexroundness_04.pngОбработка изображений в области Matlab для построения области связи

Как найти минимальное расстояние от одного региона до ближайшего соседнего региона? Мне не нужна полная реализация, но кто-нибудь может ссылаться на алгоритм, который находит самые близкие соседние регионы, и вычисляет минимальное расстояние и самые близкие точки региона.

Я хочу использовать эту информацию для соединения областей изображения, т. Е. Строить мосты между областями изображения.

ответ

1

Off верхней части моей головы, подход быстрого и грязный вложенный цикл:

Для региона ii=1:n запустите маску региона ii через bwdist генерировать расстояние преобразования. Для областей jj=1:n используйте маску региона jj для индексации этого преобразования расстояния. Это дает вам расстояния от каждого пикселя в регионе jj от их ближайшего партнера в регионе ii - найдите минимальное значение (и его координаты) и запишите его в какую-то парную матрицу расстояния. Повторяйте до тех пор, пока не закончите, затем обработайте парную матрицу расстояния, чтобы определить, в каких регионах вы хотите подключиться.

Edit: Попав, что далеко, я полагал, что я мог бы также постучать что-то вместе - вот черновой вариант, который принимает двоичный файл и возвращает расстояния х и у координаты потенциальных точек подключения как попарные матрицы:

function [d x y] = regiondist(img) 
label = bwlabel(img); 
n = max(label(:)); 
[x y d] = deal(zeros(n)); 
for ii = 1:n 
    dt = bwdist(label == ii); 
    for jj = 1:n 
    if ii == jj 
     continue 
    end 
    reg = (label == jj); 
    [mindist idx] = min(dt(reg)); 
    d(ii, jj) = mindist; 
    [ry rx] = find(reg); 
    x(ii, jj) = rx(idx); 
    y(ii, jj) = ry(idx); 
    end 
end 
Смежные вопросы