Tải bản đầy đủ (.pdf) (59 trang)

Đơn giản hóa đường cong và ứng dụng trong xử lý ảnh

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 (2.62 MB, 59 trang )

MỤC LỤC
LỜI CAM ĐOAN .................................... Error! Bookmark not defined.
LỜI CẢM ƠN ......................................... Error! Bookmark not defined.
MỤC LỤC................................................................................................1
LỜI NÓI ĐẦU..........................................................................................3
Chương 1..................................................................................................4
NHỮNG VẤN ĐỀ CHUNG TRONG XỬ LÝ ẢNH ................................4
1.1. Giới thiệu .......................................................................................4
1.2. Tổng quan về một hệ thống xử lý ảnh ............................................4
1.3. Các vấn đề cơ bản của xử lý ảnh ....................................................6
1.3.1. Biểu diễn ảnh ..........................................................................6
1.3.2. Khôi phục ảnh .........................................................................6
1.3.3. Biến đổi ảnh ............................................................................7
1.3.4. Phân tích ảnh...........................................................................7
1.3.5. Nhận dạng ảnh ........................................................................7
1.3.6. Nén ảnh...................................................................................8
1.4. Ảnh nhị phân..................................................................................8
1.5. Các ứng dụng của xử lý ảnh .........................................................10
Chương 2................................................................................................11
CÁC THUẬT TOÁN XỬ LÝ ẢNH .......................................................11
2.1. Các phép toán xử lý cơ bản ..........................................................11
2.1.1. Các phép toán tiền xử lý ........................................................11
2.1.2. Kỹ thuật dò tìm đường cong ..................................................15
2.2 Các thuật toán đơn giản hóa đường cong.......................................21
2.2.1. Giới thiệu ..............................................................................21
2.2.2. Khái niệm đơn giản hóa đường cong .....................................22
2.2.3. Các thuật toán........................................................................24
2.2.4. Tổng hợp các thuật toán ........................................................38
2.3. Các thuật toán làm trơn đường cong.............................................40
1



2.3.1. Giới thiệu ..............................................................................40
2.3.2. Thuật toán lọc trung bình.......................................................41
2.4.5. Thuật toán cắt đuôi....................................................................45
Chương 3................................................................................................47
XÂY DỰNG CHƯƠNG TRÌNH ............................................................47
3.1. Giới thiệu .....................................................................................47
3.2. Các chức năng chính của chương trình.........................................47
3.3. Cài đặt chương trình.....................................................................49
KẾT LUẬN ............................................................................................54
TÀI LIỆU THAM KHẢO.......................................................................55
Phụ lục chương trình nguồn:...................................................................56

2


LỜI NÓI ĐẦU
Xử lý ảnh là một lĩnh vực có nhiều ứng dụng liên quan đến nhiều ngành
khác như: hệ thống tin học, lý thuyết thông tin, trí tuệ nhân tạo, nhận dạng…
Trong đó vấn đề xử lý đường cong có rất nhiều ứng dụng trong thực tế. Trong
chương trình học sinh viên chúng em mới chỉ được làm quen và tìm hiểu về xử lý
ảnh qua những thuật toán đơn giản như làm mảnh, lọc ảnh, tìm xương, …Trước
nhu cầu ngày càng cao về ứng dụng xử lý ảnh trong cuộc sống, trong thời gian
làm đồ án Tốt nghiệp này em đã tìm hiểu sâu hơn về môn xử lý ảnh đặc biệt là
vấn đề Đơn giản hóa đường cong và ứng dụng của nó, kết quả được trình bày
trong Đồ án “Đơn giản hóa đường cong và ứng dụng trong xử lý ảnh”.
Đồ án được trình bày thành 3 chương như sau:
Chương 1: Khái quát những vấn đề chung trong xử lý ảnh như biểu diễn,
phân tích, khôi phục, nén ảnh, nhận dạng ảnh, …
Chương 2: Trình bày các thuật toán trong xử lý ảnh như lọc ảnh, tìm

xương, các thuật toán đơn giản hóa và làm trơn đường cong như Thu gọn đỉnh,
Tính khoảng cách trực giao, Douglas – Peucker…
Chương 3: Áp dụng các thuật toán đã tìm hiểu vào xây dựng một chương
trình Xử lý đường cong tự động.
Trong quá trình thực hiện đề tài do chưa có kinh nghiệm nhiều nên em
không tránh khỏi những sai sót nhỏ mong nhận được sự góp ý phê bình của các
thầy cô và các bạn để đề tài hoàn thiện hơn.
Cuối cùng em xin chân thành cảm ơn thầy giáo Phạm Việt Bình đã trực
tiếp hướng dẫn và tận tình chỉ bảo cho em trong suốt quá trình thực hiện đề tài
này.

3


Chương 1
NHỮNG VẤN ĐỀ CHUNG TRONG XỬ LÝ ẢNH
1.1. Giới thiệu
Trong thực tế ảnh là một vùng liên tục về không gian và giá trị độ sáng,
màu sắc được đưa vào máy tính là một ma trận hai chiều tậpcủa các số nguyên
mô tả ảnh. Như vậy trước khi đưa vào máy tính ta phải rời rạc hóa ảnh bằng cách
biến đổi tín hiệu liên tục sang tín hiệu rời rạc thông qua quá trình lấy mẫu và
lượng hóa thành phần giá trị. Trong quá trình này, người ta sử dụng khái niệm
đơn vị ảnh cơ sở mà ta quen gọi là Pixel (điểm ảnh). Như vậy, ảnh là một tập hợp
các điểm ảnh. Khi được số hóa, nó sẽ được biểu diễn bởi một ma trận hai chiều
mà trong đó mỗi phần tử là một giá trị nguyên hoặc một vectơ cấu trúc màu.
Xử lý ảnh là dùng các kỹ thuật xử lý để biến đổi một ảnh sang ảnh mới
theo mục đích của người sử dụng. Xử lý ảnh bao gồm các phương pháp và kỹ
thuật biến đổi, truyền tải hoặc mã hóa các ảnh tự nhiên như dịch, xoay, làm rõ,
xóa lỗi... Cũng như xử lý dữ liệu bằng đồ hoạ, xử lý ảnh số là một lĩnh vực của
tin học ứng dụng. Tuy nhiên, xử lý dữ liệu bằng đồ hoạ đề cập đến những ảnh

