Tải bản đầy đủ (.docx) (102 trang)

Xử lý ảnh với python và opencv

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (9.04 MB, 102 trang )

Ket-noi.com kho tài liệu miễn phí

--------

Trường Đại Học Cơng Nghiệp Hà Nội
Khoa Công Nghệ Thông Tin
--------

Báo cáo thực tập tốt nghiệp
Đề tài:Xử lý ảnh với OpenCV và Python
Sinh viên thực hiện : Đỗ Xuân Sơn
Lớp: KHMT2-K10
Giáo viên hướng dẫn :TS.Ngô Đức Vĩnh


Ket-noi.com kho tài liệu miễn phí


Ket-noi.com kho tài liệu miễn phí

Mở Đầu
I.Lý Do Chọn Đề Tài

Xã hội ngày càng phát triển thì cơng nghệ cũng càng ngày càng phát
triển theo từ các cuộc cách mạng công nghiệp đầu tiên đến bây giờ là cuộc
cách mạng công ngiệp 4.0 . Là cuộc cách mạng mà cốt lõi là công nghệ
thông tin với các thiết bị thông minh như robot hay xe tự lái để tăng năng
suất lao động và phục vụ cho các nhu cầu đời sống con người nhưng vấn
đề gặp phải chung ở đây đối với các thiết bị này là chúng vẫn còn rất ngây
ngơ so để chúng có trở nên thực sự thơng minh thì con người phải dạy cho
chúng hiểu và phân được các sự vật trong thực tế nhằm đưa ra các bài tốn


xử lý chính xác nhằm đạt được mục đích cơng việc từ đó đã phát triển nên
khái niệm Image Processing . Qua quá trình phát triển thì các lập trình viên
đã phát triển các thư viện hỗ trợ hay cịn gọi là OpenCV cho q trình xử lý
ảnh. Nhờ đó mà khi xử lý ảnh chúng ta không cần phải xây dựng lại các
hàm xử lý ảnh mà chỉ cần phát triển dựa trên những gì sẵn có . Do vậy
nhiều người chỉ biết đến xử lý ảnh với OpenCV . Nhưng hiện tại Python
cũng đã phát triển các thư viện dành riêng cho xử lý ảnh . Thế nên trong đề
tài này em muốn đưa ra sự được ưu điểm nhược điểm khi xử lý ảnh với
Python so với thư viện OpenCV vốn đã rất quen thuộc với hầu hết các lập
trình viên trong lĩnh vực xử lý ảnh

3


Ket-noi.com kho tài liệu miễn phí

II.Mục Tiêu Nghiên Cứu
Tìm ra được các ưu điểm và nhược khi xử lý ảnh với python và
OpenCV để từ đó giúp người sử dụng khi nào nên xử dụng các thư viện
của python để xử lý ảnh khi nào nên xử dụng OpenCV để xử lý ảnh nhằm
đem lại hiệu quả tối đa cũng như sự khoa học trong công việc xử lý ảnh

III.Phương Pháp Nghiên Cứu
Tìm hiểu về một số kĩ thuật trong xử lý ảnh và một số modul thường
được sử dụng để hiểu về các thuật tốn và mơ hình cho xử lý ảnh một cách
tổng quát nhất
Tìm hiểu về OpenCV để trả lời cho những câu hỏi OpenCV là gì tại
sao phải dùng OpenCV ,Ai dùng OpenCV, Các Cấu Trúc Tập Lệnh trong
OpenCV , OpenCV
Hỗ trợ người dùng như thế nào trong xử lý ảnh

Tương tư với Python
Sau đó rút ra nhận xét về ưu nhược điểm khi xử lý ảnh với OpenCV và
PyThon

IV. Đối tượng nghiên cứu
Open CV và python

4


Ket-noi.com kho tài liệu miễn phí

CHƯƠNG I: TỔNG QUAN VỀ XỬ LÝ ẢNH
1.1.Tổng Quan Về Lĩnh Vực Nghiên Cứu
Xử lý ảnh là một lĩnh vực mang tính khoa học và cơng nghệ. Nó là một
ngành khoa học mới mẻ so với nhiều ngành khoa học khác nhưng tốc độ
phát triển của nó rất nhanh, kích thích các trung tâm nghiên cứu, ứng dụng,
đặc biệt là máy tính chuyên dụng riêng cho nó.
Xử lý ảnh được đưa vào giảng dạy ở bậc đại học ở nước ta khoảng
chục năm nay. Nó là môn học liên quan đến nhiều lĩnh vực và cần nhiều
kiến thức cơ sở khác. Đầu tiên phải kể đến Xử lý tín hiệu số là một mơn
học hết sức cơ bản cho xử lý tín hiệu chung, các khái niệm về tích chập,
các biến đổi Fourier, biến đổi Laplace, các bộ lọc hữu hạn… Thứ hai, các
công cụ tốn như Đại số tuyến tính, Sác xuất, thống kê. Một số kiến thứ
cần thiết như Trí tuệ nhân tao, Mạng nơ ron nhân tạo cũng được đề cập
trong quá trình phân tích và nhận dạng ảnh.
Các phương pháp xử lý ảnh bắt đầu từ các ứng dụng chính: nâng cao
chất lượng ảnh và phân tích ảnh. Ứng dụng đầu tiên được biết đến là nâng
cao chất lượng ảnh báo được truyền qua cáp từ Luân đôn đến New York từ
những năm 1920. Vấn đề nâng cao chất lượng ảnh có liên quan tới phân bố

