设为首页收藏本站

EPS数据狗论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 1844|回复: 0

图像像素灰度内插(Matlab实现)

[复制链接]

20

主题

159

金钱

262

积分

入门用户

发表于 2019-6-17 14:14:05 | 显示全部楼层 |阅读模式

常用的像素灰度内插法:最近邻元法、双线性内插法、三次内插法
  1. %%像素灰度内插
  2. factor = 0.75;%缩放比
  3. u = 0.6;v = 0.7;
  4. itp1 = uint8(zeros(ceil(h/factor),ceil(w/factor)));
  5. itp2 = uint8(zeros(ceil(h/u),ceil(w/v)));
  6. itp3 = uint8(zeros(ceil(h/u),ceil(w/v)));
复制代码

下述的J3为待插值灰度图像,itp为插值图像
1.最近邻元法
         在待求像素的四邻像素中,将距离这点最近的邻像素灰度赋给待求像素。
  1. %最近邻元法
  2. for i = :h/factor
  3.     for j = :w/factor
  4.         itp1(i,j) = J3(floor(i*factor+0.5),floor(j*factor+0.5));
  5.     end
  6. end
复制代码

2.双线性内插法
1.png
2.png
  1. %双线性内插法
  2. for i = :h/u-
  3.     for j = :w/v-
  4.         itp2(i,j) = (-(i*u-floor(i*u)))*(-(j*v-floor(j*v)))*J3(floor(i*u),floor(j*v))...
  5.                    +(-(i*u-floor(i*u)))*(j*v-floor(j*v))*J3(floor(i*u),floor(j*v)+)...
  6.                    +(i*u-floor(i*u))*(-(j*v-floor(j*v)))*J3(floor(i*u)+,floor(j*v))...
  7.                    +(i*u-floor(i*u))*(j*v-floor(j*v))*J3(floor(i*u)+,floor(j*v)+);         

  8.     end
  9. end
复制代码

3.三次内插法
3.png
4.png
  1. function [f] = S(x)
  2. if (0<=abs(x))&&(abs(x)<1)
  3.     f = 1-2*(abs(x))^2+(abs(x))^3;
  4. elseif (1<=abs(x))&&(abs(x)<2)
  5.     f = 4-8*abs(x)+5*(abs(x))^2-(abs(x))^3;
  6. else
  7.     f = 0;
  8. end
  9. end


  10. %三次内插法
  11. f = double(J3);
  12. u = 0.6;v = 0.7;
  13. for i = ceil(/u):h/u-
  14.     for j = ceil(/v):w/v-
  15.        A = [S(+(j*v-floor(j*v))) S((j*v-floor(j*v))) S(-(j*v-floor(j*v))) S(-(j*v-floor(j*v)))];
  16.        C = [S(+(i*u-floor(i*u)));S((i*u-floor(i*u)));S(-(i*u-floor(i*u)));S(-(i*u-floor(i*u)))];
  17.        i1 = floor(i*u); j1 = floor(j*v);
  18.        B = [f(i1-,j1-) f(i1-,j1) f(i1-,j1+) f(i1-,j1+);
  19.             f(i1,j1-) f(i1,j1) f(i1,j1+) f(i1,j1+);
  20.             f(i1+,j1-) f(i1+,j1) f(i1+,j1+) f(i1+,j1+);
  21.             f(i1+,j1-) f(i1+,j1) f(i1+,j1+) f(i1+,j1+);];
  22.         itp3(i,j) = A*B*C;
  23.     end
  24. end
复制代码

上述的内插法处理的结果出现了黑边,可以通过将黑边区域赋予原始图像的对应区域的像素灰度值。
可通过以下循环实现。
  1. %去黑边
  2.     [m,n] = size(J3);%原始图像的行列数

  3.     for i = :floor(1/u)
  4.         for j = :floor(n/v)
  5.           itp(i,j) = J3(ceil(i*u),ceil(j*v));
  6.           itp(floor(m/u),j) = J3(m,ceil(j*v));
  7.         end
  8.     end
  9.     for j = :floor(1/v)
  10.         for i = :floor(m/u)
  11.            itp(i,j) = J3(ceil(i*u),ceil(j*v));
  12.            itp(i,floor(n/v)) = J3(ceil(i*u),n);
  13.         end
  14.     end
复制代码

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

客服中心
关闭
在线时间:
周一~周五
8:30-17:30
QQ群:
653541906
联系电话:
010-85786021-8017
在线咨询
客服中心

意见反馈|网站地图|手机版|小黑屋|EPS数据狗论坛 ( 京ICP备09019565号-3 )   

Powered by BFIT! X3.4

© 2008-2028 BFIT Inc.

快速回复 返回顶部 返回列表