matlab图像局部放大算法

此代码可从https://github.com/TimeIvyace/Partial-Enlargement-of-Image.git中下载

本算法简单的实现了图像局部放大的效果,算法需要确定放大区域的中心坐标点,以及放大圆形区域的半径和放大强度,来进行放大区域内的等比例放大,与美图秀秀的大眼功能类似。以人脸图像放大眼睛为例。在使用机器学习等算法得到人脸68个特征点的基础上,我们可以大致确定眼珠中点的位置。
人脸68个特征点
由此可以大致得到左眼中心点位置为坐标37和40的中点,右眼中心点位置为坐标43和46的中点。接下来,通过设置放大区域半径以及放大强度,则可以实现眼睛放大。

局部放大算法代码:

function J=bigger(I,pointx,pointy,r)
%I为原图像,pointx和pointy为放大中心点坐标,r为放大半径
im=I;
%分别得到放大区域的上下左右坐标
left=round(pointy-r);
right=round(pointy+r);
top=round(pointx-r);
bottom=round(pointx+r);
%放大区域面积
space = r * r;
strength=30;    %放大强度
%原图像为彩色图像,要分成RGB三个分量进行处理
fr=im(:,:,1);
fg=im(:,:,2);
fb=im(:,:,3);
im2fr=fr;
im2fg=fg;
im2fb=fb;
%插值算法
for x=top:bottom
    offsetx=x-pointx;
    for y=left:right
        offsety=y-pointy;
        xy=offsetx*offsetx+offsety*offsety;
        if xy<=space
            %等比例放大
            scale=1-xy/space;
            scale=1-strength/100*scale;
            %posy和posx为放大后坐标值
            %采用最近邻插值算法
            posy=round(offsety*scale+pointy);
            posx=round(offsetx*scale+pointx);
            im2fr(x,y)=fr(posx,posy);
            im2fg(x,y)=fg(posx,posy);
            im2fb(x,y)=fb(posx,posy);
        end
    end
end
%将RGB三个分量整合,得到彩色图像
J=cat(3,im2fr,im2fg,im2fb);

眼睛放大图片对比
算法没有对图像边界进行判断,若放大区域超出图片范围,则会出错。插值算法使用的是最简单的最近邻算法,所以放大区域边界并不是特别平滑,接下来可以使用更高阶的插值算法进行改进。通过修改放大半径r以及放大强度strength,可以得到一个较为满意的效果。

  • 0
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值