去除图像旋转黑边现象

来源:互联网 发布:mac dmp文件怎么打开 编辑:程序博客网 时间:2024/05/01 14:31

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

图像旋转的时候,图像的尺寸会变大,旋转以后增加的区域不做特殊处理的话,会被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)



0 0
原创粉丝点击