nhân tạo, các ảnh này được xem xét như là một cấu trúc dữ liệu và được tạo ra
bởi các chương trình. Đồ hoạ máy tính chủ yếu là tổng hợp các hình ảnh, trong
khi xử lý ảnh là phân tích các ảnh tìm ra các dấu hiệu cơ bản đặc trưng cho ảnh.
Các vấn đề cơ bản của xử lý ảnh gồm: biểu diễn ảnh, tăng cường chất
lượng ảnh, khôi phục ảnh, biến đổi ảnh, phân tích ảnh, nhận dạng ảnh, nén ảnh...

1.2. Tổng quan về một hệ thống xử lý ảnh
Một hệ thống xử lý ảnh hoàn chỉnh bao gồm: thu nhận ảnh, tiền xử lý,
nhận dạng, phân tích ảnh, ra quyết định (Hình1).
Ảnh được số hóa thông qua camera, scaner, máy chụp X-quang, máy ảnh
số, … Ảnh cũng có thể được thu nhận từ vệ tinh qua các bộ cảm ứng. Tiếp theo
là quá trình số hóa để biến đổi tín hiệu tương tự sang tín hiệu rời rạc. Sau đó ảnh
được lưu trữ dưới dạng tệp tin trên máy tính theo một định dạng ảnh chuẩn.
4


Học, lưu dấu hiệu vào
CSDL
Thu
nhận ảnh

Tiền xử


Nén ảnh

Trích chọn dấu hiệu

Hậu
xử lý

(các
quyết
định)

Nhận dạng đặc trưng
CSDL

Hình 1: Cấu trúc của một hệ xử lý ảnh
Tiền xử lý là công việc tăng cường ảnh để nâng cao chất lượng ảnh. Các
thao tác tiền xử lý bao gồm: xóa nhiễu, làm trơn biên, khôi phục ảnh, làm nổi
ảnh, tách cạnh,... Sau đó, ảnh có thể được nén để giảm không gian lưu trữ do kích
thước ảnh thông thường là rất lớn.
Trích chọn dấu hiệu: mỗi đối tượng trong ảnh có các đặc trưng riêng. Các
đặc trưng này được trích chọn phụ thuộc vào phương pháp nhận dạng. Trong một
ứng dụng có nhiều phương pháp nhận dạng, mỗi phương pháp nhận dạng lại có
nhiều phương pháp chọn dấu hiệu khác nhau. Trích chọn dấu hiệu có thể là phát
hiện các đặc tính như biên, phân vùng ảnh, trích chọn các đặc tính... Từ đó có thể
nhận dạng được ảnh thông qua những dấu hiệu đã trích ra với sai số cho phép.
Nhận dạng là quá trình nhận biết và đánh giá các nội dung của ảnh qua
việc phân tích một hình ảnh thành những phần có nghĩa đề phân biệt đối tượng
này với đối tượng khác. Dựa vào đó ta có thể mô tả cấu trúc của hình ảnh ban
đầu. Có thể liệt kê một số phương pháp nhận dạng cơ bản như nhận dạng biên
của các một đối tượng trên ảnh, tách cạnh, trích xương ảnh, phân đoạn hình
ảnh,... Kỹ thuật này được dùng nhiều trong y học (xử lý tế bào, nhiễm sắc thể),
nhận dạng chữ trong văn bản, nhận dang vân tay,...
Hậu xử lý là giai đoạn cuối của quá trình xử lý ảnh dựa trên kết quả ta có
thể so sánh, phân tích đưa ra các kết quả nhận dạng, ví dụ ta nhận ra những
khuôn mặt của tội phạm, đồ vật mẫu, bản đồ địa hình, đánh giá kết quả thi
TEST... Kết quả ra của việc nhận dạng là giúp cho con người trong các xử lý tự
động cần chính xác, kịp thời, nhanh chóng.

5


1.3. Các vấn đề cơ bản của xử lý ảnh
1.3.1. Biểu diễn ảnh
Ảnh có thể biểu diễn dưới dạng tín hiệu tưng tự hoặc tín hiệu số. Trong
biểu diễn số của các ảnh đa mức xám, một ảnh được biểu diễn dưới dạng một ma
trận hai chiều. Mỗi phần tử của ma trận biểu diễn cho mức xám hay cường độ
của ảnh tại vị trí đó. Mỗi phần tử trong ma trận được gọi là một phần tử ảnh,
thông thường kí hiệu là PEL (Picture Element) hoặc là điểm ảnh (Pixel).
Trong quá trình xử lý ảnh, một ảnh thu nhập vào máy tính phải được mã
hóa. Hình ảnh khi lưu trữ dưới dạng tập tin phải được số hóa. Tiêu chuẩn đặt ra
là ảnh phải được lưu trữ thế nào sao cho các ứng dụng khác nhau có thể thao tác
trên các loại dữ liệu này. Một số dạng ảnh đã được chuẩn hóa như GIF, BMP,
PCX, ICO, JPG...
Một số mô hình thường được dùng trong biểu diễn ảnh: Mô hình toán, mô
hình thống kê. Trong mô hình toán, ảnh hai chiều được biểu diễn nhờ các hàm
hai biến trực giao gọi là các hàm cơ sở. Với mô hình thống kê, một ảnh được coi
là một phần tử của một tập hợp đặc trưng bởi các đại lượng như: kỳ vọng toán
học, hiệp biến, phương sai, moment

1.3.2. Khôi phục ảnh
Do những nguyên nhân khác nhau như chất lượng thiết bị thu nhận ảnh,
do nguồn sáng hay do nhiễu, ảnh có thể bị suy biến. Do vậy cần phải khôi phục
lại các suy giảm của ảnh để làm nổi bật một số đặc tính chính của ảnh, làm cho
ảnh gần hơn với trạng thái trước khi ảnh bị biến dạng. Sau đó ta dùng kỹ thuật
tăng cường ảnh, đây là bước quan trọng, tạo tiền đề cho xử lý ảnh. Nó gồm một
loạt các kỹ thuật như: lọc độ tương phản, khử nhiễu, nổi màu mục đích làm rõ
nét hơn các đặc trưng của ảnh để cho việc nhận dạng dễ dàng.