mức sáng và độ phân giải của ảnh. Việc nâng cao chất lượng ảnh được phát
triển vào khoảng những năm 1955. Điều này có thể giải thích được vì sau
thế chiến thứ hai, máy tính phát triển nhanh tạo điều kiện cho quá trình xử
lý ảnh sơ thuận lợi. Năm 1964, máy tính đã có khả năng xử lý và nâng cao
chất lượng ảnh từ mặt trăng và vệ tinh Ranger 7 của Mỹ bao gồm: làm nổi
đường biên, lưu ảnh. Từ năm 1964 đến nay, các phương tiện xử lý, nâng
cao chất lượng, nhận dạng ảnh phát triển không ngừng. Các phương pháp
tri thức nhân tạo như mạng nơ ron nhân tạo, các thuật tốn xử lý hiện đại và
cải tiến, các cơng cụ nén ảnh ngày càng được áp dụng rộng rãi và thu nhiều
kết quả khả quan.
Để dễ tưởng tượng, xét các bước cần thiết trong xử lý ảnh. Đầu tiên, ảnh tự
nhiên từ thế giới ngoài được thu nhận qua các thiết bị thu (như Camera,
máy chụp ảnh). Trước đây, ảnh thu qua Camera là các ảnh tương tự (loại
Camera ống kiểu CCIR). Gần đây, với sự phát triển của công nghệ, ảnh
màu hoặc đen trắng được lấy ra từ Camera, sau đó nó được chuyển trực
tiếp thành ảnh số tạo thuận lợi cho xử lý tiếp theo. (Máy ảnh số hiện nay là
một thí dụ gần gũi). Mặt khác, ảnh cũng có thể tiếp nhận từ vệ tinh; có thể
quét từ ảnh chụp bằng máy quét ảnh. Hình 1.1 dưới đây mô tả các bước cơ
bản trong xử lý

5


Ket-noi.com kho tài liệu miễn phí

1.2.Một số phép xử lý ảnh
1.2.1.Biến đổi ảnh xám(Grayscale convert)
Biến đổi ảnh xám là quá trình chuyển từ ảnh màu vể ảnh xám

Trong xử lý ảnh, việc chuyển đổi ảnh màu sang ảnh xám là công việc vô

cùng phổ biến.
Ảnh màu thực chất chỉ là tập hợp của những ma trận số có cùng kích
thước . Khi muốn xử lý thông tin trên ảnh, sẽ dễ dàng hơn nếu ta chỉ xử lý
dữ liệu trên một ma trận số thay vì nhiều ma trận số. Việc biến đổi ảnh màu
về ảnh số (Grayscale converting) xuất hiện vì mục đích trên - biến đổi
thơng tin ảnh về một ma trận số hai chiều duy nhất.

6


Ket-noi.com kho tài liệu miễn phí

Giả sử, hình ảnh của bạn được lưu trữ dưới dạng RGB (Red-Green-Blue).
Điều này có nghĩa bạn có ba ma trận xám tương ứng cho màu Red, Green,
Blue. Cơng việc của bạn là tìm cách tổng hợp ba ma trận này về thành một
ma trận duy nhất. Một trong số các công thức phổ biến để thực hiện việc đó

Y
=
0.2126R
+
0.7152G
+
0.0722B
Trong đó:


Y: ma trận xám cần tìm




R: ma trận xám đỏ của ảnh



G: ma trận xám lục của ảnh



B: ma trận xám lam của ảnh
Nếu bạn chưa quen về việc thực hiện phép toán trên ma trận, hãy hình dung
Y, R, G, B là giá trị mức xám trên các ơ có tọa độ giống nhau.
1.2.2.Biến đổi ảnh đen trắng
Từ ảnh xám, bạn có thể biến đổi về thành ảnh chỉ có hai màu đen-trắng
(black-and-white)
Ảnh đen trắng thường được ứng dụng trong bài toán phân vùng ảnh (Image
segmentation). Giả sử trong hình ví dụ trên, bằng cách biến đổi ảnh về nhị
phân, bạn có thể loại bỏ các thông khung cảnh xung quanh và chỉ giữ lại
hai con cá heo trên hình

