25
Báo cáo đồ án môn hc Đồ homáy tính Áp dng các phép biến đổi affine lên nh raster Giảng viên hướng dn: ThS. Tr nh Quốc Sơn Thc hi n: Ph m nguy ễn Trường An 07520004 Quách Hồng Đức 07520092

CG ImageProcessing

  • Upload
    dao-uit

  • View
    49

  • Download
    4

Embed Size (px)

Citation preview

Page 1: CG ImageProcessing

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

Page 2: CG ImageProcessing

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

Page 3: CG ImageProcessing

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.

Page 4: CG ImageProcessing

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

Page 5: CG ImageProcessing

(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)

Page 6: CG ImageProcessing

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

Page 7: CG ImageProcessing

(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

Page 8: CG ImageProcessing

(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)

Page 9: CG ImageProcessing
Page 10: CG ImageProcessing

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)

Page 11: CG ImageProcessing

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’)

Page 12: CG ImageProcessing

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’)

Page 13: CG ImageProcessing

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

Page 14: CG ImageProcessing

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')

Page 15: CG ImageProcessing

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

Page 16: CG ImageProcessing

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

Page 17: CG ImageProcessing

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.

Page 18: CG ImageProcessing

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

Page 19: CG ImageProcessing

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 α = - α

Page 20: CG ImageProcessing

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

Page 21: CG ImageProcessing

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)

Page 22: CG ImageProcessing

(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

Page 23: CG ImageProcessing

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.

Page 24: CG ImageProcessing

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...

Page 25: CG ImageProcessing

VII. Reference:

1 – Leptonica website

2 - Alan Paeth, “A Fast Algorithm for General Raster Rotation”, graphic

Gems, p179, Academic Press, 1990