Matlab 함수 gradient
을 사용하여 볼륨의 그래디언트를 계산하려고합니다. 슬라이스 그라디언트를 표시하려면 quiver
을 사용합니다.Matlab에서 3d 구조의 그래디언트를 계산하십시오.
x, y 및 z 축에 대해 대칭 인 입방체 볼륨을 사용합니다. 놀랍게도 결과는 모든 조각에서 동일하지 않습니다. 실제로 xy 평면 (Z 슬라이스, 마지막 이미지)의 결과 만 예상되는 결과입니다.
이미지의 경계에서 그래디언트를 계산할 때 문제가 있다는 것을 알고 있습니다. 하지만 나에게있어 국경에서의 결과는 중요하지 않으므로 국경 옆의 결과가 정확한지 상관하지 않는다. 나를 위해 세 가지 이미지가 모두 마지막 이미지처럼 보이는 것이 중요합니다.
누군가 내 코드에 어떤 문제가 있다고 말할 수 있습니까? 감사!
f=zeros(20,20,20);
space = 5;
f(:,:,space) = 1; f(:,:,end-space) = 1;
f(:,space,:) = 1; f(:,end-space,:) = 1;
f(space,:,:) = 1; f(end-space,:,:) = 1;
space = 4;
f(:,:,space) = 1; f(:,:,end-space) = 1;
f(:,space,:) = 1; f(:,end-space,:) = 1;
f(space,:,:) = 1; f(end-space,:,:) = 1;
size_iso = size(f);
x_slice = round(size_iso(1)/2);
y_slice = round(size_iso(2)/2);
z_slice = round(size_iso(3)/2);
% display the gradient of the edge map
[fx,fy,fz] = gradient(f,0.1);
figure;
image(squeeze(f(x_slice,:,:))*50); colormap(gray(64)); hold on;
quiver(squeeze(fy(x_slice,:,:)),squeeze(fz(x_slice,:,:)));
axis equal;
title(['edge map gradient of X-slice ', num2str(x_slice)]);
figure;
image(squeeze(f(:,y_slice,:))*50); colormap(gray(64)); hold on;
quiver(squeeze(fx(:,y_slice,:)),squeeze(fz(:,y_slice,:)));
axis equal;
title(['edge map gradient of Y-slice ', num2str(y_slice)]);
figure;
image(squeeze(f(:,:,z_slice))*50); colormap(gray(64)); hold on;
quiver(squeeze(fx(:,:,z_slice)),squeeze(fy(:,:,z_slice)));
axis equal;
title(['edge map gradient of Z-slice ', num2str(z_slice)]);
실제로 매우 까다 롭지 만 fx는 x 방향의 그라데이션입니다. 따라서 x 방향 종속 데이터로 떨림을 부여해야합니다. y 방향의 그래디언트로 떨림을 전달하면 y 기울기가 0입니다 (fx에 y 그래디언트가 없기 때문에). – nightlyop
예, 그런 것입니다. 직각 투영 ('slice'와'quiver3' 함수 사용) 하에서 슬라이스와 벡터 필드 평면의 3D 렌더링을 수행하고 3D 플롯을 회전시켜 2D 플롯으로 나타낼 수 있습니다. 이 경우 어떤 좌표를 사용해야하는지 쉽게 이해할 수 있습니다. – anandr