10

Tôi đang làm việc trong phân đoạn hình ảnh y tế và tôi muốn kết hợp thuật toán kết nối mờ với cắt biểu đồ, ý tưởng là phân đoạn hình ảnh với kết nối mờ nền và nền trước sẽ được sử dụng như bồn rửa và nguồn cho các thuật toán đồ thị cắt, đây là mã của tôi để có được những hạt giống phối cho các phân khúc đồ thị cắtphân đoạn hình ảnh bằng cách sử dụng đồ thị cắt với điểm giống

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 

đối với cắt đồ thị, tôi đã sử dụng một thuật toán từ File Exchange

Ví dụ, Tôi có thể xác định

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

nhưng vấn đề là làm thế nào để kết hợp các thông tin từ các chức năng chi phí như một phần của mã nguồn

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

nó sẽ vượt quá kích thước ma trận

Trả lời

5

Tôi không quen thuộc với graph- cắt triển khai từ FEX bạn đã liên kết với,
nhưng tôi sẽ hiển thị ví dụ bằng cách sử dụng GCMex matlab wrapper (tiết lộ chính xác: Tôi đã triển khai trình bao bọc này).

Giả sử bạn có một hình ảnh kích thước size(S) với n pixel và K một thưa thớt ma trận kích thước n -by- n với K(ii,jj) đại diện như thế nào iijj pixel được kết nối (đối với nước láng giềng iijj).
Hơn nữa, bạn có mặt nạ u pixel nền trước và mặt nạ v pixel nền được coi là khó khăn cứng.

Thứ nhất, xây dựng các hạn dữ liệu sử dụng uv:

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

Như bạn có thể xem dữ liệu hạn Dc, là n -by-2 mảng với chi phí gán nhãn l (0 hoặc một) đến pixel ii được lưu trữ trong Dc(ii,l+1). Do đó, đối với điểm ảnh ở tiền cảnh (u(ii) là 1) gán nhãn l=0 (tức là nền) chi phí bạn phải trả là 1000. Tương tự đối với pixel trong nền (v(ii) là 1) gán chúng cho tiền cảnh (ví dụ: l = 1) là chi phí 1000. Do đó, thuật ngữ dữ liệu Dc mang lại chi phí rất cao cho các pixel hạt giống (tiền cảnh hoặc nền) nhận được nhãn sai.

Xây dựng một đối tượng đồ thị cắt

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'); 

Lưu ý rằng trong rder sử dụng GCMex bạn cần phải follw hướng dẫn cài đặt và biên dịch nó cho nó để làm việc.

+0

Bạn có thể vui lòng xây dựng, cách phân phối trọng số cho nguồn và Sink? hiện tại trừ giá trị của nguồn từ maxValue để lấy giá trị của sink, điều này có hợp lý không. – ZdaR

+0

theo liên kết này, đó là một sự đơn giản của đồ thị tương tác cắt https: //masterravi.wordpress.com/2011/05/24/tương tác-phân đoạn-sử dụng-graph-cutsmatlab-code/ –

+0

@ZdaR vui lòng xem cập nhật của tôi về 'Dc'. – Shai

Các vấn đề liên quan