数字图像处理--空间变换
上次讲了数字图像处理的一题,今天再贴一题
Geometric transform (test image: fig3.tif)
Develope geometric transform program that will rotate, translate, and scale an imageby specified amounts, using the nearest neighbor and bilinear interpolationmethods, respectively.
背景
在对图像进行空间变换的过程中,典型的情况是在对图像进行放大,旋转处理的时候,图像会出现失真的现象。这是由于在变换之后的图像中,存在着一些变换之前的图像中没有的像素位置。处理这一问题的方法被称为图像灰度级插值。常用的插值方式有三种:最近邻域插值、双线性插值、双三次插值。理论上来讲,最近邻域插值的效果最差,双三次插值的效果最好,双线性插值的效果介于两者之间。不过对于要求不是非常严格的图像插值而言,使用双线性插值通常就足够了。
最近领域算法Matlab代码
sourcePic=imread('fig3.tif');
%以下为了彩色图像
%[m,n,o]=size(sourcePic);
%grayPic=rgb2gray(sourcePic);
grayPic=sourcePic;
[m,n]=size(grayPic);%比例系数为0.2-5.0
K = str2double(inputdlg('请输入比例系数(0.2 - 5.0)', '输入比例系数', 1, {'0.5'}));%验证范围
if (K < 0.2) && (K > 5.0)errordlg('比例系数不在0.2 - 5.0范围内', '错误');error('请输入比例系数(0.2 - 5.0)');
endfigure;
imshow(grayPic);width = K * m;
height = K * n;
resultPic = uint8(zeros(width,height));widthScale = m/width;
heightScale = n/height;for x = 5:width - 5 for y = 5:height - 5xx = x * widthScale; yy = y * heightScale;if (xx/double(uint16(xx)) == 1.0) && (yy/double(uint16(yy)) == 1.0) % if xx and yy is integer,then J(x,y) <- I(x,y)resultPic(x,y) = grayPic(int16(xx),int16(yy));else % xx or yy is not integera = double(round(xx)); % (a,b) is the base-dotb = double(round(yy));resultPic(x,y) = grayPic(a,b); % calculate J(x,y)endend
endfigure;
rotate(resultPic,-20);
imshow(resultPic);
双线性插值Matlab算法
sourcePic=imread('fig3.tif');
%以下为了彩色图像
%[m,n,o]=size(sourcePic);
%grayPic=rgb2gray(sourcePic);
grayPic=sourcePic;
[m,n]=size(grayPic);%比例系数为0.2-5.0
K = str2double(inputdlg('请输入比例系数(0.2 - 5.0)', '输入比例系数', 1, {'0.5'}));%验证范围
if (K < 0.2) or (K > 5.0)errordlg('比例系数不在0.2 - 5.0范围内', '错误');error('请输入比例系数(0.2 - 5.0)');
endfigure;
imshow(grayPic);%输出图片长宽
width = K * m;
height = K * n;
resultPic = uint8(zeros(width,height));widthScale = n/width;
heightScale = m/height;for x = 5:width-5 for y = 5:height-5xx = x * widthScale; yy = y * heightScale;if (xx/double(uint16(xx)) == 1.0) && (yy/double(uint16(yy)) == 1.0)
% if xx and yy is integer,then J(x,y) <- I(x,y)resultPic(x,y) = grayPic(int16(xx),int16(yy));else
% xx or yy is not integera = double(uint16(xx));
% (a,b) is the base-dotb = double(uint16(yy));x11 = double(grayPic(a,b));
% x11 <- I(a,b)x12 = double(grayPic(a,b+1));
% x12 <- I(a,b+1)x21 = double(grayPic(a+1,b));
% x21 <- I(a+1,b)x22 = double(grayPic(a+1,b+1));
% x22 <- I(a+1,b+1) resultPic(x,y) = uint8( (b+1-yy) * ((xx-a)*x21 + (a+1-xx)*x11) + (yy-b) * ((xx-a)*x22 +(a+1-xx) * x12) );endend
endfigure;
resultPic = imrotate(resultPic,-20);
imshow(resultPic);
效果如下
最近领域算法放大2倍并顺时针旋转20度
双线性插值算法放大2倍并顺时针旋转20度
体会
该实验表明双线性插值得到的图像效果是比较好的。能够避免采用最近领域插值方式时可能存在的图像模糊、块状失真等问题。但双线性插值也存在问题,在放大倍数比较高的时候,图像失真将会比较严重,此时应该考虑使用更高阶的插值算法。
数字图像处理--空间变换相关推荐
- 数字图像处理-空间域处理-灰度变换-基本灰度变换函数(反转变换、对数变换、伽马变换和分段线性变换)
数字图像处理-空间域处理-灰度变换-基本灰度变换函数(反转变换.对数变换.伽马变换和分段线性变换) 空间域处理是直接对像素进行操作的方法,这是相对于频率域处理而言的.空间域处理主要分为两大类:灰度变换 ...
- 数字图像处理—亮度变换与空间滤波—亮度变换函数
数字图像处理-亮度变换与空间滤波-亮度变换函数 参考资料:<数字图像处理>,仅供学习参考. 亮度变换函数仅取决于亮度的值,与像素位置无关,所以亮度变换函数通常可写成如下形式: s=T(r) ...
- 数字图像处理-空间域图像增强(一)(图像反转,对数变换,幂次变换、分段线性变换)
空间域增强的第一部分:图像反转,对数变换,幂次变换.分段线性变换 (s:现点值,r: 原点值) 图像反转: 这个无需多说,就是把黑变白,白变黑,拿八位灰度图像来说 表达式:s=255-r 作用:看清暗 ...
- 数字图像处理--空间滤波器
前面提到,我们可以用平均或加权平均来降低噪声,以增强图像.前面我们是对像素点的周边8领域进行的操作,要是我们想对周边更多领域进行操作呢?如果我们想要调整加权的权重值呢? 那么用前2篇文章中的方法显然是 ...
- 数字图像处理 空间域高斯低通滤波 MATLAB实验
一.原理_空间域高斯低通滤波 高斯低通滤波是一种使用的去噪滤波,可用于去除高斯噪声,且几乎没有振铃现象. 二.步骤 (1)读入原图像lena.bmp并显示: (2)对原图像分别添加高斯噪声,并显示加噪 ...
- 数字图像处理 空间域锐化 MATLAB实验
一.原理_空间域锐化 设图像为 f(x,y) , Roberts算子的定义式为: 其对应的模板为: Prewitt算子的定义式为: 其中, 其对应的模板为: Sobel算子的定义式为: 其中, 其对应 ...
- 数字图像处理 空间域平滑 MATLAB实验
一.原理_均值滤波 设加噪图像为 f(x,y) ,经均值滤波处理后的图像为g(x,y) ,则: 式中, S是(x,y)像素点的邻域,K是S内的像素数. 最典型的S为3X3邻域,可用模板形式表示为: 这 ...
- Matlab数字图像处理——图像的空间变换
Matlab空间变换函数 imtransform Matlab空间变换函数 imtransform 可以实现图像仿射变换(如 平移.旋转.剪切.缩放).投影变换, 该函数可与 maketform 配合 ...
- matlab 霍特林变换,数字图像处理(第3版面向CS2013计算机专业规划教材)
导语 内容提要 姚敏编著的<数字图像处理(第3版面向CS2013计算机专业规划教材)>详细介绍了数字图像处理的基本理论.主要技术和最新进展.全书共分13章,内容主要包括图像获取.图像变换. ...
最新文章
- 在Ring3上实现文件碎甲(解锁)功能
- tkinter 菜单添加事件_tkinter学习教程(七)
- ssh免密登录(普通用户和root用户)
- DAG的最小路径覆盖和二分图的最大匹配
- [js] 你是如何比较js函数的执行速度的?
- 《C#与.net高级编程》——第一支柱:C#的封装
- Android中Adapter之BaseAdapter使用
- Android开发史上最全笔试面试题
- 分形理论在图像处理中的应用研究(综述)
- T5: Linux查看cpu信息,是否支持avx2指令集
- 懒羊羊的作业:看过国产动画片的同学都知道,懒羊羊是一只非常懒的羊,整天除了吃就是睡,根本没有时间做作业。明天就是周一了,村长慢羊羊留的作业:把 n 个整数从大到小排序,它还没开始写...
- vue使用provide / inject 组合刷新页面+单独组件刷新
- 成都短期计算机python培训
- credssp(credssp加密数据库修正 server2016)
- BlackJack--21点扑克游戏Java实现
- 点云配准2:icp算法在PCL1.10.0上的实现+源码解析
- Unity背景音乐控制
- 电脑的ODBC数据源里面没有Microsoft Access Driver(*.mdb),并且已经装上了microsoft office 2003
- 数据读取速度达1.5G/s,UFS 2.1存储技术曝光
- Broadcast Receiver