преобразовать изображение из сагиттального вида в поперечный вид - PullRequest
0 голосов
/ 24 мая 2018

У меня есть изображение коронарной артерии, которое состоит из 271 кадра.Я преобразовал изображения в сагиттальный вид и нашел внутреннюю поверхность артерии, преобразовав ее в бинарный.после этого я хочу преобразовать его обратно в поперечное представление, чтобы получить сагиттальную информацию о представлении, но это дает мне неправильный результат, я хочу только две точки в поперечном представлении, но это дает мне целые линии.

Ниже приведенизображение с краем в сагиттальном виде

enter image description here

Вот что я получаю

enter image description here

clear , clc
mri = uint8(zeros(512,512,271)); % preallocate 4-D array 

for frame=1:271
[mri(:,:,frame),map] = imread('image.tif',frame); 
end
for angle = 0:1:180
if angle == 0
    Img(:,:,:) = mri(:,:,:);
else
    Img(:,:,:) = imrotate(mri(:,:,:),angle,'bilinear','crop');
end
ImgSg = squeeze(permute(Img, [1 3 2]));
for slice = 1: 271
    Image(:,:,:) = Img(:,:,slice);
   xcentre = floor(size(Image, 2) / 2);
   ycentre = floor(size(Image, 1) / 2);
   sliceC =(xcentre+ycentre)/2;
   sliceimage = squeeze(permute(Image(:, sliceC, :), [1 3 2]));

  if slice == 1
  image3D = sliceimage;
else
  image3D = cat(2, image3D, sliceimage);
end
end
ImgSg1 = ImgSg;
image3D(226:286,1:271)=10;
% imshow(ImgSg(:,:,256));
[counts,x] = imhist(image3D,16);
T = otsuthresh(counts); 
BW = imbinarize(image3D,T);
% imshow3D(BW);
[rows, columns, numberOfColorChannels] = size(BW);
 middleRow = floor(rows/2);
topHalf = BW(1:middleRow, :,:);
bottomHalf = BW(1+middleRow:end, :,:);
filterImg = bwareaopen(bottomHalf,25);
output_img = zeros(size(bottomHalf));
for col  = 1: size(bottomHalf,2)
first_nnz_row = find(filterImg(:,col),1,'first');
output_img(first_nnz_row:end,col) = 1;
end
filterImg = bwareaopen(topHalf,25);
output_img1 = zeros(size(topHalf));
for col  = 1: size(topHalf,2)
first_nnz_row1 = find(filterImg(:,col),1,'last');
output_img1(1:first_nnz_row1,col) = 1;
end

fullImage = [output_img1; output_img];

fullImage=logical(1 - fullImage);
i2 = bwperim(fullImage,8);

im1 = i2;
other_images = ImgSg; 
blend = 0.2;
mask1 = im1;
fused = other_images;
 for slice = 1 : size(fused, 2)
this_slice = fused(:,:,slice);
this_slice(mask1)=double(this_slice(mask1))*blend+double(im1(mask1)*(1-blend));
%     imshow(this_slice)
 fused(:,:,slice) = this_slice;
end
 imshow(fused(:,:,256));
  %    imshow3D(fullImage);
 ImgSg = squeeze(permute(fused, [1 3 2]));
 imshow3D(ImgSg)
 end

Здесь я прикрепил свой код, сначала прочитав изображение.получить 2-х сегментный вид и найти край, и после нахождения края я комбинирую его с оригинальным сагиттальным изображением.и преобразовать его обратно в режим просмотра в обратном направлении. Я хочу получить такой результат, как этот

Ниже выводится изображение

enter image description here

...