图像比例缩放-基于等间隔采样(附加MATLAB程序)

  • Post author:
  • Post category:其他




图像比例缩放-基于等间隔采样(附加MATLAB程序)

图像的比例缩放是指将给定的图像在



x

x






x





轴方向按比例缩放



f

x

f_x







f










x





















倍,在



y

y






y





轴方向按比例缩放



f

y

f_y







f










y





















倍。

在计算机图形中,每一个节点储存的是该节点的坐标



(

x

,

y

)

(x,y)






(


x


,




y


)





,各节点以一定的规律连接之后便构成了相应的形状。对于每一个节点,可对其进行比例缩放。比例缩放前后两点



P

0

(

x

0

,

y

0

)

P_0(x_0,y_0)







P










0


















(



x










0


















,





y










0


















)









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}






















































x








y








1



























































=

























































f










x
























0








0





























0









f










y
























0





























0








0








0












































































































x










0

























y










0
























1






























































在这里插入图片描述

然而对于数字图像来说,矩阵中储存的并不是其节点坐标信息,而是其灰度信息,于是从数码技术上,图像的缩小是通过减少像素个数来实现,因此,需要根据所期望缩小的尺寸数据,从原图像中选择合适的像素点,使图像缩小之后可以尽可能保持原有图像的概貌不丢失。



(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







K










1


















,





K










2





















,则缩放后的图像



G

(

i

,

j

)

G(i,j)






G


(


i


,




j


)









K

1

M

K

2

N

K_1M*K_2N







K










1


















M














K










2


















N






(2)采样间隔为



Δ

i

=

1

/

K

1

,

Δ

j

=

1

/

K

2

\Delta i=1/K_1,\Delta j=1/K_2






Δ


i




=








1


/



K










1


















,




Δ


j




=








1


/



K










2






















(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




=











































































f











1


1


























f











2


1


























f











3


1


























f











4


1















































f











1


2


























f











2


2


























f











3


2


























f











4


2















































f











1


3


























f











2


3


























f











3


3


























f











4


3















































f











1


4


























f











2


4


























f











3


4


























f











4


4















































f











1


5


























f











2


5


























f











3


5


























f











4


5















































f











1


6


























f











2


6


























f











3


6


























f











4


6






























































































设缩放比例为



K

1

=

0.7

,

K

2

=

0.6

K_1=0.7,K_2=0.6







K










1




















=








0


.


7


,





K










2




















=








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


/



K










1




















=








1


.


4


,




Δ


j




=








1


/



K










2




















=








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




=

























































f











1


2


























f











3


2


























f











4


2















































f











1


3


























f











3


3


























f











4


3















































f











1


5


























f











3


5


























f











4


5















































f











1


6


























f











3


6


























f











4


6












































































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)

在这里插入图片描述



版权声明:本文为Candy__1原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。