for i=1:length(iSPNewWalls{1})
    DeepSearch=0;
    
    searchlight=0;%checks if any corners have been found
    step_search=0; %increments area of search
    span_max=1; %checks if bounds of image have been reached
    
    N=FillInLimit+1; 
    iMIN=max(iSPNewWalls{1}(i)-N,1);
    iMAX=max(iSPNewWalls{1}(i),1);
    jMIN=min(jSPNewWalls{1}(i),1);
    jMAX=min(jSPNewWalls{1}(i)+N,ImSize(2));
    
    
    if sum(sum(sign02(IsparsePura{3}(iMIN:iMAX-1,jMIN+1:jMAX)+IsparseNewWalls{3}(iMIN:iMAX-1,jMIN+1:jMAX))))~=0 
        [iPart,jPart,sPart]=find(IsparsePura{3}(iMIN:iMAX-1,jMIN+1:jMAX)+IsparseNewWalls{3}(iMIN:iMAX-1,jMIN+1:jMAX));
        KernSizeTempI=iMAX-iMIN+1;
        KernSizeTempJ=jMAX-jMIN+1;
        
        [YshortestDist,indexK]=sort(abs(KernSizeTempI-iPart)+jPart); 
        
        TestPatchI=iPart(indexK(1))+iMIN-1;
        TestPatchJ=jPart(indexK(1))+jMIN;
        checkval=0;
        stepval=2;
        while checkval==0;
            if abs(TestPatchI-iMAX)<2 | abs(TestPatchJ-jMIN)<2%;
                try
                    TestPatchI=iPart(indexK(stepval))+iMIN-1;
                    TestPatchJ=jPart(indexK(stepval))+jMIN;
                    stepval=stepval+1;
                catch
                    checkval=1;
                end
                
            else
                checkval=1;
            end
        end
        
        
        SearchDepthDistance=YshortestDist(stepval-1);
        ChkNxtCorner=stepval-1;
        
        
        Bounded_tst_=CheckBound(TestPatchI,iMAX,jMIN,TestPatchJ,SubPixRes,IcrawlT);
        
        while (sum(sum(IpixelsTemp(TestPatchI+1:iMAX-1,jMIN+1:TestPatchJ-1)))~=0 | (Bounded_tst_==0)) && (ChkNxtCorner<length(indexK)) ...
                && YshortestDist(ChkNxtCorner)<FillInLimit+1
            ChkNxtCorner=ChkNxtCorner+1;
            TestPatchI=iPart(indexK(ChkNxtCorner))+iMIN-1;
            TestPatchJ=jPart(indexK(ChkNxtCorner))+jMIN;
            Bounded_tst_=CheckBound(TestPatchI,iMAX,jMIN,TestPatchJ,SubPixRes,IcrawlT);
        end
        
        
        
        
        
        if sum(sum(IpixelsTemp(TestPatchI+1:iMAX-1,jMIN+1:TestPatchJ-1)))==0 && (Bounded_tst_==1); 
            if sum(sum(IsparsePura{1}(TestPatchI+1:iMAX,jMIN:TestPatchJ-1)+IsparseNewWalls{1}(TestPatchI+1:iMAX,jMIN:TestPatchJ-1)))<=1
                
                
                
                IallRectsNew(rectsAllNew,:)=[TestPatchI iMAX jMIN TestPatchJ 1];
                WallPosts(rectsAllNew,:)=sWALL;
                rectsAllNew=rectsAllNew+1;
                
            end
        end
        
        
    end
    
    
end


