You are on page 1of 12

ĐẠI HỌC QUỐC GIA HÀ NỘI

TRƯỜNG ĐẠI HỌC CÔNG NGHỆ


***

BÁO CÁO THU HOẠCH HỌC PHẦN


Kỹ thuật xử lý và truyền thông đa phương tiện.

Đề tài: Nghiên cứu và ứng dụng thuật toán Autofocus.

Giảng viên hướng dẫn:


TS. Đinh Triều Dương

Sinh viên thực hiện:


Trần Hiếu Minh – 20020172
Lê Đức Minh – 20020693
Lê Tuấn Minh – 20020694
Phạm Tường Minh – 21020145
Đỗ Hoàng Nam – 21020930

Hà Nội – 2023
MỤC LỤC

I. Tóm tắt .............................................................................................................................4

II. Giới thiệu ....................................................................................................................... 4

III. Phương pháp luận ....................................................................................................... 4

1) Thuật toán autofocus ......................................................................................................4

2) Thuật toán auto white balance ....................................................................................... 8

IV. Thảo luận ....................................................................................................................10

V. Kết luận ........................................................................................................................ 13

VI. Phụ lục ........................................................................................................................ 13

1) Tài liệu tham khảo ....................................................................................................... 13

2) Đóng góp của các thành viên .......................................................................................13

3) Mã nguồn ..................................................................................................................... 13

3
I. Tóm tắt
Nghiên cứu này tập trung vào đề tài thuật toán tự động lấy nét, một lĩnh vực quan
trọng trong xử lý ảnh và quản lý hệ thống quan sát. Từ việc phát hiện cạnh cho đến các
bước làm mịn, lọc ngưỡng, và xác định đối tượng, nhóm tiếp cận một cách có hệ thống
để hiểu rõ quá trình phức tạp của thuật toán lấy nét tự động.

Những ưu điểm và nhược điểm được đề cập trong bài báo cáo kết quả nghiên cứu
này đưa ra cái nhìn toàn diện về khả năng và hạn chế của các thuật toán lấy nét được áp
dụng. Nhóm đã cân nhắc giữa các yếu tố phù hợp để hoàn thành công việc với kết quả
khả quan nhất trong năng lực.

II. Giới thiệu


Trong thời đại ngày nay, công nghệ xử lý ảnh ngày càng trở nên quan trọng, đặc
biệt là trong lĩnh vực tự động hóa và quản lý hệ thống quan sát. Một yếu tố quan trọng
đối với việc thu thập thông tin chính xác là khả năng lấy nét tự động, và phần nghiên cứu
này tập trung vào việc hiểu rõ cơ chế và thuật toán liên quan đến nó.

Luồng làm việc của nhóm có hệ thống, từ các bước xác định mục tiêu đề bài, tìm
hiểu các công nghệ liên quan cần thiết, phân chia công việc theo từng mục tiêu nhỏ, kết
quả đạt được đã phần nào mô phỏng tính chất của các thuật toán Autofocus.

Những thuật toán này mang lại những ưu điểm lớn như độ chính xác cao và tốc độ
nhanh, nhưng đồng thời chúng cũng đối mặt với những thách thức như độ nhạy cảm với
nhiễu và sự phức tạp tính toán. Bằng cách tập trung vào những khía cạnh này, nhóm hy
vọng phần nghiên cứu này sẽ giúp các thành viên thêm hiểu biết và mở rộng kiến thức
của bản thân về công nghệ tự động lấy nét trong các ứng dụng thực tế.

III. Phương pháp luận


1) Thuật toán autofocus
Với đề tài tìm hiểu và phát triển thuật toán Autofocus cho thiết bị di động, nhóm đã
phân tích và chia thành các bước tiếp cận, đầu tiên là với phân tích bài toán. Xác định
được dữ liệu đầu vào từ camera gồm nhiều frame, và kết quả đầu ra cũng gồm nhiều
frame, nhóm đã đặt ra bài toán xử lý đa phương tiện quy mô nhỏ hơn: nhận và xử lý một
frame (hay còn được coi là một image).

