2017-04-10 2 views
-1

나는이 프로젝트에서 그래프를 추출 할 때 내 프로젝트를 수행하고있다. 이진 이미지를 균등 한 세그먼트로 나누었다.
C = (이미지의 너비/10 (i = 1, ..., C, j = 1, ..., C)의 각각에 대해 동일한 크기의 'CxR'세그먼트로 분할 된 R = (이미지의 높이/10) R) 노드는 결과 그래프에 삽입되고 질량 중심 (xm, ym)의 (x, y) 좌표에 의해 분류됩니다. 공식적으로 우리는 세그먼트 sij에서 전경 픽셀 수를 계산합니다. xw와 yw는 sij의 전경 픽셀의 x 및 y 좌표 세그먼트에 전경 픽셀이 포함되어 있지 않으면 질량 중심을 결정할 수 없으므로이 세그먼트에 대한 노드가 만들어지지 않습니다. 내 코드에서이미지에서 각 세그먼트를 연결하는 방법

나는 각 분야에서 질량 중심을 계산하지만 난의 질량 중심을 얻고이 문제가 내 코드에서

clc; 
clear all; 
close all; 
X=imread('math.jpg'); 
imfinfo('math.jpg') 
figure,imshow(X) 

b = imresize(X,[100,100]); 
si = size(b,1); 
sj = size(b,2); 
figure;imshow(b); 

% Binarization 
th = graythresh(b); 
I = im2bw(b,th); 

w = 5; 
h = 5; 
c=si/w; 
r=sj/h; 

% Skeletonised 
kl=bwmorph(~I,'thin',inf); 
figure,imshow(kl) 

R(:,:)=kl(:,:); 
I=1; 
U1=w; 
J=1; 
U2=h; 
E=1; 
for i=1:r 
    for j=1:c 
B(I:U1,J:U2)=R(I:U1,J:U2); 
[x,y]=find(B==1); 
XX=mean(x); 
YY=mean(y); 
XXX(E)=CX; 
YYY(E)=CY; 
T(I:U1,J:U2)=B(I:U1,J:U2); 
J=J+w; 
U2=U2+h; 
E=E+1; 
clear B x y 

end 

I=I+w; 
U1=U1+h; 
J=1; 
U2=h; 

end 

imshow(R) 

hold on 
plot(XX,YY, 'g*'); 
hold off 

를 해결하는 데 도움을 주시기 바랍니다 이미지의 각 노드를 연결하려면 각 세그먼트

전경 픽셀이 제가

그래프를 결과에 노드 상에 플롯 된 점을 추가 내 출력 output of my code

도움이고

편집은 input image

clc; 
clear all; 
close all; 
X=imread('math.jpg'); 
imfinfo('math.jpg') 
figure,imshow(X) 

b = imresize(X,[100,100]); 
si = size(b,1); 
sj = size(b,2); 
%figure;imshow(b); 

% Binarization 
th = graythresh(b); 
I = im2bw(b,th); 

%Skeletonised 

kl=bwmorph(~I,'thin',inf); 
figure,imshow(kl) 

R(:,:)=kl(:,:); 
%grid size 
t1=10; 
D=100; 
I=1; 
U1=t1; 
J=1; 
U2=t1; 
E=1; 
t2=D/t1; 
%Z=1; 
for i=1:t2 
    for j=1:t2 
B(I:U1,J:U2)=R(I:U1,J:U2); 
[x,y]=find(B==1); 
CX=mean(x); 
CY=mean(y); 
CXXX(E)=CX; 
CYYY(E)=CY; 
CXX(i,j)=CX; 
CYY(i,j)=CY; 

T(I:U1,J:U2)=B(I:U1,J:U2); 
    J=J+t1; 
    U2=U2+t1; 
E=E+1; 
clear B x y 

    end 

I=I+t1; 
U1=U1+t1; 
J=1; 
    U2=t1; 

end 
%plot and grid 
figure,imshow(R) 
hold on 
M = size(R,1); 
N = size(R,2); 

a=t1; 
b=t1; 
for k = 1:a:M 
    x = [1 N]; 
    y = [k k]; 
    plot(x,y,'Color','white'); 
    set(findobj('Tag','MyGrid'),'Visible','on') 
end 
for k = 1:b:N 
    x = [k k]; 
    y = [1 M]; 
    plot(x,y,'Color','white'); 
    set(findobj('Tag','MyGrid'),'Visible','on') 
end 

plot(CXX,CYY, 'g*'); 
hold off 

는 선생님이 편집 코드를 시도하십시오.

+0

당신은 샘플 입력 이미지를 제공 할 수 있습니까? 코드가 실행되면 훨씬 쉽게 이해할 수 있습니다. – m7913d

+0

플롯 (XX, YY, 'k -', 'Markersize', 10); – m7913d

+0

선생님, 제 입력 이미지와 편집 된 코드를 삽입하고 코드를 실행하십시오. 도와주세요. – shivu

답변

0

질문을 올바르게 이해하면 녹색 별 사이에 draw lines을 입력하고 싶습니다.

plot(CYY(isfinite(CYY)),CXX(isfinite(CYY)), 'g*-'); 

내가 logical indexing를 사용하여 유효하지 않은 값을 제거하는 모든 연결이 그려하지, 그렇지 않으면, 다음과 같이이 완료되었습니다 수 있습니다.

enter image description here

+0

이 이미지를 주셔서 감사합니다. 최소 스패닝 트리 aooroach를 사용하여 해당 지점을 연결하는 알고리즘이 있습니까? – shivu

+0

질문하기 전에 원하는 검색 엔진을 사용하십시오. 나는 당신 동료가 이미 같은 질문을 며칠 전에 물었다 고 생각한다. http://stackoverflow.com/questions/43259896/how-to-connect-edges-to-nodes-in-a-image-using-minimum-spanning -tree-approach? rq = 1 – m7913d

+0

우리는 최소 스패닝 트리 방법을 사용하여 포인트에 에지를 추가하는 방법을 찾을 수 없습니다. – shivu