7


Ket-noi.com kho tài liệu miễn phí

Ảnh đen trắng, như tên gọi, chỉ có hai màu đen với giá trị là 0 và trắng với
giá trị 255. Bài toán đặt ra là làm thế nào để biến đổi ảnh xám (hay nói cách
khác là một ma trận 2 chiều với giá trị mỗi ô trong khoảng 0-255) về thành
một ma trận 2 chiều với giá trị mỗi ô là 0 hoặc 255.
Cách giải quyết là chọn một ngưỡng (threshold) để xác định đâu là điểm

ảnh đen và đâu là điểm ảnh trắng. Nếu giá trị trên ảnh xám lớn hơn ngưỡng
threshold, đấy là điểm ảnh trắng và ngược lại.
Gọi ảnh xám là Gray, ảnh đen trắng cần xác định là BW, tọa độ các
pixel trên hình là (x,y), ta có
- BW(x,y) = 255 nếu Gray(x,y) > threshold
- BW(x,y) = 0 nếu Gray(x,y) <= threshold.

1.2.3.Biểu đồ phân bố tần số (Histogram)


Biểu đồ phân bố tần số (Biểu đồ phân bố mật độ, biểu đồ cột) dùng để đo
tần số xuất hiện của một vấn đề nào đó, cho ta thấy rõ hình ảnh sự thay đổi,
biến động của một tập dữ liệu. Đây là một khái niệm rất phổ biến, được sử
dụng rộng rãi từ lĩnh vực kỹ thuật tới kinh tế.

8


Ket-noi.com kho tài liệu miễn phí





Trong xử lý ảnh, biểu đồ Histogram của một ảnh là biểu đồ mô tả sự phân
bố của các giá trị mức xám của các điểm ảnh (Pixel) trong một bức ảnh
hoặc một vùng ảnh(Region).
Trong một ảnh, giá trị của một điểm ảnh (Pixel) thường là từ 0-255.

Phân tích



Trục tung (Oy) biểu diễn số lượng điểm ảnh (Pixel) của mức xám.



Trục hoành (Ox) biểu diễn mức xám.



Giá trị lớn nhất của trục hồnh chính là số lượng điểm ảnh (Pixel) có
trong một bức ảnh.



Với ảnh màu như RGB thì có tới 3 biểu đồ Histogram thể hiện từng kênh
màu.



Một biều đồ tốt à biểu đồ có số lượng điểm ảnh nhiều nhất ở vùng giữa
(Độ sáng trung bình) và ít dần ra 2 vùng sáng tối (Ngọn núi).
Tác dụng




Dựa vào biều đồ Histogram mà bạn có thể biết được hình ảnh sáng tối
như thế nào.
Áp dụng cho các xử lý ảnh cao cấp khác.


9


Ket-noi.com kho tài liệu miễn phí

1.2.4.Tăng tương phản
Ảnh số là tập hợp các điểm mỗi điểm có giá trị độ sáng khác nhau . Ở đây
độ sáng để mắt người dễ cảm nhận ảnh song không phải quyết định .Thực
tế chỉ ra rằng 2 đối tượng có cùng độ sáng nhưng đặt trên 2 nền khác nhau
sẽ cho cảm nhận khác nhau .Như vậy độ tương phản biểu diễn sự thay đổi
độ sáng của đối tượng so với nền .Nói 1 cách khác, độ tương phản là độ nổi
của điểm ảnh hay vùng ảnh so với nền .Như vậy , nếu ảnh có độ tương
phản kém ta có thể tùy chỉnh theo ý muốn
Ảnh có độ tương phản kém là do điều kiện ánh sáng không đủ hay không
đều hoặc do tính khơng tuyến tính hay biến động nhỏ của bộ cảm nhận
ảnh , cần điều chỉnh lại biên độ trên tồn dải hay trên dải có giới hạn bằng
cách đổi tuyến tính biên độ đầu vào (dùng hàm biến đổi tuyến tính ) hay
phi tuyến (hàm mũ hay hàm logarit ).Khi dùng hàm tuyến tính các độ dốc
phải chọn lớn hơn 1 trong các miền cần co dãn.Các tham số a và b
(các cận ) có thể chọn khi xem xét lược đồ xám của ảnh .

10


Ket-noi.com kho tài liệu miễn phí

Dãn độ tương phản

1.2.5.Khử nhiễu