Để bắt đầu áp dụng các thuật toán xử lý trực tiếp trên ảnh, không thể không nói đến
các phép tích chập trên miền không gian. Tích chập (Convolution) là phương pháp
thường được dùng để xử lý các tín hiệu, và ảnh kỹ thuật số có thể được coi là một tín
hiệu hai chiều. Trong toán học và đặc biệt là trong giải tích hàm, tích chập là 1 phép toán
thực hiện đối với 2 hàm số f và g, kết quả cho ra 1 hàm số thứ 3:

Ảnh: Convolution function

Công thức tích chập giữa ảnh f(x,y) và kenel k(x,y) kích thước mxn:
�/2 �/2
k(x, y) * f(x,y) = �=−�/2 �=−�/2
�(�, �) ∗ �(� − �, � − �)
4
Phép tích chập được thực hiện bằng cách lật ma trận kenel hai lần theo chiều ngang
và dọc sau đó dịch chuyển ma trận kenel lần lượt qua các điểm ảnh trong ảnh bắt đầu từ
góc trên bên trái. Thông thường tâm của kenel đặt tại điểm ảnh đang xét. Ở mỗi lần dịch
chuyển ta thực hiện việc tính toán giá trị mới cho điểm đang xét bằng cách tính tổng các
tích của hai phần tử cùng vị trí trên ma trận và ảnh.

Mask, hay còn gọi là Kernel, cũng là một tín hiệu, được biểu diễn bằng một ma
trận vuông có độ dài cạnh là số lẻ (ví dụ như 1x1, 3x3, 5x5…) nhằm mục đích tìm được
điểm trung tâm của ma trận. Nó được sử dụng với nhiều mục đích khi xử lý ảnh trên
miền không gian như Smoothing, Blurring, Sharpening, …Quá trình áp dụng Mask lên
ảnh qua phép tích chập, ta thêm những giá trị của các pixel xung quanh lên pixel đang
được xử lý, với các trọng số được xác định bởi ma trận Kernel. Nói một cách đơn giản
hơn, ta trượt ma trận kernel qua ảnh với padding phù hợp (thường là zero padding), với
mỗi pixel đầu ra là giá trị hàm của giá trị các pixel lân cận đầu vào (bao gồm chính nó),
và hàm này chính là kernel.

Ta có đoạn mã giả mô phỏng logic khi áp dụng phép nhân chập:

Ảnh: Pseudo-code snippet

Có ý tưởng về sử dụng convolution trên miền không gian của ảnh, nhóm bắt tay
vào thực hiện các thao tác xử lý ảnh. Bắt đầu với việc áp dụng một kernel tăng độ sắc
cạnh lên ảnh bằng tích chập như sau.

Ở bước tiền xử lý, nhóm đưa ảnh về đúng với dạng đầu vào cần thiết, một ma trận
hai chiều, đồng nghĩa với việc cần loại bỏ thông tin kênh màu RGB bằng cách chuyển
màu sang kênh xám. Phép chuyển này được thực hiện trong chương trình bằng cách lấy
tích vô hướng của ma trận ảnh với ma trận tỷ lệ màu dựa trên khuyến nghị của IUTR.
Giá trị đó như sau:
Y’ = 0.299R’ + 0.587G’ + 0.114B’

0 −1 0
Sau đó ta áp dụng một kernel 3x3 với giá trị −1 5 −1 lên ảnh đầu ra. Song
0 −1 0
song với đó là việc zero padding và threshold các giá trị điểm ảnh từ 0 đến 255 cho phù
hợp với định dạng 8-bit, quá trình này còn được gọi là chuẩn hóa (normalization). Việc
chuẩn hóa này vừa giúp bảo toàn thông tin của hình ảnh, đồng thời mang đến hiệu ứng
thị giác chân thật hơn. Quá trình hậu xử lý ảnh đầu ra dựa trên đánh giá thủ công của các
thành viên trong nhóm, hậu kỳ bao gồm viêc tinh chỉnh các trọng số và kích thước của
kernel để đem lại kết quả tốt nhất trên nhóm ảnh được thử nghiệm.

