MATLAB实现基于邻近插值的图像旋转代码
来源:互联网 发布:一张蓝图绘到底知乎 编辑:程序博客网 时间:2024/06/05 03:32
图像旋转计算公式:
i´= i*cosθ-j*sinθ
j´= i*sinθ+j*cosθ
步骤1:画布扩大,由端点值确定扩大范围
步骤2:由图像旋转公式,得到新图像
步骤3:空穴填充(邻近插值法、均值插值法)选用的是邻近插值法。
function [im] = rot_interpolation(I,ang)% I = [11 12 13; 21 22 23; 31 32 33];% ang = pi/6;[m,n,s] = size(I);a = sin(ang)b = cos(ang)i_min = round(min(min(min(min(m*b-n*a,m*b-a),b-n*a),b-a)))i_max = round(max(max(max(max(m*b-n*a,m*b-a),b-n*a),b-a)))j_min = round(min(min(min(min(m*a+n*b,m*a+b),a+n*b),a+b)))j_max = round(max(max(max(max(m*a+n*b,m*a+b),a+n*b),a+b)))y_m = 1 - i_min %行坐标的偏移量y_n = 1 - j_min %列坐标的偏移量m1 = abs(i_max - i_min)+1n1 = abs(j_max - j_min)+1B = -1*ones(m1,n1,1); %生成一个彩色的-1矩阵B = -1*ones(m1,n1,2);B = -1*ones(m1,n1,3);for i=1:m %图像旋转 for j=1:n i1 = round(i*b-j*a); j1 = round(i*a+j*b); B(i1+y_m,j1+y_n,:) = I(i,j,:); endend%邻近插值空穴填充for i=1:m1 %C(i,1,:)记录图像的左边界 for j=1:n1 if(B(i,j,:)~=-1) C(i,1,:) = j; break; end endendfor i=1:m1 %C(i,2,:)记录图像的右边界 for j=n1:-1:1 if(B(i,j,:)~=-1) C(i,2,:) = j; break; end endendfor i=1:m1 %空值填充为 它的前一个像素值 start = C(i,1,:)+1; send = C(i,2,:)-1; for j=start:send if(B(i,j,:)==-1) B(i,j,:) = B(i,j-1,:); end endendim = uint8(B);
函数调用例子:
I =imread(‘peppers.png’);
delta_ang = pi/3;[im]= rot_interpolation (I,delta_ang) ; imshow(I);figure, imshow(im);
0 0
- MATLAB实现基于邻近插值的图像旋转代码
- 基于最邻近插值和双线性差值算法实现图像的旋转
- 图像平移、缩放、旋转、插值 Matlab实现
- 实现牛顿插值的matlab代码
- 基于matlab的图像旋转
- Matlab学习 ---图像旋转(最邻近像素法)
- Matlab实现图像插值和降低图像灰度级
- 图像处理中两种基本的插值算法(最邻近插值法和双线性内插法)
- 图像处理中两种基本的插值算法(最邻近插值法和双线性内插法)
- matlab实现图像旋转
- Matlab 插值算法(最邻近、双线性、双三次插值)
- 图像最邻近插值算法,双线性插值算法
- 图像插值算法--最邻近、双线性、双三次插值
- matlab实现图像的平移、旋转、缩放
- matlab实现图像的平移、旋转、缩放
- Matlab 实现图像的平移,旋转,缩放
- 图像放大并进行BiCubic插值 Matlab/C++代码
- NV12 图像数据的插值时候旋转
- 浅谈new Runnable(){}--new Interface(){}
- vue-cli webpack在node环境下安装使用详解
- S5PV210的内存分配研究分析
- HihoCoder
- php编写自定义的的窗口命令
- MATLAB实现基于邻近插值的图像旋转代码
- Android Studio教程-创建第一个项目Hello World
- Toast总结
- 前端开发 UI 框架
- 图像处理算法之变老特效
- 在eclipse中使用github进行版本控制
- 计算几何经典操作
- AlertDialog总结
- FileSystemWatcher触发多次Change事件的解决办法