--- a +++ b/Thoracic Organs Segmentation code/MAP/fillingProc.m @@ -0,0 +1,103 @@ +%function [finalImg]=fillAorta(i,j,aortaValue,filteredImg) +%function finalImg=fillAorta(i,j,filteredImg,inputImg) +function finalImg = fillingProc(centre_i,centre_j,filteredImg); + + +%maxPixelValue=250; +setValue=1;%max(max(filteredImg)); +finalImg=zeros(size(filteredImg)); + +%threshold choice +threshold=1;%max(max(filteredImg));%mean(mean(filteredImg)); + +centre_i=centre_i; +centre_j=centre_j; + +stack=-ones(255^2,2); +stack_index=1; +stack(stack_index,1)=centre_i; +stack(stack_index,2)=centre_j; +i=centre_i;j=centre_j; +while(stack_index>0 )%&& j+1<size(filteredImg,1) && j-1>0 && i+1<size(filteredImg,2) && i-1>0) + %oldValue=finalImg(pixel_i,pixel_j); + i=stack(stack_index,1); + j=stack(stack_index,2); + stack_index=stack_index-1; + finalImg(i,j)=setValue; + + %if( checkNeighbour(filteredImg(i,j),filteredImg(i,j+1))==1 && finalImg(i,j+1)~=setValue ) + if(j+1<=size(filteredImg,2)) + if( finalImg(i,j+1)~=setValue) + + if( checkNeighbour(filteredImg(i,j),filteredImg(i,j+1),threshold)==1 ) + stack_index=stack_index+1; + stack(stack_index,1)=i; + stack(stack_index,2)=j+1; + else + finalImg(i,j+1)=setValue; + end + + end + end + + %if( checkNeighbour(filteredImg(i,j),filteredImg(i,j-1))==1 && finalImg(i,j-1)~=setValue ) + if (j-1>0) + if( finalImg(i,j-1)~=setValue) + + if( checkNeighbour(filteredImg(i,j),filteredImg(i,j-1),threshold)==1 ) + stack_index=stack_index+1; + stack(stack_index,1)=i; + stack(stack_index,2)=j-1; + %fillAorta(i,j-1); + else + finalImg(i,j-1)=setValue; + end + end + end + + %if( checkNeighbour(filteredImg(i,j),filteredImg(i+1,j))==1 && finalImg(i+1,j)~=setValue ) + if (i+1<=size(filteredImg,1)) + if( finalImg(i+1,j)~=setValue ) + + if( checkNeighbour(filteredImg(i,j),filteredImg(i+1,j),threshold)==1 ) + stack_index=stack_index+1; + stack(stack_index,1)=i+1; + stack(stack_index,2)=j; + %fillAorta(i+1,j) + else + finalImg(i+1,j)=setValue; + end + + end + end + + %if( checkNeighbour(filteredImg(i,j),filteredImg(i-1,j))==1 && finalImg(i-1,j)~=setValue ) + if (i-1>0) + if( finalImg(i-1,j)~=setValue ) + + if( checkNeighbour(filteredImg(i,j),filteredImg(i-1,j),threshold)==1 ) + stack_index=stack_index+1; + stack(stack_index,1)=i-1; + stack(stack_index,2)=j; + %fillAorta(i-1,j) + else + finalImg(i-1,j)=setValue; + end + end + + end + +end + +function isValid=checkNeighbour(curPixel,nextPixel,threshold) +isValid=1; +if (curPixel==threshold) + isValid=0; +end +if(abs(nextPixel-curPixel)>0) + isValid=0; +end + + + +