5
Dựa vào kết quả đạt được, nhóm bắt đầu tiến hành bước tiếp theo, giới hạn vùng
được xác định để tăng cường chất lượng. Cụ thể, ý tưởng được đưa ra là sử dụng các
biện pháp xử lý ảnh để khoanh vùng được vật thể trong hình. Các phương pháp được đưa
ra gồm Support Vector Machine, Ray Tracing… nhưng trong tầm giới hạn về công cụ,
thời gian và năng lực của các thành viên trong nhóm, giải pháp được sử dụng là áp dụng
các thuật toán tìm cạnh để có được sơ đồ cạnh (Edge map) của hình ảnh. Giải pháp này
vừa tận dụng được các hàm tích chập được xây dựng từ trước, vừa là cơ hội cho các
thành viên vận dụng những kiến thức đã học trên lớp về bộ lọc Sobel.

Để nói về kỹ thuật này, ta cần phải định nghĩa rõ, cạnh (Edge) trên ảnh kỹ thuật số
là gì. Một cách trực quan về mặt thị giác, cạnh của vật thể trong ảnh là nơi mà giá trị các
điểm ảnh có sự thay đổi đột ngột. Tập hợp các điểm ảnh như vậy thường mang ý nghĩa
liên quan đến hình dạng, cấu trúc của đối tượng trong ảnh, chẳng hạn như đường bao,
đường viền hay sự thay đổi độ sáng, màu sắc. Khi cần tính toán liên quan đến sự thay đổi
đột ngột, ta sử dụng đến Gradient, các giá trị mà tại đó có sự thay đổi đột ngột ta có thể
coi là một điểm cực tiểu địa phương và cần xác định bằng cách tính đạo hàm.

Phương pháp này còn gọi là First-order Method vì cần tính đạo hàm bậc nhất của
hàm, tuy nhiên, để giảm độ phức tạp tính toán, ta có thể xấp xỉ đạo hàm theo định nghĩa
với hàm rời rạc,
��(�, �)
= � � + 1, � − �(�, �) (tương tự với trục Oy)
��

Và thay vì duyệt từng điểm ảnh để tính xấp xỉ đạo hàm một cách thủ công, nhóm
tận dụng hàm tích chập đã được xây dựng trước đó. Mã nguồn sử dụng một kernel Sobel
−1 0 1
3x3 truyền thống với kernel cho trục Ox −2 0 2 và kernel cho trục Oy = OTx.
−1 0 1

� � �
Đơn giản hóa bài toán bằng một ma trận ảnh xám 3x3 tương đương � � �
� ℎ �
xét giá trị của điểm ảnh tại vị trí e khi áp dụng tích chập với kernel Sobel theo trục Ox, ta
có:
G(e) = (-1 ⋅ a) + (0 ⋅ b) + (1 ⋅ c) + (-2 ⋅ d) + (0 ⋅ e) + (2 ⋅ f) + (-1 ⋅ g) + (0 ⋅ h) + (1 ⋅ i)

Rút gọn biểu thức ta thu được:


G(e) = (c - a) + 2(f - d) + (i - g)

Chính là kết quả xấp xỉ đạo hàm theo trục Ox như đã nói trước đó, hay nói cách
khác đây chính là giá trị gradient. Về lý thuyết, kernel Sobel có thể hoạt động với chỉ giá
trị 1 và -1, nhưng giá trị 2 và -2 được đưa vào để làm mượt cũng như tăng trọng số cho
điểm ảnh trung tâm, cũng là điểm ảnh quan trọng nhất. Sau khi tính Sobel cho từng trục,
ta chỉ cần tính giá trị căn bậc hai của bình phương Gx và bình phương Gy để cho ra kết
quả Edge map cuối cùng.
2
�= �(�)2 + �(�)2

Tuy nhiên, kết quả thu được bị nhiễu nặng và có chất lượng kém, nên nhóm đã
tìm một số phương án khắc phục. Đầu tiên là giảm nhiễu tại ảnh gốc, ở đây nhóm cũng
6
tận dụng hàm tích chập để áp dụng các phương pháp Smoothing để làm mịn ảnh. Mục
đích của việc này nhằm hòa các nét viền và cạnh ở hậu cảnh, giúp các cạnh của vật thể
tiền cảnh trở nên bật hơn. Có nhiều cách khác nhau để áp dụng phương pháp này, nhóm
đã thử nghiệm và rút ra một số nhận xét.

