双线性插值实现图像放大(Matlab实现)
来源:互联网 发布:凤凰金融 人工智能不 编辑:程序博客网 时间:2024/06/02 16:20
一、算法伪代码
二、实现
1. 实验平台与数据
本算法使用Matlab语言实现,实验平台为Windows 8 32位操作系统、4GB内存(可用为2.31GB)、Matlab2013b。
图1 灰度图像lena.png
数据2:大小为:670*502 的彩色RGB图像,将使用实现的算法对其进行2倍缩小操作,如下图1所示:
图2 彩色RGB图像he.jpeg
2. 实验程序源代码
imblizoom.m文件源码
function [ ZI ] = imblizoom( I,zmf )
%----------------------双线性插值法缩放矩阵或图像---------------------------
% Input:
% I:图像文件名或矩阵(整数值(0~255))
% zmf:缩放因子,即缩放的倍数
% Output:
% 缩放后的图像矩阵 ZI
% Usage:
% ZI = SSELMHSIC('ImageFileName',zmf)
% 对图像I进行zmf倍的缩放并显示
% Or:
% ZI = SSELMHSIC(I,zmf)
% 对矩阵I进行zmf倍的缩放并显示
% ...
%-------------------------------------------------------------------
%%%% Authors: Zhi Liu
%%%% XiDian University Student
%%%% EMAIL: zhiliu.mind@gmail.com
%%%% DATE: 16-12-2013
%% Step1 对数据进行预处理
if ~exist('I','var') || isempty(I)
error('输入图像 I未定义或为空!');
end
if ~exist('zmf','var') || isempty(zmf) || numel(zmf) ~= 1
error('位移矢量 zmf未定义或为空或 zmf中的元素超过2!');
end
if isstr(I)
[I,M] = imread(I);
end
if zmf <= 0
error('缩放倍数 zmf的值应该大于0!');
end
%% Step2 通过原始图像和缩放因子得到新图像的大小,并创建新图像。
[IH,IW,ID] = size(I);
ZIH = round(IH*zmf); % 计算缩放后的图像高度,最近取整
ZIW = round(IW*zmf); % 计算缩放后的图像宽度,最近取整
ZI = zeros(ZIH,ZIW,ID); % 创建新图像
%% Step3 扩展矩阵I边缘
IT = zeros(IH+2,IW+2,ID);
IT(2:IH+1,2:IW+1,:) = I;
IT(1,2:IW+1,:)=I(1,:,:);IT(IH+2,2:IW+1,:)=I(IH,:,:);
IT(2:IH+1,1,:)=I(:,1,:);IT(2:IH+1,IW+2,:)=I(:,IW,:);
IT(1,1,:) = I(1,1,:);IT(1,IW+2,:) = I(1,IW,:);
IT(IH+2,1,:) = I(IH,1,:);IT(IH+2,IW+2,:) = I(IH,IW,:);
%% Step4 由新图像的某个像素(zi,zj)映射到原始图像(ii,jj)处,并插值。
for zj = 1:ZIW % 对图像进行按列逐元素扫描
for zi = 1:ZIH
ii = (zi-1)/zmf; jj = (zj-1)/zmf;
i = floor(ii); j = floor(jj); % 向下取整
u = ii - i; v = jj - j;
i = i + 1; j = j + 1;
ZI(zi,zj,:) = (1-u)*(1-v)*IT(i,j,:) +(1-u)*v*IT(i,j+1,:)...
+ u*(1-v)*IT(i+1,j,:) +u*v*IT(i+1,j+1,:);
end
end
ZI = uint8(ZI);
%% 以图像的形式显示同现矩阵P
figure
imshow(I,M);
axis on
title(['原图像(大小: ',num2str(IH),'*',num2str(IW),'*',num2str(ID),')']);
figure
imshow(ZI,M);
axis on
title(['缩放后的图像(大小: ',num2str(ZIH),'*',num2str(ZIW),'*',num2str(ID)',')']);
end
3. 实验结果
1) 数据1
在命令窗口输入imblizoom('lena.png', 2);回车后结果如下图3和下图4所示:
图3 lena.png的运行结果1(原图)
图4 lena.png的运行结果2(放大2倍后的图)
2)数据2
图5 he.jpeg运行结果1(原图)
图6 he.jpeg运行结果2(缩小2倍后的图像)
由图3~图6可知,程序正确无误,放大缩小后的效果都很好。程序的用法及其它功能,请查看代码注释。
- 双线性插值实现图像放大(Matlab实现)
- 使用双线性插值法放大图像(matlab实现)
- matlab图像处理基础知识0(双线性插值matlab实现--调整水平和垂直放大倍数)
- 双线性插值(Matlab实现)
- 使用双线性插值进行图像放大的实现
- matlab图像处理基础知识1(双线性插值matlab实现--等比例调整缩放倍数)
- matlab图像处理基础知识3(双线性插值matlab实现--FPGA优化)
- matlab图像处理基础知识3(双线性插值matlab实现--FPGA优化)
- 双线性插值实现图像缩放
- 图像放大并用双线性插值
- opencl:C++实现双线性插值图像缩放
- 双线性插值图像放大/缩小算法
- 双线性插值图像放大/缩小算法
- matlab练习程序(图像旋转,双线性插值)
- 图像缩放插值算法以及matlab简单实现(最近邻法、双线性插值法、三次卷积法)
- 双线性插值的图像缩放算法的研究与实现
- 双线性插值的图像缩放算法的研究与实现
- 双线性插值的图像缩放算法的研究与实现
- java作业 4.2
- java 4.3
- 对话框伸缩功能的实现
- 化身学霸
- Java泛型中E、T、K、V等的含义
- 双线性插值实现图像放大(Matlab实现)
- linux下编译QBittorrent-3.1.9.2
- 接下来的日子修炼这几种内功
- 本周游戏推荐:2048 + 激战2
- UITableView中heightForRowAtIndexPath 产生 EXC_BAD_ACCESS 的原因
- LeetCode OJ - Binary Tree Preorder Traversal
- C++单链表实现
- 第11周 项目3 点类派生直线类
- leetcode Best Time to Buy and Sell Stock I & II & III