6


1.3.3. Biến đổi ảnh
Thuật ngữ biến đổi ảnh thường dùng để nói tới một lớp các ma trận đơn vị
và các kỹ thuật dùng để lọc, biến đổi ảnh (kỹ thuật mặt nạ). Cũng như các tín
hiệu một chiều được biểu diễn bởi một chuỗi các hàm cơ sở, ảnh cũng có thể
được biểu diễn bởi một chuỗi rời rạc các ma trận cơ sở gọi là ảnh cơ sở. Có nhiều
loại biến đổi được dùng như :
 Biến đổi Fourier, Sin, Cosin, Hadamard,. . .
 Tích Kronecker
 Biến đổi KL (Karhumen Loeve): biến đổi này có nguồn gốc từ khai
triển của các quá trình ngẫu nhiên gọi là phương pháp trích chọn các
thành phần chính.
Do phải xử lý nhiều thông tin, các phép toán nhân và cộng trong khai triển
là khá lớn. Do vậy, các biến đổi trên nhằm làm giảm thứ nguyên của ảnh để việc
xử lý ảnh được hiệu quả hơn.

1.3.4. Phân tích ảnh
Phân tích ảnh liên quan đến việc xác định các độ đo định lượng của một
ảnh để đưa ra một mô tả đầy đủ về ảnh. Các kỹ thuật được sử dụng ở đây nhằm
mục đích xác định biên của ảnh. Có nhiều kỹ thuật khác nhau như lọc vi phân
hay dò theo quy hoạch động.
Người ta cũng dùng các kỹ thuật để phân vùng ảnh. Từ ảnh thu được,
người ta tiến hành kỹ thuật tách hay hợp dựa theo các tiêu chuẩn đánh giá như:
màu sắc, cường độ, ... Các phương pháp được biết đến như mảnh hóa biên, nhị
phân hóa đường biên. Cuối cùng, phải kể đến các kỹ thuật phân lớp dựa theo cấu
trúc của ảnh.

1.3.5. Nhận dạng ảnh

Nhận dạng ảnh là quá trình liên quan đến các mô tả đối tượng mà người ta
muốn đặc tả nó. Quá trình nhận dạng thường đi sau quá trình trích chọn các đặc
tính chủ yếu của đối tượng. Có hai kiểu mô tả đối tượng:
7


 Mô tả tham số (nhận dạng theo tham số)
 Mô tả theo cấu trúc (nhận dạng theo cấu trúc).
Gần đây, một kỹ thuật nhận dạng mới dựa vào kỹ thuật mạng nơron đang
được áp dụng và cho kết quả khả quan cho những cơ sở dữ liệu ảnh quá lớn.
Trên thực tế, người ta đã áp dụng kỹ thuật nhận dạng khá thành công với
nhiều đối tượng khác nhau như nhận dạng vân tay, nhận dạng chữ. Nhận dạng
chữ in hoặc đánh máy phục vụ cho việc tự động hóa quá trình đọc tài liệu, tăng
nhanh tốc độ và chất lượng thu nhận thông tin từ máy tính. Nhận dạng chữ viết
tay (với mức độ ràng buộc khác nhau về cách viết, kiểu chữ, ...) phục vụ cho
nhiều lĩnh vực.

1.3.6. Nén ảnh
Nén ảnh là việc hết sức cần thiết bởi nhu cầu lưu trữ dữ liệu ảnh cũng như
truyền tải trên mạng ngày càng tăng. Lượng thông tin để biểu diễn cho một ảnh là
rất lớn. Nén ảnh giúp giảm không gian lưu trữ và tăng tốc độ truyền trên mạng.
Nhiều phương pháp nén dữ liệu đã được nghiên cứu và áp dụng cho loại dữ liệu
đặc biệt này.

1.4. Ảnh nhị phân
Tuỳ theo vùng các giá trị xám của điểm ảnh, mà các ảnh được phân chia
ra thành ảnh màu, ảnh xám, ảnh nhị phân.
Ảnh nhị phân: Khi trên một ảnh chỉ tồn tại các giá trị 0 hoặc 1 thì ta nói đó
là một ảnh nhị phân hoặc ảnh đen trắng và các điểm ảnh của nó gọi là điểm ảnh
nhị phân mỗi điểm chỉ có giá trị đen hoặc trắng không có các mức xám khác

nhau.
Với ảnh xám: Nếu dùng 8 bit (1 byte) để biểu diễn mức xám, thì số các
mức xám có thể biểu diễn được là 28 hay 256. Mỗi mức xám được biểu diễn dưới
dạng là một số nguyên nằm trong khoảng từ 0 đến 255, với mức 0 biểu diễn cho
mức cường độ tối nhất và 255 biểu diễn cho mức cường độ sáng nhất.

8


Với ảnh màu: Cách biểu diễn cũng tương tự như với ảnh đen trắng, chỉ
khác là các số tại mỗi phần tử của ma trận biểu diễn cho ba màu riêng rẽ gồm: đỏ
(red), lục (green) và lam (blue). Để biểu diễn cho một điểm ảnh màu cần 24 bit,
24 bit này được chia thành ba khoảng 8 bit. Mỗi khoảng này biểu diễn cho cường
độ sáng của một trong các màu chính tổ hợp của các màu ta được nhiều mức biểu
diễn, như vậy mỗi điểm ảnh có thể được mô tả rõ giá trị màu tự nhiên của nó.
Ảnh đa cấp xám được áp dụng trong nhiều lĩnh vực như sinh vật học hoặc
trong công nghiệp. Thực tế chỉ ra rằng bất kỳ ứng dụng nào trên ảnh mức xám
cũng ứng dụng được trên ảnh màu. Ta có thể biến đổi ảnh màu về ảnh xám. Mỗi
điểm của ảnh màu có 3 giá trị (Red, Green, Blue), nếu 3 giá trị này bằng nhau thì
ta có màu xám (Grey), khi đó với mỗi điểm ảnh ta chỉ cần lưu một giá trị của nó.
Xử lý ảnh nhị phân là một phương pháp quan trọng của kỹ thuật xử lý
ảnh. Vì thế phần này sẽ trình bày về ảnh nhị phân và cách chuyển ảnh màu, ảnh
đa cấp xám về ảnh nhị phân.
Việc xử lý ảnh nhị phân là một bước tiền xử lý các ảnh, để phân đoạn và
tách ra các đặc tính. Nhờ vậy ta có thể biết được mối quan hệ tôpô giữa các điểm
ảnh cũng như thực hiện các phép biến đổi ảnh không tuyến tính đạt hiệu quả;
trong quá trình xử lý ảnh các phép biến đổi này dẫn đến sự đơn giản hóa việc
đánh giá ảnh. Việc đếm các điểm ảnh trên ảnh nhị phân đã qua biến đổi tạo điều
kiện thuận lợi cho việc tách ra các đặc tính. Bằng cách sử dụng các ảnh nhị phân
đã qua xử lý như là những mặt nạ đối với các ảnh xám, ta có thể tách ra các vùng

