双三次插值放大图像
- 双三次插值
- 代码
- 公式
双三次插值 之前应老板要求看了几篇文献,总是看到插值法,什么最近邻插值啦,双线性插值啦,双三次插值啦balabala,示意图都画的像花儿一样= =还是我水平不够,也没找到代码。。总之,这篇来总结一下双三次插值实现~
等过阵子找一下小波双三次和contourlet双三次(? ?_?)?
首先,指路插值法具体原理
代码
% 双三次插值法具体实现
fff=imread('E:\matlabPic\test.bmp');
ff=rgb2gray(fff);
%转化为灰度图像
[mm,nn]=size(ff);
%将图像隔行隔列抽取元素,得到缩小的图像f
m = fix(mm/2);
n =fix(nn/2);
f=zeros(m,n);
for i=1:m
for j=1:n
f(i,j)=ff(2*i,j*2);
end
end
k=5;
%设置放大倍数
bijiao1 = imresize(f,k,'bilinear');
%双线性插值结果比较
bijiao =uint8(bijiao1);
a=f(1,:);
c=f(m,:);
b=[f(1,1),f(1,1),f(:,1)',f(m,1),f(m,1)];
d=[f(1,n),f(1,n),f(:,n)',f(m,n),f(m,n)];
a1=[a;
a;
f;
c;
c];
b1=[b;
b;
a1';
d;
d];
ffff=b1';
f1=double(ffff);
g1=zeros(k*m,k*n);
for i=1:k*m %利用双三次插值公式对新图像所有像素赋值
u=rem(i,k)/k;
i1=floor(i/k)+2;
A=[sw(1+u) sw(u) sw(1-u) sw(2-u)];
for j=1:k*n
v=rem(j,k)/k;
j1=floor(j/k)+2;
C=[sw(1+v);
sw(v);
sw(1-v);
sw(2-v)];
B=[f1(i1-1,j1-1) f1(i1-1,j1) f1(i1-1,j1+1) f1(i1-1,j1+2)
f1(i1,j1-1) f1(i1,j1) f1(i1,j1+1) f1(i1,j1+2)
f1(i1+1,j1-1) f1(i1+1,j1) f1(i1+1,j1+1) f1(i1+1,j1+2)
f1(i1+2,j1-1) f1(i1+2,j1) f1(i1+2,j1+1) f1(i1+2,j1+2)];
g1(i,j)=(A*B*C);
end
end
g=uint8(g1);
figure,imshow(uint8(f));
title('缩小的图像');
%显示缩小的图像
figure,imshow(ff);
title('原图');
%显示原图像
figure,subplot(2,2,1),imshow(g);
title('双三次放大的图像');
%显示插值后的图像
subplot(2,2,2),imshow(bijiao);
title('双线性插值放大结果');
%显示插值后的图像
mse=0;
ff=double(ff);
g=double(g);
bijiao=double(bijiao);
ff2=fftshift(fft2(ff));
%计算原图像和插值图像的傅里叶幅度谱
g2=fftshift(fft2(g));
bijiao2=fftshift(fft2(bijiao));
figure,subplot(1,2,1),imshow(log(abs(ff2)),[8,10]);
title('原图像的傅里叶幅度谱');
subplot(1,2,2),imshow(log(abs(g2)),[8,10]);
title('双三次插值的傅里叶幅度谱');
figure,imshow(log(abs(bijiao2)),[8,10]);
title('双线性插值的傅里叶幅度谱');
当然还有个函数
function A = sw(w1)
%UNTITLED2 此处显示有关此函数的摘要
%此处显示详细说明
w = abs(w1);
if w<1&&w>=0
A=1-2.5*w^2+1.5*w^3;
elseif w>=1&&w<2
A=2-4*w+2.5*w^2-0.5*w^3;
else
A=0;
end
这个代码我调试过是可以运行的,但是就最后那些figure和subplot这些基础的显示图像的功能我就怎么也搞不明白了(lll¬ω¬)就想能把前四张图片放在一个窗口里显示咋就这么难呢。。。看了help也还是没有理解。。以后可能用的多了就明白了(随缘学习)
公式 这其中基本公式是这个
文章图片
这里a的数值咧,代码里面我直接代入了a=-0.5,当然也可以是别的啦~
【双三次插值放大图像具体实现(笔记)】
文章图片
文章图片
文章图片
文章图片
文章图片
PS
我也不晓得为啥子几个窗口大小不一样- -
其实我想实现的目标是小图像,然后放大,这里代码多了一句缩小,所以放大的尺寸跟原图相比没太大区别,就酱。。。接着啃去了。。
推荐阅读
- opencv|图像处理之椒盐噪声的添加与去除
- OpenCV|【OpenCV 完整例程】89. 带阻滤波器的传递函数
- OpenCV|【OpenCV 完整例程】90. 频率域陷波滤波器
- OpenCV|【OpenCV 完整例程】22. 图像添加非中文文字
- OpenCV|【OpenCV 完整例程】91. 高斯噪声、瑞利噪声、爱尔兰噪声
- 灰度世界算法(Gray World Algorithm)和White Patch Retinex算法
- 安卓开发|通过RenderScript 实现 NV21转Bitmap、两张Bitmap按照透明度混合的工具类
- 基于SLIC的细胞分割与检测
- 科学计算|超像素分割
- MFC|gdal 图像金字塔