Đầu tiên là sử dụng một kernel có kích thước 3x3, phủ bởi giá trị 1/9, hay còn biết
đến là Averaging Filter, cách tiếp cận đơn giản, nhưng hiệu quả đầu ra vô cùng bé nhỏ,
không phù hợp với mong muốn của nhóm.

Nhóm cũng thử mô phỏng hàm Blur trong thư viện OpenCV bằng cách tính tích
chập ảnh với một 3x3 kernel được phủ giá trị 1, thu được kết quả khá tốt khi các yếu tố
hậu cảnh có độ tương phản cao, nhưng chưa đạt được đến kết quả nhóm mong muốn.

Phương án cuối cùng bị loại bỏ là sử dụng Median Blur, do phương pháp này sử
dụng các giá trị mean để weight giá trị của điểm ảnh cần được xử lý, nó có hiệu quả tốt
với các loại nhiễu hạt, nhiễu muối tiêu, nhưng không đủ bao quát các trường hợp nhóm
đang sử dụng.

Qua quá trình tìm hiểu kỹ càng, nhóm đã quyết định sử dụng Gaussian blur. Xét
trên miền tần số thì bộ lọc Gaussian sẽ loại bớt các thành phần có tần số cao và giữ là
thành phần có tần số thấp. Trong đó x và y là tọa độ theo hai trục đứng và ngang còn σ là
phương sai chuẩn của phân bố Gaussian hay là giá trị quyết định độ lệch giữa các điểm
trên bề mặt Gaussian. Trong phân bố Gaussian chuẩn thì giá trị kỳ vọng μ =0. Giá trị
mới của mỗi điểm ảnh sau khi tính tích chập với nhân đại diện cho hàm Gaussian có thể
coi là trung bình lượng giá trị của các điểm ảnh xung quanh nó. Ta thấy rằng giá trị
lượng giá của phần tử trung tâm kernel tương ứng với điểm ảnh đang xét là lớn nhất, giá
trị này sẽ nhỏ hơn đối với các phần tử tương ứng với những điểm ảnh kế cận một cách
đối xứng và tỉ lệ thuận với khoảng cách của phần tử này với trung tâm. Tính chất này
giúp giữ lại đường viền và biên cũng như làm mờ một cách đồng bộ hơn so với các
phương pháp khác. Để ứng dụng được Gaussian Blur vào ảnh cần xử lý, nhóm đã xây
dựng một hàm GaussianBlur() dựa trên công thức toán học, nhận đầu vào là mảng ảnh và
các giá trị toán học cho hàm Gaussian, đầu ra là ảnh đã được làm mịn.

Do các phương pháp xử lý ảnh nhóm đưa ra và ứng dụng đều được lập trình thủ
công, nên vẫn còn chưa tối ưu được, càng không thể cho ra kết quả đúng hoàn toàn với
một tập các ảnh thử nghiệm khác nhau. Việc tồn tại một số ít điểm ảnh nhiễu/sai không
gây ra cản trở về mặt thị giác, nhưng để từ đó có thể khoanh vùng vật thể thì có thể gây
ra sai số lớn. Nhóm đã nhận ra và khắc phục vấn đề này bằng phương pháp Thresholding.
Bằng cách tính toán các giá trị từ Edge map bị nhiễu, nhóm có thể đưa ra một khoảng giá
trị threshold chặn hai đầu mà ở đó các giá trị còn sót lại thuộc về đối tượng cần tìm. Khối
thresholding nhận Edge map đầu vào sau khi được xác định qua hàm Sobel trước đó, đầu
ra là Edge map mới đã được lọc các giá trị ngoài vùng nhận diện. Thông qua việc đánh
giá vị trí các cạnh mới nhận được, nhóm thu được các giá trị x, y, h, w lần lượt tương
ứng với tọa độ góc trên bên trái, chiều cao và chiều rộng của bounding box.

7
Kết quả thu được sau khi hiệu chỉnh một số chỉ số tương ứng là khả quan và phù
hợp với mục tiêu của nhóm.

Ảnh: Kết quả đầu ra của chương trình cho một ảnh.

Ảnh: Kết quả đầu ra trên camera tích hợp sẵn.

2) Thuật toán auto white balance

