function Iout=affine_warp(Iin,M,mode)
% Affine transformation function (Rotation, Translation, Resize)
% This function transforms a volume with a 3x3 transformation matrix
%
% Iout=affine_warp(Iin,Minv,mode)
%
% inputs,
% Iin: The input image
% Minv: The (inverse) 3x3 transformation matrix
% mode: If 0: linear interpolation and outside pixels set to nearest pixel
% 1: linear interpolation and outside pixels set to zero
% (cubic interpolation only support by compiled mex file)
% 2: cubic interpolation and outsite pixels set to nearest pixel
% 3: cubic interpolation and outside pixels set to zero
%
% output,
% Iout: The transformed image
%
% example,
% % Read image
% I=im2double(imread('lenag2.png'))
% % Make a transformation matrix
% M=make_transformation_matrix([2 3],2,[1.0 1.1]);
% % Transform the image
% Iout=affine_warp(I,M,0)
% % Show the image
% figure, imshow(Iout);
%
% Function is written by D.Kroon University of Twente (February 2009)
% Make all x,y indices
[x,y]=ndgrid(0:size(Iin,1)-1,0:size(Iin,2)-1);
% Calculate center of the image
% mean= size(Iin)/2;
% Make center of the image coordinates 0,0
%xd=x-mean(1);
%yd=y-mean(2);
xd=x;
yd=y;
% Calculate the Transformed coordinates
Tlocalx = mean(1) + M(1,1) * xd + M(1,2) *yd + M(1,3) * 1;
Tlocaly = mean(2) + M(2,1) * xd + M(2,2) *yd + M(2,3) * 1;
switch(mode)
case 0
Interpolation='bilinear';
Boundary='replicate';
case 1
Interpolation='bilinear';
Boundary='zero';
case 2
Interpolation='bicubic';
Boundary='replicate';
otherwise
Interpolation='bicubic';
Boundary='zero';
end
Iout=image_interpolation(Iin,Tlocalx,Tlocaly,Interpolation,Boundary);
function Iout = image_interpolation(Iin,Tlocalx,Tlocaly,Interpolation,Boundary,ImageSize)
% This function is used to transform an 2D image, in a backwards way with an
% transformation image.
%
% Iout = image_interpolation(Iin,Tlocalx,Tlocaly,Interpolation,Boundary,ImageSize)
%
% inputs,
% Iin : 2D greyscale or color input image
% Tlocalx,Tlocaly : (Backwards) Transformation images for all image pixels
% Interpolation:
% 'nearest' - nearest-neighbor interpolation
% 'bilinear' - bilinear interpolation
% 'bicubic' - cubic interpolation; the default method
% Boundary:
% 'zero' - outside input image are implicilty assumed to be zero
% 'replicate' - Input array values outside the bounds of the array
% are assumed to equal the nearest array border value
% (optional)
% ImageSize: - Size of output image
% outputs,
% Iout : The transformed image
%
% Function is written by D.Kroon University of Twente (September 2010)
if(~isa(Iin,'double')), Iin=double(Iin); end
if(nargin<6), ImageSize=[size(Iin,1) size(Iin,2)]; end
if(ndims(Iin)==2), lo=1; else lo=3; end
switch(lower(Interpolation))
case 'nearest'
xBas0=round(Tlocalx);
yBas0=round(Tlocaly);
case 'bilinear'
xBas0=floor(Tlocalx);
yBas0=floor(Tlocaly);
xBas1=xBas0+1;
yBas1=yBas0+1;
% Linear interpolation constants (percentages)
tx=Tlocalx-xBas0;
ty=Tlocaly-yBas0;
perc0=(1-tx).*(1-ty);
perc1=(1-tx).*ty;
perc2=tx.*(1-ty);
perc3=tx.*ty;
case 'bicubic'
xBas0=floor(Tlocalx);
yBas0=floor(Tlocaly);
tx=Tlocalx-xBas0;
ty=Tlocaly-yBas0;
% Determine the t vectors
vec_tx0= 0.5; vec_tx1= 0.5*tx; vec_tx2= 0.5*tx.^2; vec_tx3= 0.5*tx.^3;
vec_ty0= 0.5; vec_ty1= 0.5*ty; vec_ty2= 0.5*ty.^2;vec_ty3= 0.5*ty.^3;
% t vector multiplied with 4x4 bicubic kernel gives the to q vectors
vec_qx0= -1.0*vec_tx1 + 2.0*vec_tx2 - 1.0*vec_tx3;
vec_qx1= 2.0*vec_tx0 - 5.0*vec_tx2 + 3.0*vec_tx3;
vec_qx2= 1.0*vec_tx1 + 4.0*vec_tx2 - 3.0*vec_tx3;
vec_qx3= -1.0*vec_tx2 + 1.0*vec_tx3;
vec_qy0= -1.0*vec_ty1 + 2.0*vec_ty2 - 1.0*vec_ty3;
vec_qy1= 2.0*vec_ty0 - 5.0*vec_ty2 + 3.0*vec_ty3;
vec_qy2= 1.0*vec_ty1 + 4.0*vec_ty2 - 3.0*vec_ty3;
vec_qy3= -1.0*vec_ty2 + 1.0*vec_ty3;
% Determine 1D neighbour coordinates
xn0=xBas0-1; xn1=xBas0; xn2=xBas0+1; xn3=xBas0+2;
yn0=yBas0-1; yn1=yBas0; yn2=yBas0+1; yn3=yBas0+2;
otherwise
error('image_interpolation:inputs','unknown interpolation method');
end
% limit indexes to boundaries
switch(lower(Interpolation))
case 'nearest'
check_xBas0=(xBas0<0)|(xBas0>(size(Iin,1)-1));
check_yBas0=(yBas0<0)|(yBas0>(size(Iin,2)-1));
xBas0=min(max(xBas0,0),size(Iin,1)-1);
yBas0=min(max(yBas0,0),size(Iin,2)-1);
case 'bilinear'
check_xBas0=(xBas0<0)|(xBas0>(size(Iin,1)-1));
check_yBas0=(yBas0<0)|(yBas0>(size(Iin,2)-1));
check_xBas1=(xBas1<0)|(xBas1>(size(Iin,1)-1));
check_yBas1=(yBas1<0)|(yBas1>(size(Iin,2)-1));
xBas0=min(max(xBas0,0),size(Iin,1)-1);
yBas0=min(max(yBas0,0),size(Iin,2)-1);
xBas1=min(max(xBas1,0),size(Iin,1)-1);
yBas1=min(max(yBas1,0),size(Iin,2)-1);
case 'bicubic'
check_xn0=(xn0<0)|(xn0>(size(Iin,1)-1));
check_xn1=(xn1<0)|(xn1>(size(Iin,1)-1));
check_xn2=(xn2<0)|(xn2>(size(Iin,1)-1));
check_xn3=(xn3<0)|(xn3>(size(Iin,1)-1));
check_yn0=(yn0<0)|(yn0>(size(Iin,2)-1));
check_yn1=(yn1<0)|(yn1>(size(Iin,2)-1));
check_yn2=(yn2<0)|(yn2>(size(Iin,2)-1));
check_yn3=(yn3<0)|(yn3>(size(Iin,2)-1));
xn0=min(max(xn0,0),size(Iin,1)-1);
xn1=min(max(xn1,0),size(Iin,1)-1);
xn2=min(max(xn2,0),size(Iin,1)-1);
xn3=min(max(xn3,0),size(Iin,1)-1);
yn0=min(max(yn0,0),size(Iin,2)-1);
yn1=min(max(yn1,0),size(Iin,2)-1);
yn2=min(max(yn2,0),size(Iin,2)-1);
yn3=min(max(yn3,0),size(Iin,2)-1);
end
Iout=zeros([ImageSize(1:2) lo]);
for i=1:lo; % Loop incase of RGB
Iin_one=Iin(:,:,i);
switch(lower(Interpolation))
case 'nearest'
% Get the intensities
intensity_xyz0=Iin_one(1+xBas0+yBas0*size(Iin,1));
% Set pixels outside the image
switch(lower(Boundary))
case 'zero'
intensity_xyz0(check_xBas0|check_yBas0)=0;
otherwise
end
% Combine the weighted neighbour pixel intensities
Iout_one=intensity_xyz0;
case 'bilinear'
% Get the intensities
intensity_xyz0=Iin_one(1+xBas0+yBas0*size(Iin,1));
intensity_xyz1=Iin_one(1+xBas0+yBas1*size(Iin,1));
intensity_xyz2=Iin_one(1+xBas1+yBas0*size(Iin,1));
intensity_xyz3=Iin_one(1+xBas1+yBas1*size(Iin,1));
% Set pixels outside the image
switch(lower(Boundary))
case 'zero'
intensity_xyz0(check_xBas0|check_yBas0)=0;
intensity_xyz1(check_xBas0|check_yBas1)=0;
intensity_xyz2(check_xBas1|check_yBas0)=0;
intensity_xyz3(check_xBas1|check_yBas1)=0;
otherwise
end
% Combine the weighted neighbour pixel intensities
Iout_one=intensity_xyz0.*perc0+intensity_xyz1.*perc1+intensity_xyz2.*perc2+intensity_xyz3.*perc3;
case 'bicubic'
% Get the intensities
Iy0x0=Iin_one(1+xn0+yn0*size(Iin,1));Iy0x1=Iin_one(1+xn1+yn0*size(Iin,1));
Iy0x2=Iin_one(1+xn2+yn0*size(Iin,1));Iy0x3=Iin_one(1+xn3+yn0*size(Iin,1));
Iy1x0=Iin_one(1+xn0+yn1*size(Iin,1));Iy1x1=Iin_one(1+xn1+yn1*size(Iin,1));
Iy1x2=Iin_one(1+xn2+yn1*size(Iin,1));
没有合适的资源?快使用搜索试试~ 我知道了~
基于外围特征和SURF特征的印刷体汉字识别方法matlab程序
共158个文件
jpg:105个
m:35个
tif:8个
5星 · 超过95%的资源 需积分: 12 66 下载量 152 浏览量
2015-05-19
10:41:46
上传
评论 1
收藏 5.69MB ZIP 举报
温馨提示
印刷体汉字识别程序,该程序提取汉字的外围特征和SURF特征,并建立离线特征数据库,内容包括用于建立数据库的图片,可以作为测试样本使用,内容超好,相信一定会对于你研究识别带来帮助。
资源推荐
资源详情
资源评论
收起资源包目录
基于外围特征和SURF特征的印刷体汉字识别方法matlab程序 (158个子文件)
SurfDescriptor_GetDescriptor.asv 4KB
SurfDescriptor_DecribeInterestPoints.asv 2KB
8.jpg 192KB
61.jpg 192KB
27.jpg 192KB
65.jpg 192KB
92.jpg 192KB
48.jpg 192KB
26.jpg 192KB
15.jpg 192KB
43.jpg 192KB
87.jpg 192KB
49.jpg 192KB
59.jpg 192KB
14.jpg 192KB
99.jpg 192KB
2.jpg 192KB
63.jpg 192KB
97.jpg 192KB
42.jpg 192KB
83.jpg 192KB
1.jpg 192KB
6.jpg 192KB
69.jpg 192KB
60.jpg 192KB
86.jpg 192KB
53.jpg 192KB
25.jpg 192KB
64.jpg 192KB
62.jpg 192KB
28.jpg 192KB
3.jpg 192KB
35.jpg 192KB
82.jpg 192KB
5.jpg 192KB
34.jpg 192KB
52.jpg 192KB
19.jpg 192KB
21.jpg 192KB
38.jpg 192KB
74.jpg 192KB
79.jpg 192KB
75.jpg 192KB
55.jpg 192KB
95.jpg 192KB
39.jpg 192KB
56.jpg 192KB
11.jpg 192KB
77.jpg 192KB
96.jpg 192KB
98.jpg 192KB
2.jpg 192KB
1.jpg 192KB
3.jpg 192KB
85.jpg 192KB
88.jpg 192KB
4.jpg 192KB
36.jpg 192KB
23.jpg 192KB
10.jpg 192KB
22.jpg 192KB
93.jpg 192KB
24.jpg 192KB
33.jpg 192KB
17.jpg 192KB
18.jpg 192KB
71.jpg 192KB
13.jpg 192KB
16.jpg 192KB
66.jpg 192KB
76.jpg 192KB
32.jpg 192KB
29.jpg 192KB
81.jpg 192KB
41.jpg 192KB
46.jpg 192KB
70.jpg 192KB
68.jpg 192KB
54.jpg 192KB
84.jpg 192KB
12.jpg 192KB
89.jpg 192KB
9.jpg 192KB
50.jpg 192KB
80.jpg 192KB
20.jpg 192KB
90.jpg 192KB
7.jpg 192KB
94.jpg 192KB
30.jpg 192KB
91.jpg 192KB
40.jpg 192KB
47.jpg 192KB
67.jpg 192KB
45.jpg 192KB
72.jpg 192KB
73.jpg 192KB
51.jpg 192KB
58.jpg 192KB
78.jpg 192KB
共 158 条
- 1
- 2
资源评论
- haiqiangchen2020-12-16不错的东西,正好是需要的
lbo00000
- 粉丝: 1
- 资源: 5
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- NVIDIA驱动、CUDA和Pytorch及其依赖
- html动态爱心代码一(附源码)
- c40539bc-071a-486c-9d52-9d0c18d62dac 4.html
- 基于物理的非视域成像(NLOS)算法,利用了nerf+python源码+文档说明
- yuluer知更鸟.7z(1).001
- python课程设计-基于tensorflow实现的图文生成程序,数据集flickr30k-images+源代码+文档说明+截图
- python作业-基于Flickr30k数据集实现图像文本跨模态搜索python源码+数据集+测试界面+项目说明(高分课程设计)
- 基于Qt实现医院信息管理系统c++源码+文档说明+数据库(期末大作业)
- 基于python实现的医院信息管理系统完整源码+sql数据库+详细注释(高分课程设计)
- 基于python的眼底图像视杯视盘分割项目源码+文档说明+截图演示+详细注释(高分课程设计)
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功