imshow
을 사용하여 이미지를 표시 한 후 hold on
문 때문에 줄임표가 기존 그림 위에 그려집니다. 그래서,이 대신 : 만 (x, y)
당신을 제공, 저장,
figure
[편집]
가 좋아, 우선 :
는
imshow(bw)
hold on
단순히 figure
문을 사용하여 새 그림을 만들 타원 중심 만. 타원을 그리려면 majos/minor 축 크기 (a
, b
) 및 방향 각도 (theta
)도 저장해야합니다.
간단히 말해서 나는 당신이 이미 가지고있는 루프를 다시 사용할 수 있지만, 단순히 1에 bw 이미지 픽셀을 설정하여 plot
를 대체 할 각 좌표
% get image dimensions
dim = size(bw);
% preallocate a blank bw image
target = false(dim);
% for each ellipse
for k = 1:length(s)
% this part remains the same:
xbar = s(k).Centroid(1);
ybar = s(k).Centroid(2);
a = s(k).MajorAxisLength/2;
b = s(k).MinorAxisLength/2;
theta = pi*s(k).Orientation/180;
R = [ cos(theta) sin(theta)
-sin(theta) cos(theta)];
xy = [a*cosphi; b*sinphi];
xy = R*xy;
x = xy(1,:) + xbar;
y = xy(2,:) + ybar;
% ----------
% but replace plot(x,y) with this:
% limit to image dimensions (1:256)
x(x<1) = 1; x(x>dim(1))=dim(1);
y(y<1) = 1; y(y>dim(2))=dim(2);
% set those pixels to 1
target(sub2ind(dim, round(x),round(y))) = 1;
end
imshow(target);
을 지금, 이미지 외부의 절반 타원가 경계. 그래서 x, y 좌표를 (1 : 256)으로 제한해야합니다. 그렇지 않으면 범위를 벗어난 오류가 발생합니다. 이 줄임표를 완전히 제거해야하는지 아니면 여기에서 수행 한대로 부분적으로 그려야하는지 다시 생각해 봐야합니다.
고맙습니다. 그러나 실제로 figure와 imshow (btw, 내 코드에서 imshow 대신 figure(); imagesc (bw)를 사용하고 있으며 내 문제는 아닙니다)를 제거하고 싶습니다. 내가 가지고있는 것은 bw가 각 경우에 픽셀 인 1024x1392 행렬 인 경우입니다. 웹에서 가져온 코드는 실제로 두 개의 배열을 생성합니다. 50 개 요소 길이의 x와 y입니다 (각 요소 값은 타원 좌표입니다). 이 정보를 축 좌표로 bw 행렬에 전달하려면 어떻게해야합니까? 최종 목표는 내가 언급 한 코드가 무엇을하는지, 플롯 부분을 건너 뛰고 그냥 bw 이미지에 타원을 추가하는 것입니다. – user990253
@ user990253 : 이제 알았습니다. 코드를 예제로 업데이트했습니다. – Groo
대단히 감사합니다! 대단한 개선이지만 여전히 길을 걷고 있습니다! 내 코드의 다음 단계는 둘레를 채우는 것이기 때문에 실제로 타원 경계선이 필요합니다. BTW, 난 원래의 그림 개체와 생성 된 타원의 중첩을하기 위해, 모두 x와 y에 dim (1)을 사용했습니다. 범위를 벗어난 오류로 원본 이미지에서 많은 물체를 잃어 버렸습니다! – user990253