Khi chụp ảnh hoặc quay video, các nguồn sáng từ bên ngoài môi trường như ánh sáng ban
ngày, ánh sáng đèn điện,… sẽ ảnh hưởng đến nhiệt độ màu của hình ảnh, từ đó ảnh hưởng
đến cách màu sắc được tái hiện trên ảnh và video. Vì vậy các thuật toán cân bằng trắng
được sử dụng để điều chỉnh màu sắc của hình ảnh sao cho chúng trông tự nhiên và chính
xác như thực tế
Các thuật toán auto white balance thường phân tích màu sắc của các khung hình, xác định
một điểm màu nào đó làm tham chiếu, từ đó thay đổi, điều chỉnh toàn bộ màu sắc của hình
ảnh theo tham chiếu này. Ví dụ, thuật toán White Patch tìm kiếm, sử dụng một điểm trắng
hoặc gần trắng trong ảnh, giả thiết đó là màu trắng từ đó thay đổi màu sắc các điểm ảnh còn
lại trong hình ảnh.
Để phát triển một thuật toán auto white balance, nhóm tiếp cận theo hướng của một thuật
toán cân bằng trắng là Gray World. Thuật toán Gray World sẽ giả định rằng trung bình màu
sắc của hình ảnh là một màu xám trung tính hay nói cách khác trung bình màu sắc của ba
8
kênh màu đỏ, xanh lá và xanh dương là bằng nhau với ảnh RGB
Để thực hiện thuật toán Gray World trước hết ta cần tính giá trị trung bình của các điểm ảnh
theo ba kênh màu:

R_avg = average(sum(R))
G_avg = average(sum(G))
B_avg = average(sum(B))
Trong đó R_avg, G_avg, B_avg là giá trị trung bình điểm ảnh theo ba kênh màu,
R,G,B là giá trị các điểm ảnh từng kênh màu
Tiếp theo ta tính giá trị mức xám trung bình Gray_avg bằng trung bình cộng của giá trị
trung bình các kênh màu:
Gray_avg = (R_avg + G_avg + B_avg) / 3
Cuối cùng ta điều chỉnh giá trị tất cả điểm ảnh của khung hình theo công thức:
����_���
New_B = �_���
∗ �
����_���
New_R = ∗ �
�_���
����_���
New_G = ∗ �
�_���
Trong đó New_B, New_R, New_G là giá trị điểm ảnh mới và B, R, G là giá trị điểm ảnh
cũ của lần lượt ba kênh màu xanh dương, đỏ, xanh lá
Kết quả thu được là khung hình sau khi được cân bằng trắng tự động bằng thuật toán
Gray World

Ảnh gốc Ảnh cân bằng trắng

Giả định của thuật toán Gray World rằng trung bình của một bức ảnh là một màu xám
trung tính chỉ chính xác trong trường hợp màu sắc trong ảnh được phản chiếu một các
phong phú, đa dạng. Điều này được thể hiện rõ ở những vùng cạnh biên của ảnh, nơi mà
màu sắc có sự thay đổi với cường độ lớn. Vì vậy để cải thiện độ chính xác của thuật toán
nhóm đã bổ sung việc tính hệ số của những điểm ảnh theo vị trí của điểm ảnh so với biên
cạnh trước khi tính giá trị trung bình theo từng kênh màu.
Đầu tiên ảnh đầu vào được cho qua bộ lọc Sobel để thu được ảnh tách biên. Tiếp đó, ta
tạo một ma trận hệ số factor có kích thước bằng kích thước ảnh với giá trị các phần tử sẽ
bằng 1 nếu điểm ảnh ở vị trí tương ứng nằm trên biên, cạnh của ảnh (có giá trị lớn hơn 0
trong ảnh tách biên) và có giá trị bằng alpha (nhỏ hơn 1) nếu điểm ảnh ở vị trí tương ứng
không nằm trên biên cạnh của ảnh (có giá trị bằng 0 trong ảnh tách biên).
Giá trị trung bình của từng kênh màu khi này được tính theo công thức trung bình có trọng
số:
���(� ∗ ������)
R_avg =
���(������)
���(� ∗ ������)
G_avg =
���(������)