đáng quan tâm của một ảnh xám từ tập hợp các ảnh.
Để tạo ra một ảnh nhị phân, một ảnh xám cần phải được biến đổi thành
một ảnh nhị phân nhờ một quá trình phân đoạn thích hợp. Muốn thế phương pháp
đơn giản nhất là phương pháp tách ngưỡng. Các giá trị nằm ở bên trên ngưỡng
được gán giá trị 1 còn ở bên dưới ngưỡng thì được gán giá trị 0. Việc tìm giá trị
ngưỡng có thể thực hiện tự động nhờ kĩ thuật tách ngưỡng tự động.

9


1.5. Các ứng dụng của xử lý ảnh
Xử lý ảnh số có rất nhiều ứng dụng như làm nổi các ảnh trong y học, khôi
phục lại ảnh do tác động của khí quyển trong thiên văn học, tăng cường độ phân
giải của ảnh truyền hình mà không cần thay đổi cấu trúc bên trong của hệ thống
truyền tải. Nén ảnh trong khi truyền đi xa hoặc lưu trữ, nhập dữ liệu tự động,
nhận dạng chữ trong các ứng dụng văn phòng, nhận dạng mã vạch trong thương
mại, phát hiện cháy rừng qua các ảnh chụp từ vệ tinh, báo bão, dự báo thời tiết,
phát hiện các mục tiêu quân sự, kiểm định sản phẩm, nhận dạng tội phạm, thăm
dò tài nguyên, điều tra khóang sản, véctơ hóa bản đồ, hoạt hình...

10


Chương 2
CÁC THUẬT TOÁN XỬ LÝ ẢNH
2.1. Các phép toán xử lý cơ bản
2.1.1. Các phép toán tiền xử lý
Tiền xử lý là bước xử lý ban đầu sau khi nhận được ảnh từ thiết bị vào
(máy quét, camera số...). Mục đích của bước này là làm cho chất lượng ảnh tốt
hơn hoặc làm đơn giản ảnh đầu vào để việc xử lý ảnh sau đó được thực hiện

nhanh hơn. Ảnh đầu vào có thể chứa nhiễu, các đường cong bị đứt đoạn, các đối
tượng bị dính vào nhau, mờ nhạt giữa vùng ảnh và nền... Quá trình tiền xử lý sẽ
sử dụng các bộ lọc để xóa nhiễu, nối các đường cong bị đứt, tách các đối tượng
bị dính,... Các phép toán dò biên, tách cạnh, tìm xương cũng thường được thực
hiện để tìm ra các điểm cần quan tâm.
Khi ta chỉ quan tâm đến cấu trúc của đối tượng trong ảnh mà không cần
giữ lại màu sắc, bước tiền xử lý cũng giúp chuyển ảnh này sang ảnh đa cấp xám
hoặc ảnh nhị phân khi cần thiết (xử lý ảnh nhị phân đơn giản hơn và tốc độ xử lý
nhanh hơn nhiều và có rất nhiều thuật toán xử lý cho ảnh nhị phân). Đây là một
phương pháp quan trọng của xử lý ảnh số. Ảnh nhị phân cũng thường được dùng
như một mặt nạ để phân đoạn và tách ra các đặc trưng của ảnh màu và ảnh đa cấp
xám. Vì thế ở đây ta sẽ xem xét phương pháp chuyển đổi một ảnh màu hay ảnh
đa cấp xám về ảnh nhị phân
2.1.1.1. Chuyển về ảnh nhị phân
Trước hết, ta cần chuyển ảnh màu về ảnh đa cấp xám. Với ảnh màu, mỗi
điểm ảnh được biểu diễn bằng một cấu trúc màu RGB (Red, Green, Blue). Mỗi
giá trị Red, Green, Blue là một số nguyên nằm trong khoảng từ 0 đến 255. Trong
ảnh xám, các điểm ảnh là một giá trị nguyên từ 0 đến 255 biểu thị cho mức xám
(Grey). Như vậy, ta cần biến đổi 3 giá trị nguyên về một giá trị nguyên. Công
thức chuyển đổi là:
Grey = (Blue + 6*Green + 3*Red) /10
11


Sau khi thu được ảnh xám, ta cần thực hiện một quá trình phân đoạn thích
hợp để thu được ảnh nhị phân. Phương pháp thường được sử dụng là phương
pháp tách ngưỡng. Trong phương pháp này, ta chọn một ngưỡng  >0 thích hợp
cho việc phân tích. Các giá trị nằm ở bên trên ngưỡng được gán giá trị 1 còn ở
bên dưới ngưỡng thì được gán giá trị 0.
1


nếu I(x,y)

0

nếu I(x,y)<

I(x,y) =

Việc tìm giá trị ngưỡng có thể thực hiện tự động nhờ kĩ thuật tách ngưỡng
tự động. Gọi t(g) là số điểm ảnh có giá trị nhỏ hơn hay bằng g, m(g) là giá trị
trung bình của các điểm ảnh có giá trị nhỏ hơn hay bằng g:
g

t ( g )   h(i )
i 0

g

 i.h(i)
m( g ) 

i 0

t( g )

Gọi G là số cấp xám được xét, P là số điểm ảnh được xét:

f (g) 


t(g)
2
* m( g )  m(G  1)  1
P  t (g )