Tách nhiễu là trường hợp đặc biệt của dãn độ tương phản khi hệ số góc
. Tách nhiễu được ứng dụng có hiệu quả để giảm nhiễu khi biết tín
hiệu vào trên khoảng [a,b]
Phân ngưỡng là trường hợp đặc biệt của tách nhiễu khi a=b=const.Trong
trường hợp này ảnh đầu vào ảnh nhị phân (có 2 mức ).Phân ngưỡng
thường dùng trong kỹ thuật in ảnh 2 màu vì ảnh gần nhị phân khơng cho
ảnh nhị phân khi qt ảnh do có nhiễu từ bộ cảm biến và biến đổi của nền
ví dụ trường hợp lọc nhiễu của ảnh vân tay.

11


Ket-noi.com kho tài liệu miễn phí

Khử nhiễu

1.2.6.Co giãn ảnh
A,Giãn ảnh
Giãn ảnh nhằm mục đích loại bỏ điểm đen vây bởi các điểm trắng. Trong
kỹ thuật này , một cửa sổ (N+1)x(N+1) được rê đi khắp ảnh và thực hiện
đối sánh 1 pixel của ảnh với (N+1)2-1 điểm lân cận (không tính điểm ở tâm
).Phép đối sánh được thực hiện bởi phép tuyển logic .Thuật tốn biến đổi
được tóm tắt như sau:

B,Co ảnh
Co ảnh là thao tác đối ngẫu ảnh nhằm loại bỏ điểm trắng bị vây bởi các
điểm đen .Trong kỹ thuật này , một cửa sổ (N+1)2 được rê đi khắp ảnh và
thực hiện so sánh pixel của ảnh (N+1)2-1 điểm lân cận .Việc so sánh ở đây
được thực hiện bởi phép hội logic .
Kỹ thuật này thường được áp dụng cho ảnh nhị phân như vân tay ,chữ viết

.Để khơng làm ảnh hưởng đến kích thước đối tượng trong ảnh ngưởì ta tiến
hành n lần dãn là n lần co

1.2.7.Xoay ảnh
Xoay ảnh là tốn tử xoay vịng thực hiện phép biến đổi hình học để
ánh xạ vị trí
vào một vị trí

của một phần tử hình ảnh trong một hình ảnh đầu vào
trong một hình ảnh đầu ra bằng cách xoay nó qua góc

do người dùng chỉ định về nguồn gốc
12

. Trong hầu hết các triển khai, các


Ket-noi.com kho tài liệu miễn phí

vị trí đầu ra
nằm ngồi ranh giới của hình ảnh sẽ bị bỏ qua. Xoay
được sử dụng phổ biến nhất để cải thiện hình ảnh trực quan của một hình
ảnh, mặc dù nó có thể hữu ích như một bộ tiền xử lý trong các ứng dụng
mà các tốn tử định hướng có liên quan. Rotation là một trường hợp đặc
biệt của sự biến đổi affine .
Tốn tử xoay vịng thực hiện phép biến đổi của biểu mẫu:

nơi
là tọa độ của trung tâm luân chuyển (trong hình ảnh đầu vào)
và là góc quay với phép quay chiều kim đồng hồ có góc dương. (Lưu ý ở

đây rằng chúng ta đang làm việc trong tọa độ hình ảnh, do đó trục y đi
xuống. Cơng thức xoay tương tự có thể được định nghĩa khi trục y đi lên.)
Thậm chí nhiều hơn tốn tử dịch , thao tác xoay tạo ra các vị trí đầu
ra
khơng phù hợp trong ranh giới của hình ảnh (được xác định bởi
kích thước của hình ảnh đầu vào gốc). Trong những trường hợp như vậy,
các phần tử đích đã được ánh xạ bên ngồi hình ảnh bị bỏ qua bởi hầu hết
các triển khai. Các vị trí pixel trong đó một hình ảnh đã được xoay thường
được lấp đầy bằng các pixel đen.
Thuật tốn xoay, khơng giống như thuật tốn được sử dụng bởi bản dịch ,
có thể tạo ra các tọa độ
không phải là số nguyên. Để tạo ra cường
độ của các điểm ảnh ở từng vị trí số nguyên, các phương pháp chẩn đoán
khác nhau (hoặc các kỹ thuật lấy mẫu lại ) có thể được sử dụng, ví dụ, hai
phương pháp phổ biến bao gồm:


Cho phép mức độ cường độ tại mỗi vị trí pixel nguyên để giả định giá trị
của hàng xóm khơng phải số ngun gần nhất



.

