博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
图像像素灰度内插(Matlab实现)
阅读量:6441 次
发布时间:2019-06-23

本文共 2077 字,大约阅读时间需要 6 分钟。

常用的像素灰度内插法:最近邻元法、双线性内插法、三次内插法

%%像素灰度内插factor = 0.75;%缩放比u = 0.6;v = 0.7;itp1 = uint8(zeros(ceil(h/factor),ceil(w/factor)));itp2 = uint8(zeros(ceil(h/u),ceil(w/v)));itp3 = uint8(zeros(ceil(h/u),ceil(w/v)));

下述的J3为待插值灰度图像,itp为插值图像

1.最近邻元法

         在待求像素的四邻像素中,将距离这点最近的邻像素灰度赋给待求像素。

%最近邻元法 for i = 1:h/factor    for j = 1:w/factor        itp1(i,j) = J3(floor(i*factor+0.5),floor(j*factor+0.5));    end end

2.双线性内插法

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

3.三次内插法

function [f] = S(x) if (0<=abs(x))&&(abs(x)<1)     f = 1-2*(abs(x))^2+(abs(x))^3; elseif (1<=abs(x))&&(abs(x)<2)     f = 4-8*abs(x)+5*(abs(x))^2-(abs(x))^3; else     f = 0; end end %三次内插法f = double(J3);u = 0.6;v = 0.7;for i = ceil(2/u):h/u-2    for j = ceil(2/v):w/v-2       A = [S(1+(j*v-floor(j*v))) S((j*v-floor(j*v))) S(1-(j*v-floor(j*v))) S(2-(j*v-floor(j*v)))];       C = [S(1+(i*u-floor(i*u)));S((i*u-floor(i*u)));S(1-(i*u-floor(i*u)));S(2-(i*u-floor(i*u)))];       i1 = floor(i*u); j1 = floor(j*v);       B = [f(i1-1,j1-1) f(i1-1,j1) f(i1-1,j1+1) f(i1-1,j1+2);            f(i1,j1-1) f(i1,j1) f(i1,j1+1) f(i1,j1+2);            f(i1+1,j1-1) f(i1+1,j1) f(i1+1,j1+1) f(i1+1,j1+2);            f(i1+2,j1-1) f(i1+2,j1) f(i1+2,j1+1) f(i1+2,j1+2);];        itp3(i,j) = A*B*C;    endend

 

上述的内插法处理的结果出现了黑边,可以通过将黑边区域赋予原始图像的对应区域的像素灰度值。

可通过以下循环实现。

%去黑边     [m,n] = size(J3);%原始图像的行列数    for i = 1:floor(1/u)         for j = 1:floor(n/v)          itp(i,j) = J3(ceil(i*u),ceil(j*v));          itp(floor(m/u),j) = J3(m,ceil(j*v));        end    end    for j = 1:floor(1/v)        for i = 1:floor(m/u)           itp(i,j) = J3(ceil(i*u),ceil(j*v));           itp(i,floor(n/v)) = J3(ceil(i*u),n);        end    end

 

转载于:https://www.cnblogs.com/liqinglong/p/10991992.html

你可能感兴趣的文章
VS2008调试程序时出现"XXX mutex not created."
查看>>
解决Java连接MySQL存储过程返回参数值为乱码问题
查看>>
c++ 字符检测 TCharacter
查看>>
MalformedObjectNameException: Invalid character '' in value part of property
查看>>
Hadoop格式化HDFS报错java.net.UnknownHostException: localhost.localdomain: localhost.localdomain
查看>>
android 40 Io编程
查看>>
STL之Vector(不定长数组)
查看>>
Ext江湖
查看>>
一起谈.NET技术,实战ASP.NET大规模网站架构:Web加速器
查看>>
RHEL 6.6下Python 2.6.6升级到Python 3.6.6
查看>>
linux 内核启动过程以及挂载android 根文件系统的过程 ( 转)
查看>>
shell每日更新(7)
查看>>
单词的个数
查看>>
从程序员到项目经理(27):怎样给领导汇报工作
查看>>
eclipse工程 'cocostudio/CocoStudio.h' file not found
查看>>
045医疗项目-模块四:采购单模块—采购单提交(Dao,Service,Action三层)
查看>>
dockerfile创建php容器(安装memcached、redis、gd、xdebug扩展)
查看>>
转:面对JXTA,我迷茫了
查看>>
IT人必须学会的职场四原则
查看>>
Android之剪贴薄实现
查看>>