Сегментация изображения с использованием графа, вырезанного с начальными точками

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

FC=afc(S,K); %// Absolute FC
u=FC>thresh;
v=FC<thresh;

s=regionprops(u, 'PixelIdxList'); %// listes de pixels de l´objet
t=regionprops(v, 'PixelIdxList'); %// listes de pixels de l´arrière plan
[a,b]=size(s);
[w,c,z]= size(t)

for i=1:a
    for j=1:b
        [y,x] = ind2sub(size(u), s(i,j).PixelIdxList);
    end
end
for k=1:w
    for d=1:c
        [y1,x1] = ind2sub(size(v), t(k,d).PixelIdxList);
    end
end

Для сокращения графика я использовал алгоритм из File Exchange

Например, я могу определить

Cs=-log([y x])
Ct=-log([y1 x1])

но проблема заключается в том, как объединить информацию из функций затрат, таких как эта часть источника кода

u = double((Cs-Ct) >= 0);
ps = min(Cs, Ct);
pt = ps

он превысит размер матрицы

Ответ 1

Я не знаком с реализацией графика с FEX, с которой вы связаны,

но я покажу пример, используя GCMex matlab wrapper (надлежащее раскрытие: я реализовал эту оболочку).

Предположим, что у вас есть изображение размера size(S) с n пикселями и K матрицей разреженной размером n -by- n с K(ii,jj), отображающей, насколько хорошо ii и jj пиксели подключены (для соседних ii и jj).
Кроме того, у вас есть маска u пикселей переднего плана и маска v фоновых пикселей, которые будут рассматриваться как жесткие ограничения.

Сначала постройте термин данных с помощью u и v:

Dc = 1000*[u(:), v(:)]; %// assign very large cost for picking FG pixel to label zero and vice versa

Как вы можете видеть, термин Dc данных - это массив n -by-2, стоимость которого присваивается метке l (либо 0, либо один), чтобы пиксель ii хранится в Dc(ii,l+1), Поэтому для пикселей на переднем плане (u(ii) равно 1), назначая метку l=0 (т.е. фон), стоимость, которую вы платите, равна 1000. То же самое касается пикселей в фоновом режиме (v(ii) равно 1), назначая их переднего плана ( т.е. l= 1) стоит 1000. Следовательно, термин данных Dc дает очень высокую стоимость семенным пикселям (передним или задним), получая неправильную метку.

Построить объект, отрезанный графом

gch = GraphCut('open'), Dc, [0 1; 1 0], K );
[gch L] = GraphCut('expand',gch);
gch = GraphCut('close',gch);
L = reshape(L, size(u)); 
figure; imshow(L,[]); title('the resulting mask');

Обратите внимание, что в rder для использования GCMex вам необходимо выполнить инструкции по установке и скомпилировать его для его работы.