欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

matlab图像局部放大算法

程序员文章站 2022-05-20 22:01:33
...

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

本算法简单的实现了图像局部放大的效果,算法需要确定放大区域的中心坐标点,以及放大圆形区域的半径和放大强度,来进行放大区域内的等比例放大,与美图秀秀的大眼功能类似。以人脸图像放大眼睛为例。在使用机器学习等算法得到人脸68个特征点的基础上,我们可以大致确定眼珠中点的位置。
matlab图像局部放大算法
由此可以大致得到左眼中心点位置为坐标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);

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