Tính mức độ cường độ tại mỗi vị trí pixel nguyên dựa trên mức trung bình
có trọng số của n giá trị không phải nguyên gần nhất. Trọng số tỷ lệ thuận
với khoảng cách hoặc pixel chồng chéo của các phép chiếu gần đó.
Phương pháp thứ hai tạo ra kết quả tốt hơn nhưng làm tăng thời gian tính
tốn của thuật toán.


13


Ket-noi.com kho tài liệu miễn phí

1.2.8.Dị Biên
Điểm biên Là một điểm ảnh được coi là điểm biên nếu có sự thay đổi
nhanh hoặc đột ngột về mức xám (hoặc màu). Ví dụ trong ảnh nhị phân
,điểm đen gọi là điểm biên nếu điểm lân cân nó có ít nhất một điểm trắng .
Đường biên (đường bao ): tập hợp các điểm biên liên tiếp tạo thành một
đường biên hay đường bao
Ý nghĩa của đường biên trong xử lý ảnh :đường biên là một loại đặc trưng
cục bộ tiêu biểu trong phân tích , nhận dạng ảnh .Người ta sử dụng biên
làm phân tách các vùng xám (màu) cách biệt .Ngược lại người ta sử dụng
các vùng ảnh để tìm đường phân cách
Các kỹ thuật phát hiện biên chia làm 2 loại :
a.Phương pháp phát hiện biên trực tiếp : phương pháp này chủ yếu dựa vào
sự biến thiên độ sáng của điểm ảnh để làm nổi biên bằng kỹ thuật đạo hàm
+ Nếu lấy đạo hàm bậc nhất của ảnh: ta có phương pháp Gradient
+Nếu lấy đạo hàm bậc hai: ta có phương pháp Laplace
2 phương pháp này gọi là dị biên cục bộ
Ngồi ra người ta cịn sử dụng phương pháp “ đi theo đường bao ” dựa vào
công cụ toán học là nguyên lý quy hoạch động và đường gọi là phương
pháp dò biên tổng thể .Phương pháp dị biên trực tiếp có hiệu quả và ít bị
tác động của nhiễu
14


Ket-noi.com kho tài liệu miễn phí


b.Phương pháp phát hiện biên gián tiếp : Việc xác định biên của ảnh được
thực hiện từ ảnh đã phân vùng .Phương pháp dò biên gián tiếp khó cài đặt
nhưng áp dụng tốt khi sự biến thiên độ sáng nhỏ

1.2.9.Tìm xương đối tượng trong ảnh (Skeletons).
Tìm khung xương cũng tương tự như làm mảnh, nhưng nó được
dùng để tìm ra các chi tiết cấu trúc của đối tượng. Khung xương của
đối tượng là tập hợp các điểm ảnh cách đều biên của đối tượng. Và
có thể biểu diễn bằng phép co nhị phân và phép mở ảnh.

Xét A là một ảnh nhị phân bao gồm các điểm ảnh thuộc đối
tượng, được đặt nhãn là các số 1. Các điểm ảnh không thuộc đối
tượng được đặt nhãn là các số 0. B là phần tử cấu trúc 3x3. Khi đó,
nếu ký hiệu S(A) là khung xương của tập hợp A thì thuật tốn tìm
khung xương được xác định qua cơng thức:
(1.1)
Trong đó :

( 1.2)

(A ⊖ kB) là phép co k lần liên tiếp trên A. Tức là:

(A ⊖ kB )=((..( A ⊖ B)…) ⊖ B ….)⊖ B

Và K là Bước lặp cuối cùng trước khi A bị ăn mịn thành tập rỗng.
Nói cách khác:

15



Ket-noi.com kho tài liệu miễn phí

Cơng thức (1.1) và (1.2) khẳng định rằng khung xương S(A) có
thể nhận được từ hợp các bộ khung xương con Sk(A). Có thể chứng
minh rằng A có thể xây dựng lại từ các tập con này bằng cách sử
dụng cơng thức:

Trong đó

ký hiệu k lần giãn nhị phân Sk(A), tức là:

=((..( Sk(A) ⊕B)…)B ….)⊕B.

Xét thí dụ:

1.3. Một số mơ hình trong xử lý ảnh
1.3.1. Mơ hình Raster

16


Ket-noi.com kho tài liệu miễn phí

Đây là cách biểu diễn ảnh thông dụng nhất hiện nay, ảnh được biểu
diễn dưới dạng ma trận các điểm (điểm ảnh). Thường thu nhận qua các
thiết bị như camera, scanner. Tuỳ theo yêu cầu thực thế mà mỗi điểm ảnh
được biểu diễn qua 1 hay nhiều bít
Mơ hình Raster thuận lợi cho hiển thị và in ấn. Ngày nay công nghệ phần
cứng cung cấp những thiết bị thu nhận ảnh Raster phù hợp với tốc độ
nhanh và chất lượng cao cho cả đầu vào và đầu ra. Một thuận lợi cho việc

