chivasgogo 发表于 2010-5-21 15:12

帮忙看下我写的代码,谢谢!关于图像修复的

A=imread('123.bmp');
m=size(A,1);
n=size(A,2);
B=zeros(m-1,n-1);
for i=2:m-1
    for j=2:n-1
      if A(i,j,1)==0&A(i,j,2)==0&A(i,j,3)==255
                     B(i,j)=1;
            end
          end
end
for i=2:m-1
for j=2:n-1
   if B(i-1,j-1)+B(i-1,j)+B(i,j-1)==0
            B(i,j)=0;
            A(i,j,1)=(A(i-1,j,1)+A(i,j-1,1)+A(i-1,j-1,1))/3;
            A(i,j,2)=(A(i-1,j,2)+A(i,j-1,2)+A(i-1,j-1,2))/3;                              
            A(i,j,3)=(A(i-1,j,3)+A(i,j-1,3)+A(i-1,j-1,3))/3;
         
   else if B(i-1,j)+B(i-1,j+1)+B(i,j+1)==0
            B(i,j)=0;
            A(i,j,1)=(A(i-1,j,1)+A(i-1,j+1,1)+A(i,j+1,1))/3;
            A(i,j,2)=(A(i-1,j,2)+A(i-1,j+1,2)+A(i,j+1,2))/3;      
            A(i,j,3)=(A(i-1,j,3)+A(i-1,j+1,3)+A(i,j+1,3))/3;         
         else if B(i,j-1)+B(i+1,j-1)+B(i+1,j)==0
               B(i,j)=0;
               A(i,j,1)=(A(i,j-1,1)+A(i+1,j-1,1)+A(i+1,j,1))/3;
               A(i,j,2)=(A(i,j-1,2)+A(i+1,j-1,2)+A(i+1,j,2))/3;      
               A(i,j,3)=(A(i,j-1,3)+A(i+1,j-1,3)+A(i+1,j,3))/3;
             else if B(i,j+1)+B(i+1,j+1)+B(i+1,j)==0
                  B(i,j)=0;
                  A(i,j,1)=(A(i,j+1,1)+A(i+1,j+1,1)+A(i+1,j,1))/3;
                  A(i,j,2)=(A(i,j+1,2)+A(i+1,j+1,2)+A(i+1,j,2))/3;      
                  A(i,j,3)=(A(i,j+1,3)+A(i+1,j+1,3)+A(i+1,j,3))/3;
               end
end
end
end
end
end
先判定待填充区域(蓝色),将位置存入B数组
然后以A(i,j)为中心对周围8个像素判定,若该像素周围存在3个不同颜色的像素,则用这3个像素颜色的均值填充该像素,然后继续判定下一个
得到的结果并不是蓝色区域被填充,初学matlab,望达人指导修改,不胜感激!

[ 本帖最后由 chivasgogo 于 2010-5-21 17:21 编辑 ]

ChaChing 发表于 2010-5-22 01:25

建议楼主给齐123.bmp, 方便有兴趣者试!?
页: [1]
查看完整版本: 帮忙看下我写的代码,谢谢!关于图像修复的