Upload
dao-uit
View
49
Download
4
Embed Size (px)
Citation preview
Báo cáo đồ án môn học
Đồ hoạ máy tính
Áp dụng các phép biến đổi
affine lên ảnh raster
Giảng viên hướng dẫn:
ThS. Trịnh Quốc Sơn
Thực hiện:
Phạm nguyễn Trường An – 07520004
Quách Hồng Đức – 07520092
Mục lục
Contents
I. Nội dung đồ án......................................................................................................................... 3
II. Giới thiệu các phép biến đổi Transformation.......................................................................... 3
A. Conformal linear transformation ....................................................................................... 3
1. Tịnh tiến (Translate) ...................................................................................................... 3
2. Đối xứng (Reflection) .................................................................................................... 4
3. Quay (Rotate)................................................................................................................. 6
4. Tỉ lệ (scale) .................................................................................................................... 6
B. Affine transformation ........................................................................................................ 7
1. Shear .............................................................................................................................. 7
C. Các phép biển đổi chưa học .............................................................................................. 8
1. Projective Transform ..................................................................................................... 8
III. Cách biến đổi ảnh................................................................................................................ 10
A. Các phép biến đổi conformal .......................................................................................... 10
1. Phép tịnh tiến và phép đối xứng. ................................................................................. 10
2. Phéo quay..................................................................................................................... 10
3. Phép tỉ lệ ...................................................................................................................... 11
B. Affine............................................................................................................................... 12
1. Represent transformation with the use of matrix ..........Error! Bookmark not defined.
2. Combine transformtation ..............................................Error! Bookmark not defined.
3. Cài đặt đối với ảnh:...................................................................................................... 14
4. Perspective transformation .......................................................................................... 14
IV. Thiết kế cài đăt:................................................................................................................... 16
V. Các phương pháp cải tiến....................................................................................................... 18
A. Cải tiến tốc độ: ................................................................................................................ 18
1. RasterOp ...................................................................................................................... 18
2. Các góc quay đặc biệt. ................................................................................................. 19
3. Rotate by Shear ............................................................................................................ 19
B. Cải tiến chất lượng ảnh ................................................................................................... 20
1. Bilinear Interpolation ................................................................................................... 20
2. Pixel art Scaling ................................................................................................................... 23
VI. Kết quả đạt được ................................................................................................................. 24
VII. Reference: ........................................................................................................................... 25
I. Nội dung đồ án
Các phép biến đổi hình học thực chất là một ánh xạ đi từ một không gian
vector X vào không gian vector X' (X' có thể lớn hơn, nhỏ hơn hoặc trùng với X).
Trong lĩnh vực đồ hoạ, các phép biến đổi này là nền tảng rất quan trọng cho các
thao tác dựng hình và xử lý ảnh. Chúng cho phép chuyển đối tượng lên màn hình,
hoặc chuyển đổi giữa các góc nhìn khác nhau. Việc hiểu rõ và cài đặt được các
phép biến đổi cơ bản là yêu cầu bắt buộc khi nhập môn đồ hoạ máy tính.
Với những kiến thức đã được trang bị về phép biến đổi Affine cho các đối
tượng trên không gian Euclid 2 chiều. Trong đồ án này nhóm em dự định sẽ mở
rộng tìm hiểu về việc áp dụng các phép biến đổi này lên một đối tượng đặc biệt là
ảnh raster. Đồng thời đi sâu tìm hiểu các phương pháp cải tiến khi cài đặt những
phép biến đổi này để giảm yêu cầu tính toán, tăng độ hiệu quả và chính xác khi xử
lý trên ảnh.
II. Giới thiệu các phép biến đổi Transformation
A. Conformal linear transformation
Giống như tên gọi của nó, conformal linear transformation là họ các phép
biển đổi hình học bảo toàn được góc giữa các đường thẳng trong đối tượng ban
đầu, hệ quả là bảo toàn được hình dáng đối tượng. Điều này cho phép các đối
tượng trước và sau khi biến đổi đồng dạng với nhau. Đây là những phép biến đổi
cơ bản nhất.
1. Tịnh tiến (Translate)
Phép tịnh tiến có tác dụng dời đối tượng đi một đoạn tx theo trục x và một
đoạn ty theo trục y. Nếu tx âm, ảnh sẽ nằm bên trái so với đối tượng ban đầu, ngược
lại nằm bên phải. Nếu ty âm, ảnh sẽ nằm phía dưới hình ban đầu, tuy nhiên, trong
xử lý ảnh, do gốc toạ độ là đỉnh trái trên và trục Oy quay xuống nên ảnh sẽ nằm
bên trên so với hình gốc.
x’ = x + tx
y’ = y + ty
(Xem hình)
2. Đối xứng (Reflection)
Phép đối xứng – hay còn gọi là phép phản chiếu, phản xạ, được chia làm hai
loại là đối xứng điểm và đối xứng trục.
Đối xứng tâm tham số cho phép biến đổi này là một điểm gọi là tâm đối
xứng C(xc, yc). Một điểm sau khi qua phép đối xứng này sẽ tạo với ảnh của nó một
đường thẳng nhận tâm đối xứng làm trung điểm.
x’ = 2xc – x
y’ = 2yc – y
(Xem hình)
Đối xứng trục tham số cho phép biến đổi này là một đường thẳng, được gọi
là trục đối xứng. Một điểm sau khi qua phép đối xứng này tạo với ảnh của nó một
đường thẳng nhận trục đối xứng làm trung trực. Lưu ý, phép đối xứng trục có thể
được dung để định nghĩa đối xứng tâm. Bằng cách lấy 2 lần đối xứng qua 2 trục
vuông góc nhau, ta sẽ thu được ảnh của phép đối xứng tâm với tâm đối xứng là
giao điểm 2 trục đó.
(Xem hình)
3. Quay (Rotate)
Phép quay: Tham số nhận vào cho phép quay là góc quay và tâm quay R(O,
). Điểm A sau khi qua phép biến đổi này tạo thành ảnh A’ sao cho góc AOA’ =
Công thức cho phép quay quanh tâm O là:
x’ = x cos( ) – y sin( )
y’ = x sin( ) + y cos( )
(Xem hình)
4. Tỉ lệ (scale)
Phép tỉ lệ: Nhận vào tham số là hai hệ số tỉ lệ (Scalar) S(sx, sy). Đối tượng A
qua phép biến đổi này thành đối tượng A’ đồng dạng với đối tượng ban đầu. Nếu
hệ số tỉ lệ >1, kích thước đối tượng A’ sẽ lớn hơn kích thước đối tượng A và ngược
lại.
x’ = x sx
y’ = y sy
(Xem hình)
B. Affine transformation
Họ phép biến đổi affine biến đường thẳng thành đường thẳng, biến hai
đường song song thành hai đường song song, nhưng không bảo toàn góc giữa các
đường thẳng và đặc biệt là các phép biến đổi trong họ các phép biến đổi affine có
thể được kết hợp với nhau mà vẫn đảm bảo được các tính chất trên. Các phép biến
đổi conformal cũng là một dạng biến đổi affine, ngoài ra, ta còn có phép shear:
1. Shear
Phép shear (nghiêng) nhận vào hai tham số chính là trục nghiêng và mức độ
nghiêng. Những điểm nằm trên trục nghiêng sẽ bị giữ nguyên, trong khi đó những
điểm nằm bên ngoài sẽ bị dời đi theo phương song song với trục nghiêng một
khoảng tuyến tính với khoảng cách từ điểm đó đến trục nghiêng. Trường hợp trục
nghiêng trùng với trục tọa độ, phép nghiêng có thể được biểu diễn bằng công thức:
x’ = x + y*shx
y’ = x*shy + y
(Xem hình)
C. Các phép biển đổi chưa học
1. Projective Transform
Projective Transform không phải là một phép biến đổi tuyến tính, do nó
không bảo toàn tính song song của hai đường thẳng. Tuy nhiên chúng ta có thể biểu
diễn phép biến đổi này bằng cách sử dụng ma trận đồng nhất tương tự như với các
phép biến đổi affine (sẽ nói ở phần sau)
Công thức:
x' = (a*x + b*y + c) / (g*x + h*y + 1)
y' = (d*x + e*y + f) / (g*x + h*y + 1)
III. Cách biến đổi ảnh
Một file ảnh được lưu trữ trong máy như là mảng các pixel. Mỗi pixel này có
thể thay đổi về màu sắc nhưng không thể bị chia nhỏ, và không thể bị biến dạng. Vì
thế khi thực hiện các phép biến đổi lên ảnh raster, ta phải có biện pháp thích hợp để
chỉ định màu của các pixel nhằm thể hiện được ảnh sau khi biến đổi.d
A. Các phép biến đổi conformal
1. Phép tịnh tiến và phép đối xứng.
Đây là hai phép biến đổi tương đối đơn giản, có thể được cài đặt in-place.
Nghĩa là chúng ta có thể tạo ra ảnh sau khi biến đổi bằng cách thay đổi trực tiếp lên
ảnh ban đầu mà không cần phải tạo một ảnh mới. Và hai phép biến đổi này không
làm thay đổi chất lượng của ảnh.
Để thực hiện các thao tác biến đổi này chúng ta chỉ cần sao chép toàn bộ
pixel trong hình ban đầu sang vị trí thích hợp trong hình kết quả. Với phép tịnh
tiến, thao tác là:
Phép đối xứng:
2. Phéo quay
Vấn đề với phép xoay ảnh không đơn giản như với phép tịnh tiến hay đối
xứng. Một pixel tại vị trí(x,y) sau khi qua phép xoay sẽ chuyển thành một pixel tại
vị (x',y') với x', y' là các số thực. Chúng ta không thể giải quyết đơn giản bằng
1. Với mỗi pixel (x, y) trong hình ban đầu:
2. x’ = -x + Tx, y’ = -y +Ty
3. Nếu Pixel (x’, y’) nằm trong hình kết quả:
4. Gán màu pixel (x’, y’) bằng màu của pixel (x, y)
1. Với mỗi pixel (x, y) trong hình ban đầu:
2. x’ = x + Tx, y’ = y +Ty
3. Nếu Pixel (x’, y’) nằm trong hình kết quả:
4. Gán màu pixel (x’, y’) bằng màu của pixel (x, y)
cách làm tròn hai số x’ và y’. Vì tại một điểm (x, y) nào đó ta sẽ gặp trường hợp
ảnh của điểm (x, y) và ảnh của điểm (x + 1, y) là hai điểm không liền kề nhau. Góc
quay càng lớn thì xác suất này càng lớn (xem hình dưới)
(Ảnh bị lỗi khi xoay 1 góc 45 độ)
Để giải quyết trường hợp này ta phải thực hiện một thao tác ngược như sau:
3. Phép tỉ lệ
Cũng giống như với phép quay, phép tỉ lệ không thể được thực hiện bằng
thao tác copy từng pixel trong hình gốc sang hình kết quả. Do tùy thuộc vào hệ số
tỉ lệ, ảnh kết quả có thể chứa nhiều pixel hơn ảnh gốc, vì vậy ta phải thực hiện thao
1.Với mỗi pixel (x, y) trong hình kết quả
2. Ta xoay pixel đó một góc – để.
3. Làm tròn kết quả phép xoay ta thu được (x’, y’)
4. Ta gán màu của pixel (x, y) bằng màu của pixel (x’, y’)
tác lấy mẫu (sampling)
B. Affine
1. Biểu diễ bằng ma trận
Những thao tác biến đổi affine đều là những phép biến đổi tuyến tính. Các
công thức biểu diễn là những hàm tuyến tính theo x và y vì thế chúng có thể được
biểu diễn bằng ma trận 2 dòng, 2 cột.
Lúc đó công thức cho các phép biến đổi là:
Rotate:
Scale:
Shear:
Tuy nhiên, có một vấn đề nhỏ là cách biểu diễn bằng ma trận 2x2 gặp khó
khăn trong việc biểu diễn phép tịnh tiến. Do vế phải của hệ phương trình tuyến tính
được dành cho x’ và y’ nên ta không biểu diễn được hệ số tự do trong phép tịnh
tiến. Để khắc phục trường hợp này ta sử dụng hệ tọa độ đồng nhất (u, v, w) để biểu
diễn một điểm. Điều này cho phép ta sử dụng ma trận 3x3 cho việc biểu diễn phép
biến đổi.
Tọa độ thật của pixel sẽ được quy ra từ hệ tọa độ đồng nhất bằng công thức
x = u / w
1.Với mỗi pixel (x, y) trong hình kết quả
2. x’ = x / Sx , y’ = y / Sy
3. Làm tròn x’ và y’
4. Gán màu của Pixel (x, y)’ bằng màu của Pixel (x’, y’)
y = v / w
Khi đó công thức cho các phép biểu diễn cụ thể là:
Tịnh tiến:
Đối xứng tâm:
Phép xoay:
Phép nghiêng (shear)
Phép tỷ lệ:
Việc sử dụng ma trận 3x3 trong khi các phép biến đổi affine chỉ chịu ảnh
hưởng của tối đa 6 hệ số có thể xem là sự lãng phí về mặt nào đó. Tuy nhiên ta
được một lợi ích khác là có thể kết hợp nhiều phép biển đổi vào một ma trận duy
nhất nhờ vào phép nhân ma rận
2. Kết hợp
Giả sử ta cần thực hiện ba phép biến đổi tuyến tính liên tiếp A, B, C lên điểm
P(x, y). Nếu thực hiện theo tuần tự ta sẽ tìm ảnh P' theo công thức:
Q = A * P
R = B * Q
P' = C * R
Viết gọn công thức trên ta được:
P' = C * (B * (A * P)) = (C * B * A) * P
Từ công thức trên, ta thấy nếu đặt T = C * B * A ta sẽ có T là phép biến đổi
kết hợp tuần tự của ba phép biến đổi A, B, C.
Sự kết hợp này có thể được mở rộng ra cho n phép biến đổi liên tiếp (miễn
tất các phép biến đổi đó đều là tuyến tính).
Các thao tác biến đổi biến đổi ảnh đòi hỏi ta phải thực hiện phép nhân ma
trận cho từng pixel, vì thế việc kết hợp nhiều phép biến đổi vào một ma trận duy
nhất cho phép giảm số phép tính phức tạp này xuống và tăng tốc độ thực thi lên
nhiều lần.
3. Cài đặt đối với ảnh:
Do phép biến đổi affine bao gồm hai phép biến đổi là scale và rotate nên ta
cũng gặp phải vấn đề tương tự đó là không thể cài đặt các phép biến đổi affine
bằng cách sao chép pixel đơn thuần. Thay vào đó ta phải thực hiện lấy mẫu từ mỗi
pixel trong ảnh kết quả đến ảnh ban đầu:
4. Perspective transformation
Perspective transform cho phép tạo hiệu ứng khi nhìn một đối tượng thực tế
ở khoảng cách xa. Đây không phải là một phép biến đổi tuyến tính như các phép
biến đổi affine vì trong công thức của chúng có yêu cầu phép chia giữa x và y. Tuy
nhiên phép biến đổi này cũng có thể được biểu diễn bằng ma trận 3x3 và hệ toạ độ
đồng nhất:
Với mỗi pixel (x, y) trong ảnh kết quả:
1. Tìm ma trận nghịch đảo của ma trận biến đổi
2. Nhân ma trận đảo với toạ độ đồng nhất (x, y, 1) ta thu được (u, v, w)
3. Tìm toạ độ pixel (x', y') trong hình gốc tương ứng với (u, v, w)
4. Gán màu của pixel (x, y) bằng màu của pixel (x', y')
Phép chia trong công thức khiến phép biến đổi perspective phức tạp hơn
trong tính toán mất đi tính chất tuyến tính và không thể kết hợp với các phép biến
đổi khác
IV. Thiết kế cài đăt:
Chương trình được xây dựng trên ngôn ngữ Python, cùng sự hỗ trợ của thư
viện xử lý hình ảnh ( Python Image Library - PIL ).Sự hỗ trợ này giúp cho người
lập trình có thể thuận tiện hơn trong việc thao tác trên các công việc có liên quan
đến xử lý hình ảnh và đồ họa. Được thiết kế tối ưu cho việc truy xuất và lưu trữ ảnh
cùng khả năng xử lý mạnh mẽ của bộ thư viện là một lý do được nhiều nhà lập
trình sử dụng đến.. Đây chắc chắn là một công cụ không thể thiếu cho những ai
quan tâm đến lĩnh vực lập trình nên những chương trình có tương tác với ảnh.số.
Cấu trúc của chương trình được thiết kế theo sơ đồ sau:
Theo sơ đồ trên, ta có thể thấy được cấu trúc để xây dựng nên chương trình
bao gồm:
Application
mainGUI
Matrix Convert
Math PIL
Python
Image
Class Matrix: đây là một class dùng để tính toán các biến đổi của các phép
Transform trong chương trình dựa trên nền tảng ma trận, được sự hỗ trợ từ thư viện
Math sẵn có của Python, việc xây dựng nên một lớp Matrix như thế này giúp thuận
lợi trong việc tính toán các phép tính phức tạp.
Class Convert và Image: mục đích của việc xây dựng nên class này là giúp
người lập trình thuận tiện trong việt chuyển đổi qua lại giữa các địng dạng ảnh cần
thiết, cũng như các thao tác ảnh trên pixel đối với Python.
Sự kết hợp giữa các class này giúp cho người lập trình được thuận tiện hơn
trong việc thực hiện mô phỏng các phép biến đổi dựa trên các phép toán ma trận.
Từ đó class mainGUI được tạo dựng nên để mô phỏng các phép biến đổi này.
V. Các phương pháp cải tiến
A. Cải tiến tốc độ:
1. RasterOp
Cải tiến tộc độ thực thi:
Raster operation là thuật ngữ chỉ thao tác copy pixel qua lại giữa hai ảnh.
Thao tác này được sử dụng phổ biến trong việc sao chép ảnh giữa hai vùng nhớ, ví
dụ như từ bộ nhớ chính sang bộ nhớ đồ họa.
Đây là thao tác rất quan trọng trong đồ họa, cài đặt tốt thao tác này có thể
cho phép các hệ thống đồ họa hoạt động với thời gian thực. Để tối ưu về tốc độ,
thao tác này thường được cài đặt bằng cách tận dụng các tập lệnh có sẵn trong bộ
xử lý. Theo cuốn New Hacker's Dictionary (1991, MIT Press) của tác giả Eric
Raymond, siêu máy tính PDP-101 đã hỗ trợ một tập lệnh BLT (BLock Transfer)
cho phép di chuyển một khối dữ liệu trong bộ nhớ. Giả sử ảnh của ta được biểu
diễn bằng một mảng dữ liệu, bao gồm nhiều hàng pixel nằm nối tiếp nhau. Nếu ta
muốn copy một phần của ảnh gốc trên máy này, thao tác rasterOp sẽ bao gồm việc
copy từng dãy con trong mảng. Đến những năm 1970, tại hãng Xerox Parc, Dan
Ingalls phát triển thao tác rasterOp có thể copy trực tiếp một mảng con của mảng
hai chiều. Thao tác này được sử dụng trong việc hiển thị fonts bitmap trên máy
Alto, và được gọi là Bitblt (Bit Block Transfer)
Ngày nay hầu hết hệ thống máy tính đều cung cấp công cụ hỗ trợ thao tác
rasterOp. Một số thao tác rasterOp có thể được cài đặt in-place, khi mà vùng nhớ
của ảnh nguồn và ảnh gốc chồng lên nhau. Trong trường hợp đó, các pixel cần
được copy theo một thứ tự đặc biệt để pixel đầu tiên không bị ghi chồng lên pixel
1 The PDP-10 là máy chủ sản xuất bỡi hảng Digital Equipment Corporation (DEC) cuối
thập niên 1960s; PDP là viết tắt của "Programmed Data Processor model 10" đây là máy tính góp
phần đưa time-sharing trở nên phổ biến
chưa được copy
Với thao tác rasterOp ta có thể cài đặt tất cả thao tác biến đổi affine (ngoại
trừ phép tỉ lệ). Rõ ràng nhất là với phép tịnh tiến, vấn đề là di chuyển toàn bộ pixel
trong hình gốc sang vị trí thích hợp trong hình nền. Với phép đối xứng trục ta cần
dời từng hàng pixel đến vị trí đối xứng của chúng. Với phép shear là thao tác dời
từng hàng pixel đi một khoảng cách tương ứng. Và phép quay có thể được cài đặt
bằng cách sử dụng ba phép shear (xem phần rotate by shear)
Do được hỗ trợ sẵn từ phần cứng, các thao tác rasterOp có thể giúp cải tiến
đáng kể tốc độ thực thi của những phép biến đổi
2. Các góc quay đặc biệt.
Các góc quay α mà tại đó giá trị sin(α) và cos(α) nằm trong tập hợp {-1, 0,
1} là các góc đặc biệt mà khi quay ta không cần tiến hành phép làm tròn số. Các
phép quay này có thể được thực hiện bằng thao tác rasterOp để tăng tốc độ thực thi
cũng như độ chính xác
3. Rotate by Shear
Ba phép shear liên tiếp có thể được điều chỉnh để xoay ảnh raster đi một góc
bất kỳ.
Do phép shear có thể được cài đặt bằng thao tác rasterOp như đã đề cập ở
trên, việc dùng phép shear để xoay ảnh có thể cải thiện đáng kể tốc độ thực hiện
phép xoay.
Nếu như phép xoay có góc quay α nhỏ, ta có thể chỉ cần thực hiện 2 phép
shear cũgn đảm bảo gần đúng kết quả xoay. Khi thực hiện 2 phép shear, tỷ số giữa
chiều dài và chiều rộng hình sẽ bị lệch so với kết quả chuản một lượng . Nếu α <
0.05 radiant sai số này là hoàn toàn chấp nhận được.
Điểm đặc biệc thú vị là do được cài đặt bằng rasterOp, Rotate by shear đảm
bảo một ánh xạ 1 – 1 giữa từ ảnh nguồn sang ảnh kết quả, vì thế nếu hình ảnh bị sai
lệch do thực hiện liên tiếp quá nhiều phép biến đổi này, ta có thể thu lại hình ban
đầu bằng cách thực hiện lại phép biến đổi với α = - α
Với góc quay α nằm trong khoảng [-45o, 45
o] thứ tự 3 phép quay lần lượt sẽ
là:
Shy = α /2
Shx = arctg(sin(α))
Shy = α/2
Nếu góc quay α nằm ngoài khoảng [-45o, 45
o] Ta có thể biến đổi góc quay
bằng các tiến hành quay với một hướng ngược lại theo một góc vuông.
B. Cải tiến chất lượng ảnh
1. Bilinear Interpolation
Một tác động ngoài ý muốn của các phép biến đổi affine là tạo ra răng cưa
trên ảnh. Như ta đã biết do được biểu diễn bằng các pixel với tọa độ là số nguyên,
mọi đường thẳng không song song với các cạnh màn hình khi hiển thị đều tạo cảm
giác răng cưa
(Ảnh bị răng cưa sau khi shear)
Qua phép biến đổi affine các răng cưa này có thể tăng thêm. Phép shear và
rotate có thể biến những đường thẳng song song với cạnh màn hình thành các
đường xiên, và phép scale sẽ phóng to các răng cưa có sẵn trong ảnh. Để giải quyết
vấn đề này chúng ta sử dụng kỹ thuật nôi suy (Interpolation) thay cho việc lấy mẫu
khi xác định màu của các pixel trong ảnh kết quả.
(Ảnh có sử dụng interpolation)
Giả sử ta có thể chia mỗi pixel ra thành N*N thành phần đơn nguyên nhỏ,
với toạ độ của pixel chính là toạ độ của thành phần đơn nguyên đầu tiên. Như vậy
sau khi tìm được toạ độ (x', y') của pixel ban đầu, rất nhiều khả năng pixel (x', y')
này sẽ nằm đè lên 4 pixel thật trong ảnh gốc (xem hình)
(hình mô tả các pixel trong bilinear)
Chúng ta có x và y là khoảng cách từ pixel (x', y') đến toạ thật của pixel (i, j)
tương ứng trong phương pháp sampling. Gọi fi,j là màu (i, j) Chúng ta sẽ tìm cách
xác định màu cho pixel (x', y') này dựa vào 4 pixel fi,j, fi,j+1, fi+1,j, fi+1,j+1 theo công
thức:
Số N có thể được chọn tùy ý, N lớn sẽ làm tăng chất lượng hình nhưng
không đáng kể. Thông thường N sẽ được chọn là bội số của 2 để có thể tận dụng
các phép toán trên bit thay cho phép chia vốn yêu cầu tính toán cao hơn.
Phương pháp bilinear Interpolation cải thiện rõ rệt chất lượng ảnh sau khi
biến đổi. Ngoài ra chúng ta có thể sử dụng một số biện pháp nội suy khác như
Bicubic Interpolation. Tuy nhiên một nhược điểm của các phương pháp nội suy đó
là chúng khử răng cưa bằng cách làm mờ đi các đường biên trong ảnh để mắt người
không thể nhận biết được các răng cưa tại khu vực đó. Điều này làm giảm độ tương
phản giữa các vùng và trong một số trường hợp, làm ảnh bị nhoè đi.
Nếu yêu cầu là phải scale những hình ảnh đơn giản, ảnh gồm nhiều mảng màu liên tục,
có ít gradient hay độ sâu màu thấp, ta có thể áp dụng một hướng tiếp cận khác là Pixel art Scaling
2. Pixel art Scaling
Pixel art Scaling là thao tác phóng lớn những hình ảnh đơn giản với độ phân giải thấp và
chứa nhiều khối màu đặc. Các thuật toán này thường không áp dụng được cho ảnh chụp vì
chúng chứa quá nhiều vùng được với sắc màu có gradient và đổ bóng.
Các phương pháp nội suy màu tạo ra những vùng mờ tại vị trí đường biên của các đối
tượng trong ảnh. Đối với ảnh có độ phân giải nhỏ, những vùng mờ này có thể phủ lấp bề mặt của
các đối tượng trong ảnh làm toàn bộ ảnh bị nhoè đi. Phương pháp lấy mẫu tuy không làm nhoè
ảnh nhưng lại tạo ra răng cưa điều này làm nảy sinh nhu cầu cho một thuật toán khác tốt hơn.
Ngày nay những thuật toán pixel art Scaling thường được dùng để phóng lớn hình ảnh
của những trò chơi điện tử cũ đến một độ phân giải có thể chấp nhận được trên các máy tính hiện
đại. Hầu hết những thuật toán này bị giới hạn ở một tỉ lệ phóng nhất định, bù lại chúng rất hiệu
quả về mặt độ phức tạp tính toán, đảm bảo có thể chạy real-time để phục vụ cho game.
Nhìn chung Các thuật toán này không tiến hành lấy trung bình màu như phương pháp
nội suy, nhưng cũng không gán thẳng màu của pixel gốc cho pixel sau khi phóng to như phương
pháp lấy mẫu. Sau khi tìm được pixel gốc tương tự như trong phương pháp lấy mẫu, chúng sẽ
xét 8 pixel lân cận của pixel gốc và tùy trường hợp cụ thể mà gán màu của pixel sau biến đồi
bằng với màu của 1 trong số 9 pixel này. Một số thuật toán nổi tiếng nhất trong phương pháp này
là hqx2 và scale2x / scale3x
3
2 Hqx: hq là viết tắt của high quality, x là ký hiệu của việc phóng lớn. Thuật toán do Maxim Stepin phát
triển, có 3 phiên bản cho 3 tỉ lệ phóng 2x, 3x và 4x dùng trong các chương trình giả lập máy chơi game: Nestopia,
bsnes, ZSNES…
3 Được phát triển cho dự án AdvanceMAME (http://advancemame.sourceforge.net/) vào năm 2001, scale2x
là một thuận toán pixel art scaling mã nguồn mở phát hành dưới giấy phép GPL. Thuật toán có bản mở rộng cho tỉ lệ
phóng to 3x ngoài ra còn có scale4x vốn là thuật toán scale2x được chạy 2 lần liên tiếp.
VI. Kết quả đạt được
Như vậy, về cơ bản, sau quá trình tìm hiểu, nhóm cơ bản nắm vững các kỹ
thuật cần thiết để áp dụng các phép biến đổi affine lên ảnh. Có thể áp dụng được tất
cả các phép biến đổi, đồng thời xây dựng được giao diện trực quan cho phép người
dùng nhập các thông số cho phép biến đổi mà chương trình demo sẽ thực hiện.
Cài đặt được thuật toán bilinear Interpolation để cải thiện chất lượng ảnh sau
khi biến đổi khá tốt.
Tuy nhiên vẫn còn điểm có thể cải thiện được trong chương trình như việc
thoát khoải sự lệ thuộc vào thư viện có sẵn trong việc mở, tạo và lưu file ảnh.
Nếu có thể tự thao tác trực tiếp lên file ảnh trên đĩa cứng, chúng ta có thể sử
dụng các lời gọi hàm hệ thống để truy cập vào tập lệnh hỗ trợ đồ hoạ của CPU,
hoặc tốt hơn nữa là dùng GPU để tăng hiệu năng của chương trình.
Còn nhiều thuật toán cải thiện chất lượng ảnh khác mà nhóm đã tìm hiểu qua
nhưng không kịp có thời gian đi sâu như sharpen, bicubic interpolation, v.v...
VII. Reference:
1 – Leptonica website
2 - Alan Paeth, “A Fast Algorithm for General Raster Rotation”, graphic
Gems, p179, Academic Press, 1990