hiển thị trong môi trường Windows là Microsoft đưa ra khuôn dạng ảnh
DIB (Device Independent Bitmap) làm trung gian. Hình 1.4 thể hình quy
trình chung để hiển thị ảnh Raster thơng qua DIB.
Một trong những hướng nghiên cứu cơ bản trên mơ hình biểu diễn
này là kỹ thuật nén ảnh các kỹ thuật nén ảnh lại chia ra theo 2 khuynh
hướng là nén bảo tồn và khơng bảo tồn thơng tin nén bảo tồn có khả
năng phục hồi hồn tồn dữ liệu ban đầu cịn nếu khơng bảo tồn chỉ có
khả năng phục hồi độ sai số cho phép nào đó. Theo cách tiếp cận này người
ta đã đề ra nhiều quy cách khác nhau như BMP, TIF, GIF, PCX… Hiện nay
trên thế giới có trên 50 khn dạng ảnh thơng dụng bao gồm cả trong đó
các kỹ thuật nén có khả năng phục hồi dữ liệu 100% và nén có khả năng
phục hồi với độ sai số nhận được.

Quá trình hiển thị và chỉnh sửa , lưu trữ ảnh thông qua DIB
1.3.2. Mơ hình Vector
Biểu diễn ảnh ngồi mục đích tiết kiệm không gian lưu trữ dễ dàng
cho hiển thị và in ấn còn đảm bảo dễ dàng trong lựa chọn sao chép di
chuyển tìm kiếm… Theo những yêu cầu này kỹ thuật biểu diễn vector tỏ ra
ưu việt hơn
Trong mơ hình vector người ta sử dụng hướng giữa các vector của
điểm ảnh lân cận để mã hố và tái tạo hình ảnh ban đầu ảnh vector được
thu nhận trực tiếp từ các thiết bị số hoá như Digital hoặc được chuyển đổi
từ ảnh Raster thơng qua các chương trình số hố
17


Ket-noi.com kho tài liệu miễn phí

Cơng nghệ phần cứng cung cấp những thiết bị xử lý với tốc độ nhanh
và chất lượng cho cả đầu vào và ra nhưng lại chỉ hỗ trợ cho ảnh Raster.

Do vậy, những nghiên cứu về biểu diễn vectơ đều tập trung từ
chuyển đổi từ ảnh Raster.

Sự chuyển đổi giữa các mơ hình biểu diễn ảnh

CHƯƠNG 2: Xử Lý Ảnh Với OpenCV
2.1.OpenCV
OpenCV là gì:
OpenCV [OpenCV] là open source (xem )
computer vision library có sẵn ở
Thư viện này được viết
trong C và C++ và chạy dưới Linux, Windows và Mac OS X. Có phát triển
tích cực trên các giao diện cho Python, Ruby, Matlab, và các ngơn ngữ
khác.
OpenCV được thiết kế cho hiệu quả tính toán và với tập trung mạnh cho
các ứng dụng thời gian thực. OpenCV được viết trong optimized C và có
thể có các thuận lợi của các multicore processor. Nếu bạn quan tâm tối ưu
tự động xa hơn trên kiến trúc Intel [Intel], bạn có thể mua các thư viện
Integrated Performance Primitives (IPP) [IPP] của Intel, mà gồm các hàm
tối ưu mức thấp trong nhiều lĩnh vực thuật toán khác nhau. OpenCV tự
động dùng IPP library thích hợp lúc chạy nếu thư viện được cài.
Một trong các mục đích của OpenCV là cung cấp một hạ tâng đơn giản đủ
dùng về computer vision mà giúp mọi người dựng các ứng dụng vision
phức tạp một cách nhanh chóng. OpenCV

18


Ket-noi.com kho tài liệu miễn phí


