--- a +++ b/Thoracic Organs Segmentation code/Main.m @@ -0,0 +1,64 @@ +%Before .m execution add paths +Path1= cd; Path1=[Path1,'\OpticalFlow3D'];path(Path1,path); +Path1 = cd; Path1 = [Path1, '\MAP']; path(Path1, path); +Path1 = cd; Path1 = [Path1, '\TwoPhaseLevel Sets']; path(Path1, path); + +%input images +%Inhale and Exhale images +load InhaleImg.mat;load ExhaleImg.mat; + +% InhaleImg=imresize(imread('InhaleImg.jpg'),0.3); +% ExhaleImg=imresize(imread('ExhaleImg.jpg'),0.3); +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +Img=reshape([InhaleImg;ExhaleImg]',[size(ExhaleImg,2),size(InhaleImg,1),2]); + +%Rib Cage Approximation +Thresh = Histogr(Img); + + +%MaxValue=max(max(max(Img))); +%Img = rescalingFunction(Img,0.16*MaxValue,MaxValue); + +[RibCage]=RibCageApproximation(Img(:,:,1),Thresh); + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +%Feature extraction + +%Optical Flow for the desplacement estimation + i1= permute(squeeze(Img(:,:,1)),[1 2 3]);%Inhale Img + i2= permute(squeeze(Img(:,:,2)),[1 2 3]);%Exhale Img + Displacement = OpticalFlow3D(i1,i2); +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% Maximum likelikehood pixel to belong Heart. +[J,I] = MaxLikelihood(Img(:,:,1),RibCage,squeeze(Displacement)); + + + +InnerCurve = DrawCircle(4,I(1),J(1),size(Img,1),size(Img,2),1); + +%Level Sets Process +[phi1,phi2]=TwoPhasesLevelSet(Img(:,:,1),RibCage,InnerCurve); + +figure + imshow(Img(:,:,1),[]); hold on + c1 = contour(phi1,[0 0],'r','LineWidth',2.2); + c2 = contour(phi2,[0 0],'g','LineWidth',2); + title('Zero Level Set') + hold off; + + + [I_heart]=find((phi2)<=0); + [I_lung]=find((phi1)<=0); + + SegmentOfThorax= zeros(size(Img)); + SegmentOfThorax(I_heart)=1; + SegmentOfThorax(I_lung)=1; + SegmentOfThorax= imfill(SegmentOfThorax); + + figure(1) + imshow(Img(:,:,1),[]); hold on + c = contour(SegmentOfThorax,[0 0],'m','LineWidth',2); + hold off + +