У меня есть изображение коронарной артерии, которое состоит из 271 кадра.Я преобразовал изображения в сагиттальный вид и нашел внутреннюю поверхность артерии, преобразовав ее в бинарный.после этого я хочу преобразовать его обратно в поперечное представление, чтобы получить сагиттальную информацию о представлении, но это дает мне неправильный результат, я хочу только две точки в поперечном представлении, но это дает мне целые линии.
Ниже приведенизображение с краем в сагиттальном виде
Вот что я получаю
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-х сегментный вид и найти край, и после нахождения края я комбинирую его с оригинальным сагиттальным изображением.и преобразовать его обратно в режим просмотра в обратном направлении. Я хочу получить такой результат, как этот
Ниже выводится изображение