library chứa trên 500 hàm mà trải ra nhiều lĩnh vực trong vision, gồm
factory product inspection, medical imaging, security, user interface,
camera calibration, stereo vision, và robotics. Vì computer vision và
machine learning thường đi chung, OpenCV cũng chứa Machine Learning
Library (MLL) đa mục đích chung.
Thư viện phụ này dc giới hạn về nhận diện mẫu thống kê và clustering.
MLL là cực kỳ hữu ích cho các nhiệm vụ vision mà ở lõi của nhiệm vụ của
OpenCV, nhưng nhìn chung nó được dùng cho bất kỳ vấn đề machine
learning.
Nguồn Gốc Của OpenCV( The Origin of OpenCV)
OpenCV phát triển từ một nghiên cứu Intel khởi xướng cho các ứng dụng
tận dụng CPU cao cấp. Hướng đến kết thúc này, Intel khai trương nhiều
projects gồm real-time ray tracing và 3D display walls. Một trong các tác
giả làm việc cho Intel ở thời điểm đó đang thăm các trường đại học và
thơng báo rằng vài nhóm đại học đỉnh, chẳng hạn MIT Media Lab, có các
hạ tầng computer vision phát triển và mở nội bộ. Thay vì khám phá lại các
hàm cơ sở từ đầu, sinh viên mới có thể bắt đầu dựng ở đỉnh trên cơ sở
những những cái đã có.
Do đó, OpenCV được hiểu như một cách làm hạ tầng computer vision sẵn
có. Với hỗ trợ của Intel’s Performance Library Team,* OpenCV bắt đầu với
lõi của các tiên chuẩn mã và thuật toán được thực hiện được gửi đến các
thành viên của Intel’s Russian library team. Đây là “nơi” của OpenCV: nó
bắt đầu trong phịng thí nghiệm của Intel với công tác từ Soft ware
Performance Libraries group cùng nhau thực hiện và kinh nghiệm tối ưu ở
Russia.
Chủ chốt trong Russian team members là Vadim Pisarevsky, người quản lý,
mã, và tối ưu nhiều trong OpenCV và người vẫn ở trung tâm của nhiều
trong nỗ lực OpenCV. Cùng với anh, Victor Eruhimov hỗ trợ phát triển cấu
trúc ban đầu, và Valery Kuriakin điều hành Russian lab và hỗ trợ lớn cho
nỗ lực này. Có vài mục đích cho OpenCV ở lúc bắt đầu:

• Nghiên cứu vision cao cấp bởi cung cấp khơng chỉ mở mà cịn mã tối ưu
cho kiến trúc vision cơ bản.
• Phổ biến kiến thức vision bởi cung cấp hạ tầng chung mà các developer
có thể dựng, sao cho code sẽ dễ đọc và khả chuyển nhiều hơn.
19


Ket-noi.com kho tài liệu miễn phí

• Các ứng dụng thương mại dựa trên vision cao cấp bởi mã khả chuyển,
thực hiện tối ưu sẵn có miễn phí—với một bản quyền mà khơng địi hỏi các
ứng dụng thương mại là mở hay miễn phí.
Nhưng mục tiêu này tạo thành “lý do” của OpenCV. Cho phép các ứng
dụng computer vision gia tăng nhu cầu cho các processor nhanh. Dẫn đến
nâng cấp các processor nhanh hơn mà tạo ra nhu cầu cho Intel mà bán các
extra software. Đó là lý do mã mở và miễn phí nảy lền từ một hardware
vendor hơn là một công ty software.
Ai dùng OpenCV
Hầu hết nhà khoa học và lập trình viên thực nghiệm computer biết về vài
khía cạnh của vai trị mà computer vision đóng. Nhưng vài mọi người biết
tất cả các cách mà computer vision được dùng. Ví dụ, hầu hết mọi người
biết gì đó về việc dùng của nó trong surveillance, và nhiều cũng biết rằng
nó đang được dùng rộng rãi cho ảnh và video trên Web. Một vài đã thấy
dùng một ít của computer vision trong các giao diện game. Nhưng ít người
người nhận ra hầu hết ảnh aerial và street-map (chẳng hạn trong Google’s
Street View) sử dụng nhiều kỹ thuật hiệu chỉnh camera và image stitching.
Vài nhận biết các ứng dụng niche trong giám sát an toàn, các phương tiện
bay unmanned, hay hay phân tích biomedical. Nhưng ít người biết cách
pervasive machine vision đã ở trong sản xuất: hầu như mọi thứ mà sản xuất
hàng loạt đã tự động kiểm tra ở mm điểm dùng computer vision.

Bản quyền open source cho OpenCV đã được cấu trúc mà bạn có thể dựng
một sản phẩm thương mại dùng tất cả hay một phần OpenCV. Bạn khơng
có nghĩa vụ phải opensource sản phẩm của bản hay return các cải tiến vào
public domain, mà ta hy vọng bạn sẽ. In part vì of những cái này liberal
licensing terms, có cộng đồng lớn người dùng mà bao gồm mọi người từ
các công ty lớn (IBM, Microsoft , Intel, SONY, Siemens, và Google, nêu
tên chỉ một vài) và các trung tâm nghiên cứu (chẳng hạn Stanford, MIT,
CMU, Cambridge, và INRIA). Có một Yahoo groups forum nơi người dùng
có thể gửi các câu hỏi và thảo luận ở
nó có khoảng 20,000 thành viên.
OpenCV là phổ biến trên toàn thế giới, với các cộng đồng người dùng lớn ở
China, Japan, Russia, Europe, và Israel.
Cài đặt OpenCV trên môi trường C++
20