for i=1:length(iSPNewWalls{2})
    
    
    searchlight=0;%checks if any corners have been found
    step_search=0; %increments area of search
    span_max=1; %checks if bounds of image have been reached
    
    
    
    N=FillInLimit+1; 
    iMIN=max(iSPNewWalls{2}(i)-N,1);
    iMAX=max(iSPNewWalls{2}(i),1);
    jMAX=max(jSPNewWalls{2}(i),1);
    jMIN=max(jSPNewWalls{2}(i)-N,1);
    sWALL=[0 sSPAll{2}(i) 0 0];
    
    
    
    
    if sum(sum(sign02(IsparsePura{4}(iMIN:iMAX-1,jMIN:jMAX-1)+IsparseNewWalls{4}(iMIN:iMAX-1,jMIN:jMAX-1))))~=0 
        [iPart,jPart,sPart]=find(IsparsePura{4}(iMIN:iMAX-1,jMIN:jMAX-1)+IsparseNewWalls{4}(iMIN:iMAX-1,jMIN:jMAX-1));
        KernSizeTempI=iMAX-iMIN+1;
        KernSizeTempJ=jMAX-jMIN+1;
        [YshortestDist,indexK]=sort(abs(KernSizeTempI-iPart)+abs(KernSizeTempJ-jPart));
        
        TestPatchI=iPart(indexK(1))+iMIN-1;
        TestPatchJ=jPart(indexK(1))+jMIN-1;
        
        checkval=0;
        stepval=2;
        while checkval==0;
            if abs(TestPatchI-iMAX)<2 | abs(TestPatchJ-jMAX)<2 ;
                try
                    TestPatchI=iPart(indexK(stepval))+iMIN-1;
                    TestPatchJ=jPart(indexK(stepval))+jMIN-1;
                    stepval=stepval+1;
                catch
                    checkval=1;
                end
            else
                checkval=1;
            end
        end
        
        
        
        SearchDepthDistance=YshortestDist(stepval-1);
        ChkNxtCorner=stepval-1;
        
        
        Bounded_tst_=CheckBound(TestPatchI,iMAX,TestPatchJ,jMAX,SubPixRes,IcrawlT);
        
        
        while (sum(sum(IpixelsTemp(TestPatchI+1:iMAX-1,TestPatchJ+1:jMAX-1)))~=0 | (Bounded_tst_==0)) && (ChkNxtCorner<length(indexK)) ...
                && YshortestDist(ChkNxtCorner)<FillInLimit+1
            ChkNxtCorner=ChkNxtCorner+1;
            TestPatchI=iPart(indexK(ChkNxtCorner))+iMIN-1;
            TestPatchJ=jPart(indexK(ChkNxtCorner))+jMIN-1;
            Bounded_tst_=CheckBound(TestPatchI,iMAX,TestPatchJ,jMAX,SubPixRes,IcrawlT);
        end 
        
        
        
        if sum(sum(IpixelsTemp(TestPatchI+1:iMAX-1,TestPatchJ+1:jMAX-1)))==0 && (Bounded_tst_==1); %&& (Inonsides(TestPatchI,TestPatchJ)+Inonsides(iMAX+1,jMAX+1)>0);%...
            
            if sum(sum(IsparsePura{2}(TestPatchI+1:iMAX,TestPatchJ+1:jMAX)+IsparseNewWalls{2}(TestPatchI+1:iMAX,TestPatchJ+1:jMAX)))<=1
                
                
                
                IallRectsNew(rectsAllNew,:)=[TestPatchI iMAX TestPatchJ jMAX 2];
                
                rectsAllNew=rectsAllNew+1;
                
            end
            
        end
        
    end
    
end



%=============================================================



for i=1:length(iSPNewWalls{3})
    DeepSearch=0;
    
    searchlight=0;%checks if any corners have been found
    step_search=0; %increments area of search
    span_max=1; %checks if bounds of image have been reached
    
    N=FillInLimit+1; 
    iMIN=max(iSPNewWalls{3}(i),1);
    iMAX=min(iSPNewWalls{3}(i)+N,ImSize(1));
    jMIN=max(jSPNewWalls{3}(i)-N,1);
    jMAX=min(jSPNewWalls{3}(i),ImSize(2));
    
    
    if sum(sum(sign02(IsparsePura{1}(iMIN+1:iMAX,jMIN:jMAX-1)+IsparseNewWalls{1}(iMIN+1:iMAX,jMIN:jMAX-1))))~=0 
        [iPart,jPart,sPart]=find(IsparsePura{1}(iMIN+1:iMAX,jMIN:jMAX-1)+IsparseNewWalls{1}(iMIN+1:iMAX,jMIN:jMAX-1));
        KernSizeTempI=iMAX-iMIN+1;
        KernSizeTempJ=jMAX-jMIN+1;
        
        [YshortestDist,indexK]=sort(abs(iPart)+abs(KernSizeTempJ-jPart)); 
        
        TestPatchI=iPart(indexK(1))+iMIN;
        TestPatchJ=jPart(indexK(1))+jMIN-1;
        checkval=0;
        stepval=2;
        while checkval==0;
            if abs(TestPatchI-iMIN)<2 | abs(TestPatchJ-jMAX)<2%;
                try
                    TestPatchI=iPart(indexK(stepval))+iMIN;
                    TestPatchJ=jPart(indexK(stepval))+jMIN-1;
                    stepval=stepval+1;
                catch
                    checkval=1;
                end
                
            else
                checkval=1;
            end
        end
        
        
        SearchDepthDistance=YshortestDist(stepval-1);
        ChkNxtCorner=stepval-1;
        
        
        Bounded_tst_=CheckBound(iMIN,TestPatchI,TestPatchJ,jMAX,SubPixRes,IcrawlT);
        
        while (sum(sum(IpixelsTemp(iMIN+1:TestPatchI-1,TestPatchJ+1:jMAX-1)))~=0 | (Bounded_tst_==0)) && (ChkNxtCorner<length(indexK)) ...
                && YshortestDist(ChkNxtCorner)<FillInLimit+1
            ChkNxtCorner=ChkNxtCorner+1;
            TestPatchI=iPart(indexK(ChkNxtCorner))+iMIN;
            TestPatchJ=jPart(indexK(ChkNxtCorner))+jMIN-1;
            Bounded_tst_=CheckBound(iMIN,TestPatchI,TestPatchJ,jMAX,SubPixRes,IcrawlT);
        end
        
        
        
        
        
        if sum(sum(IpixelsTemp(iMIN+1:TestPatchI-1,TestPatchJ+1:jMAX-1)))==0 && (Bounded_tst_==1); 
            if sum(sum(IsparsePura{3}(iMIN:TestPatchI-1,TestPatchJ+1:jMAX)+IsparseNewWalls{3}(iMIN:TestPatchI-1,TestPatchJ+1:jMAX)))<=1
                
                
                
                IallRectsNew(rectsAllNew,:)=[iMIN TestPatchI TestPatchJ jMAX 1];
                
                rectsAllNew=rectsAllNew+1;
                
            end
        end
        
        
    end
    
    
