快速扫描算法提取鱼眼图像有效区域

这个原理还是来自于《鱼眼图像校正算法研究》 这是作者在这篇论文中提出的自己改进的算法(我姑且叫它快速扫描算法吧) 

 A=imread('F:\orl_zhifangtu\yuyan1.jpg');
>> T=40;
>> [m,n,k]=size(A);
for i=1:m-1
    for j=1:n
        I(i,j)=0.59*A(i,j,1)+0.11*A(i,j,2)+0.3*A(i,j,3);
        if(I(i,j)>=T)
           I(i+1,j)=0.59*A(i+1,j,1)+0.11*A(i+1,j,2)+0.3*A(i+1,j,3); 
           if(I(i+1,j)>=T)
               bottom=j;
               break;
           end
        end
    end
end
for i=m:-1:2
    for j=1:n
        I(i,j)=0.59*A(i,j,1)+0.11*A(i,j,2)+0.3*A(i,j,3);
        if(I(i,j)>=T)
           I(i-1,j)=0.59*A(i-1,j,1)+0.11*A(i-1,j,2)+0.3*A(i-1,j,3); 
           if(I(i-1,j)>=T)
               top=i;
               break;
           end
        end
    end
end
for j=1:n-1
    for i=1:m
        I(i,j)=0.59*A(i,j,1)+0.11*A(i,j,2)+0.3*A(i,j,3);
        if(I(i,j)>=T)
           I(i,j+1)=0.59*A(i,j+1,1)+0.11*A(i,j+1,2)+0.3*A(i,j+1,3); 
           if(I(i,j+1)>=T)
               right=j;
               break;
           end
        end
    end
end
for j=n:-1:2
    for i=1:m
        I(i,j)=0.59*A(i,j,1)+0.11*A(i,j,2)+0.3*A(i,j,3);
        if(I(i,j)>=T)
           I(i,j-1)=0.59*A(i,j-1,1)+0.11*A(i,j-1,2)+0.3*A(i,j-1,3); 
           if(I(i,j-1)>=T)
               left=j;
               break;
           end
        end
    end
end
>> R=max(abs((right-left)/2),abs((bottom-top)/2));
B=imcrop(A,[left,top,2*R,2*R]);
>> imshow(B)

快速扫描算法提取鱼眼图像有效区域这是效果图

原图是如下:

快速扫描算法提取鱼眼图像有效区域


 这个算法大大的节约了时间 等一秒就出来了 不像之前那个逐行逐列扫描算法和区域生长算法一样要等那么久



后来我又换了一幅鱼眼图 又试了下 原图:

快速扫描算法提取鱼眼图像有效区域

下面是效果图:

快速扫描算法提取鱼眼图像有效区域

提取效果还是挺好的  作者的这个算法真的比区域生长算法省了太多时间 因为区域生长是遍历了所有像素点 而且每次还会重复很多  而这个的次数就很少 因为只扫描了除了这个外接正方形以外的区域 所以很省时间