Ket-noi.com kho tài liệu miễn phí

Bước 1: Giải nén thư viện vào thư mục được định sẵn. Giả sử đường dẫn
của mã nguồn là C:\opencv

Bước 2: Tải và cài đặt CMake. Thư mục build chứa những tập tin của phần
mã nguồn được biên dịch sẵn. Phần sources được sử dụng cho cài đặt
manual.

Bước 3: Mở CMake. Trong phần Where is the source code sẽ trỏ đến thư
mục sources đã đề cập lúc trước. Phần Where to build the binaries là nơi
chứa phần thư viện được biên dịch. Trong ví dụ này đường dẫn
là C:\opencv\source\build.


21


Ket-noi.com kho tài liệu miễn phí

Bước tiếp theo nhấn Configure, sau đó chọn bộ generator cho project, trong
phần này sẽ chọn tương ứng với IDE/Compiler mà mã nguồn mình sử
dụng. Đồng thời, nếu máy tính đang ở kiến trúc x86 thì chọn các phiên bản
IDE với tùy chọn là x86 (Ví dụ Visual Studio 14 2015). Đối với các máy
tính kiến trúc x64 thì chọn phiên bản có hậu tố là Win64. Nhấn Finish để
kết thúc cấu hình.
Sau khi configure xong thì danh sách các tùy chọn khi biên dịch để hiện ra
với rất nhiều tùy biến đi kèm. Phần này trong tutorial này sẽ bỏ qua vì mục
tiêu chỉ cần cài đặt bộ thư viện ở mức mặc định là thành cơng rồi. Nếu
khơng có gì thay đổi ta nhấn chọn Generate.
Sau khi quá trình phát sinh mã nguồn hoàn tất, trong thư mục build sẽ xuất
hiện các Project/Solution khác nhau.
Bước 4: Dùng Visual Studio để mở solution có tên là OPENCV. Lưu ý: khi
bản VS này phải trùng với bản VS đã configure trong cmake.

22


Ket-noi.com kho tài liệu miễn phí

Q trình biên dịch cần thực hiện qua 2 bước: (1) biên dịch thư viện cho
quá trình Debug và (2) biên dịch chương trình trong quá trình Release. Để
thực hiện các bước này đơn giản chỉ cần click chọn Target sẽ build rồi sau
đó nhấn F7 và ngồi đợi (Mất khoàng 10-15 phút cho quá trình biên dịch
trên Debug/Release). Kết quả trong quá trình biên dịch sẽ có khoảng 50

projects biên dịch thành cơng, 17 cái bị skip và 2 cái bị fail. Sau khi biên
dịch, ta sẽ có 2 thư mục cần quan tâm nằm trong build. Đó là thư mục lib
chứa tồn bộ dữ liệu cần thiết cho quá trình lập trình; thư mục là dữ liệu
cần thiết để chương trình sau khi build có thể chạy được.
Cấu hình Opencv trên Visual Studio
Bước 1: Tạo một Project (Empty Project).

23


Ket-noi.com kho tài liệu miễn phí

Trước khi thực hiện tiếp các cơng việc cấu hình cho project. Ta cần xác
định rõ sẽ cần cấu hình những thơng tin gì:
1.
2.
3.

Nơi chứa header file của OpenCV. Dĩ nhiên ta cần làm điều này để
include các đối tượng, hàm… của OpenCV.
Cấu hình các file cần thiết khi lập trình.
Cấu hình các file cần thiết cho q trình thực thi. Bởi trong Visual Studio
có 2 target khi run bao gồm Debug và Release, nên ta cần phải cấu hình
riêng biệt cho mỗi target đó.
Cấu hình header file
Click chuột phải vào tên project (InstallOpencv) chọn Properties (Hoặc
nhấn Alt + F7).

24



Ket-noi.com kho tài liệu miễn phí

Phía bên phần Sidebar chọn C/C++, General, mục Additional Include
Directories ta trỏ đến thư mục opencv\build\include (khơng
phải sources\build\include). Để đảm bảo ta có thể check bằng cách kiểm tra
xem thư mục include đó có các header file khơng. Xong nhấn OK.
Cấu hình thư viện cho quá trình lập trình
Nhấn Alt + F7 để vào phần Properties của Project. Chọn Thẻ Linker, mục
Additional Library Directories ta trỏ đến thư mục lib\Debug (trong ví dụ
này là: C:\oepncv\sources\build\lib\Debug). Vì đang cấu hình cho target là
Debug nên phần Configuration phải là Debug

25


×