图像比例缩放-基于等间隔采样(附加MATLAB程序)
图像的比例缩放是指将给定的图像在
x
x
x轴方向按比例缩放
f
x
f_x
fx倍,在
y
y
y轴方向按比例缩放
f
y
f_y
fy倍。
在计算机图形中,每一个节点储存的是该节点的坐标
(
x
,
y
)
(x,y)
(x,y),各节点以一定的规律连接之后便构成了相应的形状。对于每一个节点,可对其进行比例缩放。比例缩放前后两点
P
0
(
x
0
,
y
0
)
P_0(x_0,y_0)
P0(x0,y0)和
P
(
x
,
y
)
P(x,y)
P(x,y)之间的关系用矩阵表示为:
[
x
y
1
]
=
[
f
x
0
0
0
f
y
0
0
0
0
]
[
x
0
y
0
1
]
\begin{bmatrix} x\\ y \\ 1 \end{bmatrix}=\begin{bmatrix} f_x & 0 &0 \\ 0& f_y& 0\\ 0& 0 & 0 \end{bmatrix}\begin{bmatrix} x_0\\ y_0 \\ 1 \end{bmatrix}
⎣⎡xy1⎦⎤=⎣⎡fx000fy0000⎦⎤⎣⎡x0y01⎦⎤
然而对于数字图像来说,矩阵中储存的并不是其节点坐标信息,而是其灰度信息,于是从数码技术上,图像的缩小是通过减少像素个数来实现,因此,需要根据所期望缩小的尺寸数据,从原图像中选择合适的像素点,使图像缩小之后可以尽可能保持原有图像的概貌不丢失。
(1)基于等间隔采样的图像缩小方法
这种图像缩小方法的设计思想是 :通过对图像像素均匀采样来保持所选择到的像素可以保持原像素的概貌特征。假设原图
F
(
i
,
j
)
F(i,j)
F(i,j),大小为
M
∗
N
M*N
M∗N
该方法的实现步骤:
(1)选择缩放比
K
1
,
K
2
K_1,K_2
K1,K2,则缩放后的图像
G
(
i
,
j
)
G(i,j)
G(i,j) 为
K
1
M
∗
K
2
N
K_1M*K_2N
K1M∗K2N
(2)采样间隔为
Δ
i
=
1
/
K
1
,
Δ
j
=
1
/
K
2
\Delta i=1/K_1,\Delta j=1/K_2
Δi=1/K1,Δj=1/K2
(3)
G
(
i
,
j
)
=
F
(
Δ
i
∗
i
,
Δ
j
∗
j
)
G(i,j)=F(\Delta i*i,\Delta j*j)
G(i,j)=F(Δi∗i,Δj∗j)
小数均四舍五入取整。
一个例子,设原图像大小为
4
×
6
4\times 6
4×6:
F
=
[
f
11
f
12
f
13
f
14
f
15
f
16
f
21
f
22
f
23
f
24
f
25
f
26
f
31
f
32
f
33
f
34
f
35
f
36
f
41
f
42
f
43
f
44
f
45
f
46
]
F=\begin{bmatrix} f_{11} & f_{12} & f_{13}& f_{14}& f_{15}& f_{16}\\ f_{21}& f_{22} & f_{23}& f_{24} & f_{25}& f_{26}\\ f_{31} & f_{32} & f_{33}& f_{34} &f_{35} & f_{36}\\ f_{41}& f_{42} & f_{43} & f_{44}& f_{45} & f_{46} \end{bmatrix}
F=⎣⎢⎢⎡f11f21f31f41f12f22f32f42f13f23f33f43f14f24f34f44f15f25f35f45f16f26f36f46⎦⎥⎥⎤
设缩放比例为 K 1 = 0.7 , K 2 = 0.6 K_1=0.7,K_2=0.6 K1=0.7,K2=0.6,经四舍五入缩小后的图像大小为 3 × 4 3\times 4 3×4,计算 Δ i = 1 / K 1 = 1.4 , Δ j = 1 / K 2 = 1.7 \Delta i=1/K_1=1.4,\Delta j=1/K_2=1.7 Δi=1/K1=1.4,Δj=1/K2=1.7,缩小后的图像为:
G = [ f 12 f 13 f 15 f 16 f 32 f 33 f 35 f 36 f 42 f 43 f 45 f 46 ] G=\begin{bmatrix} f_{12}& f_{13} &f_{15} & f_{16}\\ f_{32} & f_{33}& f_{35} &f_{36} \\ f_{42}& f_{43}& f_{45}& f_{46} \end{bmatrix} G=⎣⎡f12f32f42f13f33f43f15f35f45f16f36f46⎦⎤
MATLAB程序:
%基于等间隔采样的图像缩小方法
clc
clear
I=imread('OIP-C (1).jfif');
s=size(I);
%这里k1,k2为水平,数值方向缩放比
k1=0.4;
k2=0.4;
delta_x=1/k1;
delta_y=1/k2;
G=zeros(round(s(1)*k1),round(s(2)*k2),s(3));
for i=1:round(s(1)*k1)
for j=1:round(s(2)*k2)
G(i,j,1:s(3))=I(round(delta_x*i),round(delta_y*j),1:s(3));
end
end
G=uint8(G);
figure(1),imshow(I)
figure(2),imshow(G)