资源简介
MATLAB仿真图像缩放,以.M文档编辑,介绍了图像缩放的相关算法,可以使用
代码片段和文件信息
%function aftans = image_rotate(imagepath theta)
% 两维图像旋转以及双线性灰度差值算法的实现
% Ref. 章毓晋. 图像工程(上册)——图像处理. 清华大学出版社
% Author: lskyp Date: 2009.08.12
im_init = imread(‘desert.jpg‘);
%im_init = imread(imagepath);
im_init = double(im_init); %对于灰度图像,uint8表示范围[0,255],double型表示范围[0,1]
im_height = size(im_init1);
im_width = size(im_init2);
% 分别处理灰度图像和RGB图像
if ndims(im_init) == 3
im_final = zeros(im_heightim_width3);
R = im_init(::1);
G = im_init(::2);
B = im_init(::3);
R_final = im_final(::1);
G_final = im_final(::2);
B_final = im_final(::3);
else
im_final = zeros(im_heightim_width);
end
theta = pi/5;
rot_matrix = [cos(theta) -sin(theta);sin(theta) cos(theta)];
tranh = (im_height+1)/2;
tranw = (im_width+1)/2;
for h = 1:im_height
for w = 1:im_width
% 平移至原点,旋转,然后再平移回去
new_position = rot_matrix*[h - tranh;w - tranw]+ [tranh; tranw];
% 这里是认为图像中心处为原点,建立局部坐标系,方向还是向下向右
% 旋转后,再平移回去
new_position(1) = mod(new_position(1)im_height);
new_position(2) = mod(new_position(2)im_width);
% 由于旋转有可能会跑出图像边界,进行了模操作
% 这是控制操作范围的好方法
if new_position(1) == 0
new_position(1) = 1;
end
if new_position(2) == 0
new_position(2) = 1;
end
% 当然,图像阵默认是从1开始计量,所以不能出现0
% 如果新位置为整数,那么直接赋予灰度值或者RGB值
% 否则,按照双线性插值计算,使用后向映射
if new_position == round(new_position)
if ndims(im_init) == 3
R_final(hw) = R(new_position(1)new_position(2));
G_final(hw) = G(new_position(1)new_position(2));
B_final(hw) = B(new_position(1)new_position(2));
else
im_final(hw) = im_init(new_position(1)new_position(2));
end
% 这里可以出对应的final位置的像素是旋转后所在位置对应的原图像像素值
else
h_new = floor(new_position(1));
w_new = floor(new_position(2));
% 先取整,向0方向取整
if h_new == 0
h_new = 1;
end
if w_new == 0
w_new = 1;
end
% 消除0位置
if ndims(im_init) == 3
% 双线性插值的实现过程 Ref. 章毓晋. 图像工程(上册)
% ——图像处理. 清华大学出版社
R_temp1 = R(h_new + 1w_new)*(new_position(1) - h_new)+ R(h_neww_new)*(h_new + 1 - new_position(1));
R_temp2 = R(h_new + 1w_new + 1)*(new_position(1) - h_new)...
+ R(h_neww_new + 1)*(h_new + 1 - new_position(1));
% 先进行h方向的线性插值
R_final(hw) = R_temp1*(w_new + 1 - new_position(2))...
+ R_temp2*(new_position(2) - w_new);
% 再进行w方向的线性插值
G_temp1 = G(h_new + 1w_new)*(new_position(1) - h_new)...
+ G(h_neww_new)*(h_new + 1 - new_position(1));
G_temp2 = G(h_new + 1w_new + 1)*(new_position(1) - h_new)...
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 0 2010-03-23 23:43 图像缩放
文件 5195 2009-11-28 12:38 图像缩放\11111.asv
文件 5198 2009-11-28 13:15 图像缩放\11111.m
文件 15026 2009-11-28 09:30 图像缩放\cup.jpg
文件 845941 2009-04-22 16:55 图像缩放\Desert.jpg
文件 2278 2009-11-28 09:29 图像缩放\images.jpg
文件 1616 2009-11-28 19:22 图像缩放\im_f.asv
文件 1613 2009-11-28 19:27 图像缩放\im_f.m
文件 739 2009-11-28 18:01 图像缩放\im_K.asv
文件 739 2009-11-28 18:01 图像缩放\im_K.m
文件 1074 2009-11-28 12:46 图像缩放\im_R.m
文件 1392 2009-11-28 20:30 图像缩放\im_rotate.asv
文件 1428 2009-11-28 20:44 图像缩放\im_rotate.m
文件 3224 2009-11-28 19:26 图像缩放\man.jpg
----------- --------- ---------- ----- ----
885463 14
- 上一篇:matlab车道线检测
- 下一篇:循环码的matlab仿真
评论
共有 条评论