Giá trị ngưỡng cần tìm là , sao cho () = max (g)
2.1.1.2. Lọc ảnh
Do nhiễu điện tử của máy thu hay chất lượng kém của bộ số hóa, ảnh số
thu nhận được và ảnh thực khác nhau khá nhiều. Trong ảnh xuất hiện nhiễu, là sự
đột biến của một điểm ảnh so với các điểm lân cận. Để xóa nhiễu, người ta nghĩ
đến việc biến đổi có tính đến sự ảnh hưởng của các phần tử lân cận bằng cách
lấy “tổ hợp” các điểm lân cận này (trong không gian thực) hay lọc các thành
phần tần số cao (trong không gian tần số). Đây chính là kỹ thuật lọc ảnh. Cơ sở
lý thuyết của kỹ thuật lọc số là dựa trên tính dư thừa thông tin không gian: các
pixel lân cận có thể có cùng hoặc gần cùng một số đặc tính.
12


Các phép toán lọc ảnh dùng để làm tốt ảnh hoặc tách ra các phần đáng
quan tâm của ảnh. Ví dụ như xóa nhiễu, làm trơn, tách cạnh, dò biên, làm rõ, làm
mờ, làm nổi ảnh, ... Hầu hết các phép toán đều sử dụng phép cuộn và mẫu. Mẫu
là một ma trận cửa sổ có kích thước nhỏ và có giá trị tuỳ thuộc vào mục đích lọc,
còn được gọi là mặt nạ. Trong kỹ thuật này, người ta sử dụng một mặt nạ và di
chuyển khắp ảnh gốc, gọi là phép cuộn. Phép cuộn tính theo giá trị trung bình
trọng số trong một cửa sổ. Tuỳ theo cách tổ hợp điểm đang xét với các điểm lân
cận mà ta có kỹ thuật lọc tuyến tính hay phi tuyến. Điểm ảnh chịu tác động của
biến đổi là điểm ở tâm mặt nạ. Ở đây ta chỉ xét các phép lọc tuyến tính.
Cho I là ảnh kích thước M x N, T là ma trận trọng số kích thước m  n:
m 1 n 1


I * T(x, y)    T(i, j) I(x  i, y  j)
i  0 j 0

Công thức trên chính là phép cuộn (nhân xoắn) giữa mặt nạ T và ảnh gốc
I: If = T  I.
Một số mặt nạ mẫu thường dùng:

 1 1 1


T 1   1 1 1
 1 1 1


T1: Lọc nhiễu

 0 0  1


T 4  0 0 0 
1 0 0 


T4: Làm nổi ảnh

 1 3 1


T 2   3 16 3
 1 3 1



T2: Lọc trơn bề mặt

1 1 1


T 5  1 8 1
1 1 1


T5: Làm dịu ảnh

 0 1 0 


T 3    1 4  1
 0 1 0 


T3: Tách cạnh

  1  1  1


T 6    1 15  1
  1  1  1


T6: Làm rõ ảnh


Ngoài các bộ lọc trên, người ta cũng hay dùng bộ lọc Gauss. Bộ lọc này
có ưu điểm là dễ cài đặt và cho chất lượng cao. Bộ lọc Gauss gồm tích chập của
một ảnh I(f) với mặt nạ Gauss G(x,y,): If = G  I với

13


x2  y2
exp(
)
2 2
2
1

G(x,y,)

=

G là mặt nạ hình vuông mà các hệ số của nó là các phần tử rời rạc của
phân bố Gauss. Vì mặt nạ có kích thước (n+1)  (n+1) hữu hạn, còn đường cong
G định nghĩa trên toàn miền thực, do vậy ta cần chọn một khoảng hữu hạn dùng
được. Thường người ta chọn khoảng tin cậy xấp xỉ là 4 (khoảng 95%) hay 6
(khoảng 99.9%).
Người ta cũng chứng minh được rằng với mặt nạ N  N cần N2 phép nhân
và N2-1 phép cộng. Các phương pháp lọc nói trên, nhìn chung làm giảm mức
nhiễu trắng đi Nw lần, với Nw là số phần tử của mặt nạ và hạn chế nhoè sau khi
lọc.

0


1
T9   2

1
0


 1 2 1


T8   2 4 2 
 1 2 1


T8: Lọc Gauss 3  3

1 2 1 0

3 4 3 1
4 8 4 2

3 4 3 1
1 2 1 0 

T9: Lọc Gauss 5  5

Với ảnh đầu vào là ImageIn kích thước N  N, mẫu H kích thước w  w,
thủ tục Filter sẽ tính ảnh đầu ra ImageOut qua phép lọc tuyến tính.
Void Filter( Image ImageIn,ImageOu; Pattern H;

Sizeofimage N ; Sizeofpattern w)
{

For (i=1;i<=N;i++)
For( j=;, j<=N;j++)
{

Sum=0; Lc=(w+1) div 2;
For (k=1;k<= w;k++)
For (l=1;l<= w;l++)
{

Col=i-k+Lc ;Row=j+l+Lc;
If ((Col<>0) && (Col <=N) )
If ((Row<>0) && (Row <=N) )
14


Sum= Sum + ImageIn[Col,Row] * H[k,l]
}
ImageOut[i,j]:=Sum
}
}

2.1.2. Kỹ thuật dò tìm đường cong
Khi xử lý các ảnh, điều mà ta quan tâm là các đặc trưng của các đối tượng
trong ảnh như các đường biên, các điểm cụt, xương của ảnh... Ví dụ khi xử lý
bản đồ, ta cần lấy ra được các đường

Begin


biên của bản đồ, các điểm giao nhau
của các đường. Số lượng đường
cong trong ảnh thường là rất lớn và

Input: Ảnh I

không phải tất cả chúng đều có ích.
Các ứng dụng vectơ hóa bản đồ
thường để người dùng lựa chọn các

Input:
Điểm chọn P

đường cần giữ lại thông qua chọn
một điểm trên đường cong bằng con
trỏ chuột. Như vậy đầu vào cho thuật

Chọn vùng ảnh A:
AI
AP

toán dò tìm đường cong là một điểm
bất kì trên đối tượng trong ảnh.

Tìm xương L của A

Thuật toán cần đưa ra được tập hợp
các điểm liên tục của đường cong
biểu diễn cho đối tượng trong ảnh.


Output:
Đường cong L

Tập điểm này được dùng làm đầu
vào cho các thuật toán xử lý đường
cong khác, ví dụ như đơn giản hóa