end


for i=1:length(iSPNewWalls{4})
    
    
    searchlight=0;%checks if any corners have been found
    step_search=0; %increments area of search
    span_max=1; %checks if bounds of image have been reached
    
    
    
    N=FillInLimit+1; 
    iMIN=max(iSPNewWalls{4}(i),1);
    iMAX=min(iSPNewWalls{4}(i)+N,ImSize(1));
    jMIN=max(jSPNewWalls{4}(i),1);
    jMAX=min(jSPNewWalls{4}(i)+N,ImSize(2));
    
    
    
    
    
    if sum(sum(sign02(IsparsePura{2}(iMIN+1:iMAX,jMIN+1:jMAX)+IsparseNewWalls{2}(iMIN+1:iMAX,jMIN+1:jMAX))))~=0 
        [iPart,jPart,sPart]=find(IsparsePura{2}(iMIN+1:iMAX,jMIN+1:jMAX)+IsparseNewWalls{2}(iMIN+1:iMAX,jMIN+1:jMAX));
        KernSizeTempI=iMAX-iMIN+1;
        KernSizeTempJ=jMAX-jMIN+1;
        [YshortestDist,indexK]=sort(abs(iPart)+abs(jPart)); %Shortest Distance from (iMIN,jMIN)
        
        TestPatchI=iPart(indexK(1))+iMIN;
        TestPatchJ=jPart(indexK(1))+jMIN;
        
        checkval=0;
        stepval=2;
        while checkval==0;
            if abs(TestPatchI-iMIN)<2 | abs(TestPatchJ-jMIN)<2 ;
                try
                    TestPatchI=iPart(indexK(stepval))+iMIN;
                    TestPatchJ=jPart(indexK(stepval))+jMIN;
                    stepval=stepval+1;
                catch
                    checkval=1;
                end
            else
                checkval=1;
            end
        end
        
        
        
        SearchDepthDistance=YshortestDist(stepval-1);
        ChkNxtCorner=stepval-1;
        
        
        Bounded_tst_=CheckBound(iMIN,TestPatchI,jMIN,TestPatchJ,SubPixRes,IcrawlT);
        
        
        while (sum(sum(IpixelsTemp(iMIN+1:TestPatchI-1,jMIN+1:TestPatchJ-1)))~=0 | (Bounded_tst_==0)) && (ChkNxtCorner<length(indexK)) ...
                && YshortestDist(ChkNxtCorner)<FillInLimit+1
            ChkNxtCorner=ChkNxtCorner+1;
            TestPatchI=iPart(indexK(ChkNxtCorner))+iMIN;
            TestPatchJ=jPart(indexK(ChkNxtCorner))+jMIN;
            Bounded_tst_=CheckBound(iMIN,TestPatchI,jMIN,TestPatchJ,SubPixRes,IcrawlT);
        end 
        
        
        
        if sum(sum(IpixelsTemp(iMIN+1:TestPatchI-1,jMIN+1:TestPatchJ-1)))==0 && (Bounded_tst_==1); %&& (Inonsides(TestPatchI,TestPatchJ)+Inonsides(iMAX+1,jMAX+1)>0);%...
            
            if sum(sum(IsparsePura{4}(iMIN:TestPatchI-1,jMIN:TestPatchJ-1)+IsparseNewWalls{4}(iMIN:TestPatchI-1,jMIN:TestPatchJ-1)))<=1
                
                
                IallRectsNew(rectsAllNew,:)=[iMIN TestPatchI jMIN TestPatchJ 2];
                
                rectsAllNew=rectsAllNew+1;
                
            end
            
        end
        
    end
    
end

if exist('IallRectsNew')
IrectNewSize=IallRectsNew(:,2)+IallRectsNew(:,4)-IallRectsNew(:,1)-IallRectsNew(:,3);
[dumArray sortRect]=sort(IrectNewSize);
IallRectsNew=IallRectsNew(sortRect,:);
end