我将一个三维图像转换为一组二维图像(片),但是我收到的图片不是质量好,这是一个损失的信息。有解决方案吗?请帮助

34视图(30天)
清除所有;
关闭所有;
i = niftiinfo (“picture.nii”);
弗吉尼亚州= niftiread(我);
Vmax = max (Va);
Vmin = min (Va);
Va_prime = ((Va-abs (Vmin)。/ (Vmax-Vmin)) * 255; %正常化- >值0和1之间
昏暗的=大小(Va_prime); %维度du体积
volumeViewer (Va)
[sliceX sliceY sliceZ] =大小(Va);
额= Va_prime (:,:, sliceZ);
矢状=重塑(Va_prime (sliceX,:,:),(暗(2)暗(3)));
水平=重塑(Va_prime (:, sliceY:),(暗(1)暗(3)));
文件夹=“方向文件”;
因为我= 1:sliceY
额= uint8 (Va(:,:我));
额= imrotate(额,90);
basefilename = sprintf (“% d.png形象”,我);
fullfilemane = fullfile(文件夹,basefilename);
imshow(额)
imwrite(额,fullfilemane);
结束

接受的答案

为副总经理
为副总经理 2021年6月4日
这里。我很确定的主要问题在正常化,但也有其他问题可以简化。我离开了未使用的东西和笔记。
%我不知道什么是你的形象
倪= niftiinfo (“brain.nii”);
弗吉尼亚州= niftiread (ni);
%如果Va是3 d, min (Va)将返回一个二维数组
%,因为它只沿着dim1最小化。这是理想的吗?
% Vmax = max (Va);
% Vmin = min (Va);
%为全球最低相反(见下文为什么不使用)
% Vmax = max (Va (:));
% Vmin = min (Va (:));
% Va_prime = ((Va-abs (Vmin)。/ (Vmax-Vmin)) * 255;%这不是正常化
Va_prime = mat2gray (Va);%这可实现独立于图像类
%的大小= (Va_prime);%这包含相同的信息作为sliceX / Y / Z
% (sliceX sliceY sliceZ] =大小(Va);%就使用它们
%,不需要使用
%你选择只是一片(最后一个)…为什么?
%额= Va_prime (:,:, sliceZ);
%矢状=重塑(Va_prime (sliceX,:,:), [sliceY sliceZ]);
%的水平=重塑(Va_prime (:, sliceY:), [sliceX sliceZ]);
%的方向我不知道你的形象,所以我猜哪一方是哪个
使用交换()%,但避免需要知道阵列几何
额= Va_prime;
矢状=排列(Va_prime [2 3 1]);
水平=排列(Va_prime [1 3 2]);
%挑哪个图像输出
outpict =额;
outpict = rot90 (outpict, 1);%旋转整个事情如果必要的
文件夹=“方向文件”;
p = 1:尺寸(outpict, 3)%会自动选择合适的片
outslice = outpict (:: p);
%选择文件名和东西
basefilename = sprintf (“图像% d.png”,我);
fullfilemane = fullfile(文件夹,basefilename);
imwrite (outslice fullfilemane);
结束
%你可以把这个循环,但它减缓了事情
%,你只会看到最后一块
imshow (outslice)
你必须检查saggital /水平切片的方向对你的形象。你可以交换他们如果他们了。

更多的答案(0)

社区寻宝

找到宝藏在MATLAB中央,发现社区如何帮助你!

开始狩猎!