9
���(� ∗ ������)
B_avg =
���(������)
Trong đó, R_avg, G_avg, B_avg là giá trị trung bình điểm ảnh theo ba kênh màu, R,G,B là
giá trị các điểm ảnh từng kênh màu, factor là giá trị hệ số tương ứng đã tính ở trước
Cuối cùng ta tính giá trị xám trung bình và giá trị điểm ảnh mới như theo thuật toán Gray
World

Ảnh gốc Gray World Gray World tăng cường

IV. Thảo luận

Kết quả nghiệm thu, đánh giá của nhóm so với một số phương pháp khác. Các sai
sót không quá nghiêm trọng, các kết quả thu được khá tốt và có thể sử dụng.

Ảnh: Kết quả từ YOLOv8

Ảnh: Kết quả từ chương trình của nhóm

10
Ảnh: Labelling thủ công

Ảnh: Kết quả từ chương trình của nhóm

Một số vấn đề phát sinh trong quá trình triển khai và sử dụng mã nguồn do nhóm
xây dựng. Đầu tiên là tốc độ của chương trình. Do việc sử dụng các vòng for loop để
duyệt ảnh và kernel, dẫn đến độ phức tạp tính toán theo thời gian của chương trình tăng,
tốc độ giảm xuống nhiều đặc biệt là với những ảnh lớn. Điều này ảnh hưởng trực tiếp
đến việc áp dụng trong thời gian thực. So sánh các hàm xây dựng thủ công và các
method built-in của numpy hay opencv, tốc độ bị chậm đến hàng trăm lần. Lý giải cho
việc này, nhóm đã tìm ra nguyên nhân.

Đầu tiên phải kể đến, nhóm sử dụng một ngôn ngữ lập trình bậc cao, cái giá cho
những cú pháp nhanh gọn dễ hiểu của một ngôn ngữ scripting là độ phức tạp khi thực
hiện các câu lệnh dù cơ bản nhất, trong khi đó, các thư viện numpy hay opencv được xây
dựng trên nền tảng Cpp được tinh chỉnh và tối ưu cho những công việc đặc thù.

Nhưng quan trọng nhất là việc vector hóa khi thực hiện các phép tính nhân ma trận,
với for loop, từng toán hạng sẽ thực hiện tính với nhau lần lượt dẫn đến độ phức tạp thời
gian cao, trong khi đó việc vector hóa có thể đẩy năng lực tính toán lên cao hơn với mỗi
lần tính (nhưng vẫn trong mức chấp nhận được) và yêu cầu ít thời gian thực hiện tính
toán hơn. Nhóm có đề xuất việc vector hóa các phép tính để hoàn thiện hơn chương trình
nhưng trong phạm vi đề tài cũng như độ ưu tiên của phần việc, việc vector hóa này hoàn
11
toàn có thể thực hiện sau này.

Bên cạnh đó, nhóm cũng có tìm hiểu về Auto White Balancing. Đây là một chức
năng được tích hợp vào hầu hết camera hiện đại ngày nay, với mục đích trung hòa màu
sắc cũng như độ sáng của ảnh. Nguyên nhân cho việc cần phải sử dụng Auto White
Balancing là do các vật thể trong ảnh có thể bị ảnh hưởng bới nhiều nguồn sáng khác
nhau, nên cần cân bằng trong bước tiền xử lý trước khi áp dụng các thuật toán xử lý ảnh
khác vào. Tuy nhiên trong quá trình tìm hiểu và ứng dụng các thuật toán có sẵn vào
chương trình, nhóm nhận thấy sự bất thường trong những vị trí bị lóa nắng trên ảnh, gây
mất tự nhiên. Nhóm vẫn chưa tìm ra nguyên nhân và giải pháp chính xác cho vấn đề này,
nhưng khả năng rất cao là do các công thức được đưa vào chưa chính xác.

Ảnh: Lỗi phát sinh từ Auto White Balancing

