去除图像旋转黑边现象

人脸图像预处理——眼睛坐标对齐,去除黑边的干扰信息。

图像旋转的时候,图像的尺寸会变大,旋转以后增加的区域不做特殊处理的话,会被0填充,即会出现黑边现象。

去除黑边现象的办法:

1)在做图像坐标映射反查的时候,算出当前点在原始图像的外部还是内部,若在外部,判断当前像素点的X或者Y位置,找临近四个边界的像
素值代替;
  
   该方法太过繁琐,适合自己写程序实现,如若想调用现有的一些库函数,可以考虑2)做法:

2)将待旋转的图像进行边界填充,最不济的情况下可以扩充为原始图像的大小;

   旋转边界填充图像;

   计算原始图像经过旋转以后的结果图像的尺寸大小;

   在边界填充旋转图像上截取目标图像;(图像都是按照图像中心旋转的);

结果图如下:



附上一段matlab人脸根据人眼位置对齐的代码:

      eye_angle = atan2( (eye_pts(2,2) - eye_pts(1,2)),(eye_pts(2,1) - eye_pts(1,1) ) ) * 180 / pi; % 人眼的倾斜角度
      if eye_angle < 0
          eye_angle = eye_angle + 360;
      end
      if floor(eye_angle)  <= 5  || floor( 360 - eye_angle ) <= 5
         continue;
      end % 5度之内不做对齐操作
      img = imread(img_path);
      [m,n,~] = size(img);
      img_pad = padarray(img,[m n],'both','replicate');% 扩充图像
      img_pad_rotate = imrotate(img_pad,eye_angle,'bilinear'); % 旋转扩充图像 
      [m_pad_r,n_pad_r,~] = size(img_pad_rotate); 
      eye_angle = eye_angle * pi / 180;
      f_cos = cos(eye_angle);f_sin = sin(eye_angle);
      new_m = floor(m * abs(f_cos) + n * abs(f_sin));
      new_n = floor(n * abs(f_sin) + m * abs(f_cos));% 最终对齐图像的大小
      left = floor((n_pad_r - new_n) / 2);right = left + new_n;
      bott = floor((m_pad_r - new_m) / 2);up = bott + new_m;
      face_rorate = img_pad_rotate(bott : up,left : right,:); % 截取目标图像
      figure,imshow(face_rorate)



  • 5
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值