Tiếp tục?

đường cong.
Một cách tổng quát, quá trình

End

phát hiện đường cong được thực
15


hiện như lưu đồ bên. Với ảnh I đầu vào và mỗi điểm chọn P, ta chọn được vùng
ảnh A gồm các điểm liên tục có giá trị bằng điểm chọn P và chứa điểm P. Việc
này có thể thực hiện bằng cách áp dụng thuật toán tô màu. Sau đó, một thuật toán
tìm xương cho vùng ảnh A được áp dụng để thu được đường cong mảnh L biểu
diễn cho vùng ảnh hay chính là đối tượng A trong ảnh đầu vào. Đường cong L
chính là đầu ra của thuật toán.
2.1.2.1. Chọn đối tượng trong ảnh
Chọn đối tượng trong ảnh thực chất là chọn một vùng ảnh liên tục trong
đó các điểm ảnh có giá trị bằng nhau. Ở bước thứ nhất trong thuật toán dò tìm
đường cong, với đầu vào là ảnh I và điểm chọn P, ta cần đưa ra một tập hợp các
điểm thuộc vùng ảnh liên tục A chứa điểm P trong I. Điều này được thực hiện

tương tự các thuật toán tô màu. Ở đây, ta biến đổi một chút thuật toán “vết dầu
loang” và thuật toán floodfill (tô màu theo làn) để xác định A.
Với thuật toán “vết dầu loang”, ta xuất phát từ điểm P, thêm P vào A, sau
đó xét bốn điểm liên thông với P. Nếu điểm nào có giá trị bằng P thì gọi đệ qui
thủ tục chọn vùng cho điểm đó.
Giả sử ảnh I đầu vào có kích thước M  N, điểm chọn ban đầu là P(x,y) có
màu là c, ta có thủ tục đệ quy như sau:
void Select(Point P, Color c, PointSet A)
{

if (GetPixel(P) = = c)
{

//Nếu P có màu c

A.Add(P);

//Thêm P vào tập A

Delete(P);

//Xoá điểm P

//Xét 4 điểm liên thông
if (P.x>0)
if (P.x
{ P.x --; Select(P, c, A); }
{ P.x ++; Select(P, r, A); }


if (P.y>0)

{ P.y --; Select(P, c, A); }

if (P.y
{ P.y ++; Select(P, c, A); }

}
}
Thủ tục SelectArea sẽ gọi thủ tục đệ qui trên để thu được tập A.
16


void SelectArea(Point P, PointSet A)
{
//Lấy màu của điểm chọn P

Color cr = GetPixel(P);
Select(P, c, A);

//Gọi thủ tục đệ qui

}
Phương pháp này có ưu điểm là đơn giản, dễ cài đặt. Tuy nhiên nếu ảnh
quá lớn sẽ gây tràn bộ nhớ.
Trong thuật toán tô màu theo làn, ta sẽ tìm điểm trái nhất và phải nhất của
làn chứa điểm P. Làn chứa điểm P là tập hợp các điểm liên tục chứa P, có giá trị
bằng P trên dòng chứa P. Thêm toàn bộ các điểm trong làn vào A và xoá chúng.
Chạy từ đầu đến cuối làn, nếu phát hiện có điểm thuộc làn trên hay làn dưới thì

gọi đệ qui cho điểm đó.
Thủ tục đệ quy cho thuật toán này như sau:
void GetArea(Point P,Color c, PointSet A)
{

xleft=P.x; xright=P.x,
y=P.y;
//Tìm điểm trái nhất trên làn chứa P
while (xleft>0 && c==GetPixel(xleft,y)),xleft--;
//Tìm điểm phải nhất trên làn chứa P
while (xrightfor ( i=xleft; i<=xright; i++)
{
A.Add(Point(i,y)); //Thêm vào tập A
Delete(Point(i,y));

//Xoá điểm tại (i,y)

}
for ( i=xleft; i<=xright; i++)
{
if (y>0 && c==GetPixel(i,y-1)) // Xét làn trên
GetArea(Point(i,y-1), c, A);
if (y
//Xét làn dưới
17


GetArea(Point(i,y+1), c, A);

}
}
2.1.2.2. Tìm xương của đối tượng ảnh
Sau khi chọn được vùng ảnh chứa đối tượng, ta cần tìm ra đường cong
mảnh biểu diễn cho đối tượng đó. Nếu đối tượng là các đường cong, ví dụ đường
biên của các bản đồ thì ta chỉ cần quan tâm đến xương của ảnh. Có rất nhiều
thuật toán tìm xương của ảnh như thuật toán tìm trục trung vị, thuật toán tìm
xương dựa trên các phép toán hình thái học, thuật toán làm mảnh, ...
Trong thuật toán tìm trục trung vị, ta tìm tất cả các điểm ảnh là tâm các
hình vuông nằm trong ảnh có ít nhất hai điểm biên thuộc hai cạnh đối diện. Trục
trung vị cũng có thể coi là xương của ảnh.
Việc tách xương của ảnh cũng có thể thực hiện bằng cách áp dụng các
phép toán hình thái học. Cho ảnh I, lấy k1, Tk là ma trận vuông k  k sao cho
mọi phần tử của nó đều bằng 1. Đặt:
Resultk(I) = Ek(I) – OPENk(Ek(I))
Với E(I) là phép toán co ảnh, D(I) là phép toán giãn ảnh, OPEN(I) =
D(E(I)).
Tìm Sk(I) = max Resultk(I). Đây chính là xương của ảnh.
Một thuật toán tìm xương khác là thuật toán làm mảnh. Ảnh được gọi là
mảnh nếu mọi điểm trong ảnh đều là điểm biên. Với thuật toán này, ta sẽ xét từng
điểm biên và điều kiện xoá, nếu xoá được thì xoá, thực hiện cho đến khi không
còn điểm nào có thể xoá được. Điều kiện xoá điểm biên phải đảm bảo:
 Không làm mất tính chất liên thông
 Không tạo ra lỗ hổng
 Không làm mất điểm cụt
 Các điểm còn lại thuộc trục trung vị
 Bất biến với phép quay tịnh tiến
Với các điều kiện trên, ta có thể xoá các điểm P như sau:
18



A: các điểm có giá trị bằng P
B: các điểm có giá trị khác P
* : các điểm tuỳ ý

Khi xoá các điểm biên, có hai phương pháp: thực hiện song song và tuần
tự. Trong thuật toán tuần tự, ta xét khả năng xoá một điểm, nếu xoá được thì xoá
xong điểm đó rồi mới xét các điểm khác. Trong thuật toán song song, ta xét đồng
thời khả năng có thể xoá của tất cả các điểm, sau đó mới xoá các điểm có thể.
Tức là phải đảm bảo khi xoá một điểm thì không làm ảnh hưởng đến các điểm
khác. Thuật toán tuần tự có khả năng khôi phục ảnh nên thường được dùng trong
nhận dạng chữ. Tuy nhiên, nó lại tạo ra các ngã ba giả nên không dùng được cho
vectơ hóa bản đồ. Ở đây ta sử dụng thuật toán song song.

19


//Kiểm tra một điểm có là biên hay không
BOOL Border(int x, int y)
{

If ( Image[x-1 ][y] ==0 || Image[x-1 ][y] ==0 ||
Image[x-1 ][y] ==0 || Image[x-1 ][y] ==0)
return TRUE;
return FALSE;

}
//Kiểm tra điều kiện xoá
BOOL Deletable(int x, int y)
{


BOOL P0 = Image[x+1][y], P1 = Image[x+1][y-1],
P2 = Image[x][y-1], P3 = Image[x-11][y-1],
P4 = Image[x-1][y], P5 = Image[x-1][y+1],
P6 = Image[x][y+1], P7 = Image[x+1][y+1];
if (P1*P2*P3 == 1 && P5+P6+P7==0) return TRUE;
if (P0*P1*P2 == 1 && P4+P5+P6==0) return TRUE;
if (P0*P1*P7 == 1 && P3+P4+P5==0) return TRUE;
//...
return FALSE;

}
void LamManh()
{

BOOL Manh = FALSE;
Stack

S;
// Khởi tạo ngăn xếp rỗng

S.Empty();
while (!Manh)
{

Manh = TRUE;
for (int i=0; ifor (int j=0; jif (Border(i,j))
if (Deletable(i,j)) //Đẩy các điểm có thể xoá được

{ S.Push(i,j);

//vào ngăn xếp
20


Manh = FALSE;
}
while (!S.IsEmpty) //Xoá tất cả các điểm trong ngăn xếp
{

S.Pop(i,j);Image[i][j] = 0; }

}
}

2.2 Các thuật toán đơn giản hóa đường cong
Trong phần trước chúng ta giới thiệu sơ qua về các thuật toán xử lý ban
đầu sau khi ta thu được ảnh tử camera hay từ máy quét. Bức ảnh thu được ban
đầu được đưa vào xử lý tăng cường nâng cao chất lượng khắc phục những điểm
lỗi, điểm mờ...Sau đó là dò tìm phạm vi giới hạn đường cong, loại bỏ các điểm
thừa, trích lấy xương ảnh. Kết quả của bước tiền xử lý này là dữ liệu đầu vào cho
bước đơn giản hóa và làm trơn.

2.2.1. Giới thiệu
Sau bước tiền xử lý để khắc phục những khiếm khuyết và trích lọc những
đặc trưng để cho các quá trính xử lý tiếp theo ta thu được những ảnh đạt yêu cầu
với mục đích xử lý. Với nhiệm vụ đơn giản hóa đường cong bước tiền xử lý thu
được ảnh là các đường bao mô tả những nét cần giữ lại của ảnh. Phần lớn ảnh thu
được là ảnh nhị phân (với hai màu đen trắng riêng biệt)

Việc đơn giản hóa được ứng dụng nhiều trong lĩnh vực. Trong việc xây
dựng bản đồ, sau khi thu được ảnh của một vùng địa lý nào đó ta trích lọc lấy
những đường bao ranh giới giữa các vùng...Trong lĩnh vực điều khiển tự động
hóa chế tạo cơ khí khi thiết kế sản phẩm đưa vào cho các rô bốt tự động hóa cắt
gọt phôi thành sản phẩm. Trong việc nội suy các đồ thị theo dõi những quy trình
sản xuất...
Ngày nay việc xử lý tự động được ứng dụng ngày càng nhiều trong các hệ
thống điều khiển. Xử lý ảnh và cụ thể là phương pháp đơn giản hóa đường cong
rất cần để thu gọn dữ liệu tăng tốc độ xử lý giảm bớt không gian lưu trữ.
21


2.2.2. Khái niệm đơn giản hóa đường cong
Các đối tượng trong các ứng dụng đồ họa và xử lý bản đồ số hóa như các
hình ảnh, các đường biên trên bản đồ... thường được biểu diễn bằng một tập các
đường cong, trong đó mỗi đường cong là một chuỗi các đoạn thẳng liên tục.
Trong các cơ sở dữ liệu bản đồ, dữ liệu ảnh thường được lưu dưới dạng
vectơ thay cho dạng ma trận nhằm giảm không gian lưu trữ. Khi vectơ hóa bản
đồ theo phương pháp thủ công, người ta lấy mẫu liên tục khi con trỏ được di
chuyển dọc theo đường vẽ tay. Mật độ tọa độ trong kiểu số hóa này luôn được
xác định bởi khoảng thời gian lấy mẫu, dẫn đến phát sinh các dữ liệu thừa. Với
hầu hết các nhu cầu thực tế thì các dữ liệu thừa này cần được loại bỏ. Việc tổng
hợp dữ liệu bản đồ để nhận được bản đồ tỉ lệ nhỏ hơn từ bản đồ có tỉ lệ lớn đã
dẫn đường cho sự phát triển các thuật toán cho một loạt các phép toán tổng hợp,
trong đó có đơn giản hóa đường cong. Mục tiêu chính khi giữ lại dữ liệu bản đồ
kĩ thuật số tuyến tính là tạo ra một sự biểu diễn chính xác của các đường tự
nhiên, với thời gian xử lý và dung lượng lưu trữ nhỏ nhất. Khi mà máy tính ngày
càng được sử dụng nhiều trong khoa học nghiên cứu bản đồ tự động, một thuật
toán hiệu quả là cần thiết cho công việc trích chọn và đơn giản hóa.
Ta có thể mô tả ý nghĩa của việc đơn giản hóa đường cong như hình sau:

Đường cong đơn giản
hoá (sai số quá lớn)

Đường cong
ban đầu

Đường cong đơn
giản hoá (chấp
nhận được)

a) Đường cong gốc và các đường đơn giản hóa

22


b) Đường cong thu được sau khi đơn giản hóa (chấp nhận được)
Hình 2. Đơn giản hóa đường cong
Bài toán đơn giản hóa đường cong có thể phát biểu một cách tổng quát
như sau: "Một tập hợp có thứ tự của n +1 điểm trong mặt phẳng, {V0, V1, …,
Vn}, tạo lên một xích nhiều cạnh - một chuỗi C gồm n các đoạn thẳng V0V1, …,
Vi Vi+1,... Vn-1 Vn. Đơn giản hóa đường cong phải đưa ra một chuỗi C’ với số
đoạn ít hơn mà vẫn biểu diễn tốt chuỗi C".
“Biểu diễn tốt” có thể có rất nhiều nghĩa. Ví dụ, đó có thể là yêu cầu C và
C’ phải có khoảng cách gần nhau, hay diện tích giữa C và C’ là nhỏ, hay các
điểm tới hạn của C phải trùng với C’. Trong cài đặt, các thuật toán thường làm
việc với một khoảng sai số cho trước. Đường cong sau khi đơn giản hóa phải
không có điểm nào cách đường ban đầu một khoảng nhỏ hơn sai số đã cho. Như
vậy, mục đích của đơn giản hóa đường cong là:
 Giảm không gian lưu trữ: có thể giảm tập dữ liệu đi 75%, dẫn đến khôi
phục và quản lý dữ liệu nhanh hơn.

 Xử lý vectơ nhanh hơn, một đường biên đa giác được đơn giản hóa sẽ
làm giảm số đoạn biên phải kiểm tra để tô bóng hoặc lấp đầy trong các
thuật toán xử lý đa giác.
 Giảm thời gian vẽ hình do số điểm và số cạnh của đa giác giảm đi nên
thời gian vẽ giảm đi.

23


2.2.3. Các thuật toán
Vì tầm quan trọng của đơn giản hóa đường cong, có rất nhiều các thuật
toán đơn giản hóa đường cong đã được phát triển.
Chúng ta sẽ xét một số thuật toán tiêu biểu giảm số điểm trong đường
cong để đưa ra đường cong đơn giản hóa xấp xỉ với đường ban đầu với một sai
số xác định. Hầu hết các thuật toán này đều làm việc với số chiều bất kỳ vì chúng
chỉ phụ thuộc vào số chiều trong việc tính khoảng cách giữa điểm và đường
thẳng. Do đó, chúng có thể áp dụng tùy ý cho các đường cong 2D hoặc 3D được
xấp xỉ bởi một đa giác nhiều cạnh.
Với mỗi thuật toán trình bày ở đây đồ án sẽ nêu những nét cơ bản về thuật
toán đã được nghiên cứu; nhận xét, phân tích đánh giá thuật toán dựa trên một số
tiêu chí:
 Độ sai số so với đường cong ban đầu dựa trên sai số miền diện tích
giữa đường cong ban đầu và đường cong rút gọn.
 Độ phức tạp của thuật toán
 Tốc độ xử lý của thuật toán
Sau đó đồ án nghiên cứu đề xuất những hướng cải tiến mới để nâng cao
hiệu quả của thuật toán.
2.2.3.1. Thuật toán thu gọn đỉnh
* Thuật toán
Thuật toán thu gọn đỉnh là thuật toán xử lý lược bỏ bớt một số các đỉnh

lân cận đỉnh được chọn một khoảng cách nhỏ hơn sai số ε. Trước tiên ta chọn
khoảng sai số ε thích hợp đạt yêu cầu đơn giản hóa sau đó xử lý loại bỏ các điểm
không thỏa mãn. Thao tác này duyệt trên toàn bộ đường cong.
Thuật toán thu gọn đỉnh là một thuật toán rất nhanh với độ phức tạp là
O(n). Nó là thuật toán nhanh nhất và đơn giản nhất nhưng đưa ra kết quả thô
nhất. Tuy nhiên nó có thể được sử dụng ở giai đoạn tiền xử lý trước khi áp dụng
các thuật toán khác. Điều này dẫn đến một thuật toán kết hợp nhanh hơn bởi thu

24


gọn đỉnh có thể giảm một cách đáng kể số đỉnh còn lại cho đầu vào của các thuật
toán khác.
Trong thuật toán thu gọn đỉnh, các điểm liên tục ở quá gần nhau được
giảm xuống thành một điểm đơn. Ví dụ, nếu một đa giác đang được vẽ trên màn
hình máy tính, các điểm liên tục có thể được vẽ tại cùng một điểm nếu chúng gần
nhau hơn một sai số cố định của ứng dụng. Trong hiển thị bản đồ địa lý cỡ lớn,
hai đỉnh của một đường biên có thể cách nhau khoảng 500 m (hoặc hơn), mà vẫn
chỉ được hiển thị tại một điểm và đoạn đường biên nối chúng cũng chỉ được vẽ
tại một điểm. Người ta muốn loại bỏ các đỉnh thừa để các đỉnh liên tục được chia
ra vài điểm, và các cạnh biên không chỉ là một điểm.
Với thuật toán này, một đỉnh của đa giác bị loại bỏ khi khoảng cách từ nó
tới đỉnh tắt trước đó nhỏ hơn một khoảng sai số tối thiểu ε > 0. Cụ thể, sau khi cố
định lại một đỉnh tắt V0, các đỉnh liên tục Vi được kiểm tra và bị loại bỏ nếu
chúng cách V0 một khoảng nhỏ hơn ε. Ngược lại nếu khoảng cách đó lớn hơn ε,
thì đỉnh đó được chấp nhận như là một phần của đa giác được đơn giản hóa mới,
và nó trở thành đỉnh tắt mới cho bước tiếp theo của đơn giản hóa đường cong. Do
đó, các đoạn biên kết quả giữa các điểm được chấp nhận là lớn hơn sai số ε.
Thuật toán được mô tả trên hình sau:


Đường cong ban đầu
Khoảng sai số 
a) Đường cong ban đầu có 15 điểm

25


×