Về mặt trải nghiệm người dùng, nhóm vẫn chưa xây dựng thành công phần giao
diện UI/UX, cũng như chưa áp dụng được vào lens điện thoại do điều kiện không cho
phép. Tuy nhiên, với những thông số chi tiết được áp dụng xuyên suốt trong quá trình
làm việc, nhóm tin rằng việc điều chỉnh thông số lens với các thư viện nội thiết bị hỗ trợ
là hoàn toàn khả thi, có thể xây dựng các thuật toán tương đương thậm chí tốt hơn so với
kết quả hiện tại. Việc xây dựng UI/UX sau này cũng góp phần làm cho chương trình dễ
sử dụng hơn, dễ thay đổi các thông số bộ lọc cũng như là threshold cho phù hợp nhất.

Các kế hoạch cải tiến được nhóm đề ra: Do các phương pháp hỗ trợ theo Sobel
Edge Detection đã khá giống một phần của thuật toán Canny, nhóm có thể áp dụng trực
tiếp các bước của thuật toán này giúp giảm nhiễu và phát hiện cạnh tốt hơn. Bao gồm các
bước: làm mịn ảnh với gaussian blur, tính gradient và thêm cả hướng của gradient bằng
arctan(Gy/Gx), tiếp đến là Non-maximum Suppression hay còn gọi là loại bỏ các điểm
không phải cực đại cục bộ và cuối cùng là thresholding hay còn gọi là lọc ngưỡng. Bên
12
cạnh đó nhóm cũng tham khảo một số phương pháp truyền thống như SIFT hay SVM để
có ý tưởng về cách xử lý ảnh cũng như xác định các đặc trưng (characteristic) của đối
tượng một cách ổn định.

V. Kết luận

Tóm lại, phần nghiên cứu được thực hiện bởi nhóm về các thuật toán được sử dụng
trong Autofocus đã cung cấp những hiểu biết có giá trị về quy trình phức tạp nhằm đạt
được khả năng lấy nét chính xác và hiệu quả có nhiều ứng dụng khác nhau. Nhóm sử
dụng phương pháp tiếp cận có hệ thống, áp dụng hiệu quả trong quá trình tìm hiểu, từ
phát hiện cạnh đến làm mịn, lọc ngưỡng và cuối cùng là xác định đối tượng, đã cho phép
các thành viên phân tích và hiểu rõ được các bước trong quy trình này.

Ưu và nhược điểm đã thảo luận trong phần trước nêu bật tính chất đa diện của các
thuật toán Autofocus, thể hiện điểm mạnh của chúng về độ chính xác, tốc độ và độ phù
hợp trước nhiều tình huống khác nhàu, đồng thời cũng xác định được những thách thức
liên quan đến độ nhạy nhiễu, độ phức tạp tính toán và những đánh đổi tiềm ẩn về hiệu
năng lẫn tốc độ. Khi công nghệ tiếp tục phát triển, việc giải quyết những hạn chế này trở
nên quan trọng để liên tục cải tiến các thuật toán lấy nét tự động.

Những phát hiện của nghiên cứu này đóng góp, cung cấp hiểu biết cho các thành
viên về nền tảng lý thuyết cũng như công nghệ cho đề tài lấy nét tự động nói riêng và xử
lý ảnh nói chung. Việc tích hợp các kỹ thuật tiên tiến và tối ưu hóa các thuật toán hiện có
là điều cần thiết để khắc phục những hạn chế hiện tại và nâng cao hiệu suất tổng thể của
hệ thống chương trình.

VI. Phụ lục

1) Tài liệu tham khảo

Image Processing in OpenCV – OpenCV documentation


Mathematical Functions – Numpy Manual
Digital Image Processing – Tutorialpoint
Digital Image Processing – Gonzalez/Woods
A Method to Improve Robustness of the Gray World Algorithm - Chen Guanghua,
Zhang Xiaolong

2) Đóng góp của các thành viên

Trần Hiếu Minh: Quản lý luồng làm việc, bảo trì mã nguồn.
Lê Đức Minh: Nghiên cứu, ứng dụng các phương pháp phát hiện cạnh.
Lê Tuấn Minh: Nghiên cứu, ứng dụng các phương pháp làm mịn, khử nhiễu.
Phạm Tường Minh: Nghiên cứu lý thuyết, ứng dụng của phép tích chập.
Đỗ Hoàng Nam: Xây dựng, phát triển thuật toán cân bằng trắng tự động.

3) Mã nguồn

RescueCat1100/auto-focus: Auto Focus simulation for University course (github.com)

13

You might also like