用Matlab实现线性插值的方法

一维数据插值:vq = interp1(x,v,xq),x,v是样本点和样本点的值,xq是要插入点的坐标

例如:在黑白两个颜色之间实现渐变,A(黑):[0 0 0] ,B(白):[1 1 1](或255 255 255)

代码如下:

clear;clc;
%-----------------Bar画图----------------------------------
%x:x轴上位置坐标 1x12 double
%y:y轴坐标,柱状图高度 1x12 double
%b:存放图的变量,b.CData(1,:)时A点,b.CData(12,:)B点
x = 1:5:60;
y = [10 10 10 10 10 10 10 10 10 10 10 10];
b = bar(x,y);
b.FaceColor = 'flat';
b.CData(1,:) = [0 0 0];     %A点的RGB值
b.CData(12,:) = [1 1 1];  %B点的RGB值
%---------------------------------------------------

%-------------------插值程序--------------------------------
%插值函数:vq = interp1(x,v,xq),默认线性插值,x,v是样本点和样本点的值,xq是要插入点的坐标                             
%X:样本点的坐标,对应x 1x4 double 
%V:样本点的颜色,对应v 4x3 double 
%data:临时变量,用来存放AB两点的RGB值的差 1x3 double
%aver:存放(B-A)/3的平均值,分3份,得4个点 1x1 double
%color_interp:插入的RGB数值,对应vq 大小随x变化,x为1x12 double

X = 0:20:60;                    %取4个样本点
V = zeros(4,3);                 %给V开设空间,存放4个样本的的R,G,B值
data = b.CData(12,:)-b.CData(1,:);  
for i = 1:3
    if(data(i)==0)              %此时A点和B点的R/G/B的某值相同
        V(:,i)=b.CData(1,i);
    else                        %在A点和B点之间平均3份,得到4个点做样本
        aver = data(i)./3;         
        V(:,i) = b.CData(1,i):aver:b.CData(12,i);
    end
end
color_interp = interp1(X,V,x);  
A = zeros(12,1);
for i = 1:size(A)
    b.CData(i,:) = color_interp(i,:);
end
%---------------------------------------------------

运行效果:

 

Matlab学习推荐:MATLAB教程_台大郭彦甫(14课)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值