MỤC LỤC
MỤC LỤC 1
DANH MỤC CÁC HÌNH VẼ 3
DANH MỤC CÁC BẢNG BIỂU 4
THÔNG TIN KẾT QUẢ NGHIÊN CỨU 5
MỞ ĐẦU 6
CHƯƠNG 1 GIỚI THIỆU CHUNG VỀ XỬ LÝ ẢNH 8
1.1 Tổng quan về hệ thống xử lý ảnh 8
1.2 Những vấn đề cơ bản trong xử lý ảnh 9
1.2.1 Những khái niệm liên quan 9
1.2.2 Biểu diễn ảnh 14
1.2.3 Tăng cường ảnh 16
1.2.4 Phân vùng ảnh 17
1.2.5 Trích chọn đặc tính 17
1.2.6 Nhận dạng ảnh 17
1.2.7 Nén ảnh 18
1.3 Các định dạng ảnh cơ bản 18
1.3.1 Ảnh BMP (Bitmap) 19
1.3.2 Ảnh JPEG (Joint Photographic Experts Group) 19
1.3.3 Ảnh GIF (Graphics Interchange Format) 19
1.3.4 Ảnh WMF (Windows Metafiles) 19
CHƯƠNG 2 MỘT SỐ BÀI TOÁN VỀ XỬ LÝ ẢNH 20
2.1 Các bài toán cải thiện ảnh sử dụng toán tử điểm 20
2.1.1 Tăng giảm độ sáng 20
2.1.2 Tăng độ tương phản 21
2.1.3 Biến đổi âm bản 23
2.1.4 Biến đổi ảnh đen trắng 23
2.1.5 Các bài toán với lược đồ xám(Histogram) 24
2.2 Một số bài toán về lọc nhiễu ảnh 26
2.2.1 Phép cuộn (Tính chập) và mẫu (nhân chập) 27
2.2.2 Làm trơn nhiễu bằng lọc tuyến tính 28
2.2.3 Làm trơn nhiễu bằng lọc phi tuyến 31
2.3 Bài toán về phát hiện biên ảnh 33
2.3.1 Khái niệm, ý nghĩa của biên trong xử lý ảnh 33
2.3.2 Các phương pháp phát hiện biên 34
CHƯƠNG 3 CHƯƠNG TRÌNH ỨNG DỤNG 43
3.1 Giới thiệu về chương trình 43
3.2 Các chức năng của chương trình 44
3.2.1 Chức năng thao tác với file ảnh 44
3.2.2 Chức năng “Chỉnh sửa” 45
3.2.3 Chức năng “Xử lý điểm ảnh” 46
3.2.4 Chức năng “Lọc ảnh” 49
3.2.5 Chức năng dò biên(Edge Detection) 50
3.2.6 Chức năng Zoom ảnh 51
3.3 Một số hàm và thủ tục chính trong chương trình 51
3.3.1 Mở một file ảnh 51
3.3.2 In ảnh lên Form 51
3.3.3 Lưu File ảnh sau xử lý 52
3.3.4 Hàm Undo ảnh 52
3.3.5 Hàm thực hiện Zoom ảnh 52
3.3.6 Hàm khai báo mặt nạ nhân chập (mẫu) 53
3.3.7 Hàm thực hiện nhân chập ma trận 53
3.3.8 Hàm thực hiện lọc trung vị 55
3.3.9 Hàm phát hiện và làm nổi biên 57
3.3.10 Hàm resize – Thay đổi kích thước ảnh 61
KẾT LUẬN 64
TÀI LIỆU THAM KHẢO 65
PHỤ LỤC 66
71 trang |
Chia sẻ: lethao | Lượt xem: 18185 | Lượt tải: 1
Bạn đang xem trước 20 trang tài liệu Đề tài Lập trình một số bài toán cơ bản trong xử lý ảnh số, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
ớc rất lớn.
Ảnh JPEG (Joint Photographic Experts Group)
Đây là một định dạng ảnh được hỗ trợ bởi nhiều trình duyệt web. Ảnh JPEG được phát triển để nén dung lượng và lưu trữ ảnh chụp, và được sử dụng tốt nhất cho đồ họa có nhiều màu sắc, ví dụ như là ảnh chụp được scan. File Ảnh JPEG là ảnh Bitmap đã được nén lại.
Ảnh GIF (Graphics Interchange Format)
Ảnh GIF được phát triển dành cho những ảnh có tính chất thay đổi. Nó được sử dụng tốt nhất cho đồ họa có ít màu, ví dụ như là ảnh hoạt hình hoặc là những bức vẽ với nhiều đường thẳng. File ảnh GIF là những ảnh Bitmap được nén lại.
Có hai sự khác nhau cơ bản giữa ảnh GIF và ảnh JPEG:
+ Ảnh GIF nén lại theo cách giữ nguyên toàn bộ dữ liệu ảnh trong khi ảnh JPEG nén lại nhưng làm mất một số dữ liệu trong ảnh.
+ Ảnh GIF bị giới hạn bởi số màu nhiều nhất là 256 trong khi ảnh JPEG không giới hạn số màu mà chúng sử dụng.
Ảnh WMF (Windows Metafiles)
Là một tập hợp các lệnh GDI dùng để mô tả ảnh và nội dung ảnh. Có hai ưu điểm khi sử dụng ảnh WMF: kích thước file WMF nhỏ và ít phụ thuộc vào thiết bị hiển thị hơn so với ảnh Bitmap.
MỘT SỐ BÀI TOÁN VỀ XỬ LÝ ẢNH
Các bài toán cải thiện ảnh sử dụng toán tử điểm
Xử lý điểm ảnh thực chất là biến đổi giá trị một điểm ảnh dựa vào giá trị của chính nó mà không hề dựa vào các điểm ảnh khác. Có hai cách tiệm cận với phương pháp này. Cách thứ nhất dùng một hàm biến đổi thích hợp với mục đích hoặc yêu cầu đặt ra để biến đổi giá trị mức xám của điểm ảnh sang một giá trị mức xám khác. Cách thứ hai là dùng lược đồ mức xám (Gray Histogram). Về mặt toán học, toán tử điểm là một ánh xạ từ giá trị cường độ ánh sáng u(m, n) tại toạ độ (m, n) sang giá tri cường độ ánh sáng khác v(m, n) thông qua hàm f, tức là:
(2.1)
Nói một cách khác, toán tử điểm là toán tử không bộ nhớ, ở đó một mức xám được ánh xạ sang một mức xám: v = f (u). Ứng dụng chính của các toán tử điểm là biến đổi độ tương phản của ảnh. Ánh xạ f khác nhau tùy theo các ứng dụng. Các dạng toán tử điểm được giới thiệu cụ thể như sau:
Tăng giảm độ sáng
Giả sử ta có ảnh đầu vào I ~ kích thước (m x n) và số nguyên c
Khi đó, kỹ thuật tăng, giảm độ sáng được thể hiện qua thuật toán:
B1: Với mỗi điểm ảnh, thực hiện phép cộng mức xám của nó với giá trị c
for (int i = 0; i < m; i + +)
for (int j = 0; j < n; j + +)
I [i, j] = I [i, j] + c;
B2: Gán giá trị độ xám mới cho điểm ảnh đầu ra.
Nếu c > 0: ảnh sáng lên.
Nếu c < 0: ảnh tối đi.
Để minh họa cho bài toán này ta xem xét một ví dụ về sự thay đổi của ảnh gốc sau khi ta cho tăng độ sáng của nó là c =100.
Ảnh gốc
Ảnh sau khi tăng mức sáng c = +100
Hình 21 Ảnh sau khi tăng độ sáng (c =100)
Tăng độ tương phản
Trước tiên cần làm rõ khái niệm độ 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 là quyết định. Thực tế chỉ ra rằng hai đối tượng có cùng độ sáng nhưng đặt trên hai nền khác nhau sẽ cho cảm nhận sáng 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 một 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ể thay đổi tùy ý theo ý muốn theo hàm sau:
(2.2)
Các độ dốc a, b, g xác định độ tương phản tương đối. L là số mức xám cực đại. Ta có:
α = β = γ =1 ảnh kết quả trùng với ảnh gốc.
α, β, γ > 1 dãn độ tương phản.
α, β, γ < 1 co độ tương phản.
Hình 22 Biểu đồ dãn độ tương phản
Thuật toán:
B1: Nhập vào các cận a, b, Va và Vb.
B2: Tính giá trị các đại lượng .
B3: For(Với mỗi điểm ảnh)
Nếu giá trị xám I của nó < a: I(x,y)= I(xy)*
Nếu giá trị xám I của nó a < I < b thì:
Nếu giá trị xám I của điểm ảnh I > b thì:
B4: Gán giá trị xám mới trở lại cho điểm ảnh.
Hình minh họa:
Ảnh gốc
Ảnh sau khi tăng tương phản
Hình 23 Ảnh gốc và ảnh kết quả sau khi tăng tương phản
Biến đổi âm bản
Âm bản nhận được bằng phép biến đổi âm. Phép biến đổi này có rất nhiều hữu ích cho các phim ảnh dùng trong y học.
(2.3)
Giả sử ta có ảnh I ~ kích thước (m x n). Khi đó: Kỹ thuật biến đổi âm bản được thể hiện qua thuật toán sau:
B1: Với mỗi điểm ảnh, thực hiện phép toán thay đổi mức xám của nó
for (int i = 0; i < m; i + +)
for (int j = 0; j < n; j + +)
I[i,j] = 255 – I[i,j];
B2: Gán giá trị mức xám mới cho ảnh đầu ra
Hình minh họa:
Ảnh gốc
Ảnh được biến đổi âm bản
Hình 24 Ảnh gốc và ảnh sau khi biến đổi âm bản
Biến đổi ảnh đen trắng
Để chuyển đổi một ảnh màu sang ảnh đen trắng ta dùng kĩ thuật tách ngưỡng. Giả sử ta có ảnh I ~ kích thước (m x n), hai số Min, Max và ngưỡng θ. Khi đó: Kỹ thuật tách ngưỡng được thể hiện qua thuật toán sau:
B1: Thực hiện vòng lặp,thay đổi giá trị độ xám của từng điểm ảnh
for (i = 0; i < m; i + +)
for (j = 0; j < n; j + +)
I [i, j] = I [i, j] > = θ? Max: Min (Ở trường hợp này Max =1, Min = 0)
B2: Gán các giá trị độ xám mới cho ảnh đầu ra.
Hình minh họa:
Ảnh gốc
Ảnh đen trắng
Hình 25 Ảnh gốc sau khi được tách ngưỡng
Kỹ thuật chuyển ảnh thành ảnh đen trắng được ứng dụng khi quét và nhận dạng văn bản có thể xảy ra sai sót “nền thành ảnh” hoặc “ảnh thành nền” dẫn đến ảnh bị đứt nét hoặc dính.
Các bài toán với lược đồ xám(Histogram)
Hiển thị lược đồ xám của ảnh
Theo định nghĩa của lược đồ xám, thì việc xây dựng nó là khá đơn giản. Thuật toán xây dựng lược đồ xám có thể miêu tả như sau:
Bắt đầu
H là bảng chức lược đồ xám (là véc tơ có N phần tử)
B1:. Khởi tạo bảng và đặt tất cả các phần tử của bảng là 0.
B2: Tạo bảng
Với mỗi điểm ảnh I(x,y) tính H[I(x,y)] = H[I(x,y)] + 1
B3: Tính giá trị Max của bảng H. Sau đó hiện bảng trong khoảng từ 0 đến Max.
Kết thúc
Hình minh họa:
Ảnh gốc
Lược đồ mức xám
Hình 26 Minh họa về Histogram của ảnh
Lược đồ xám là một công cụ hữu hiệu dùng trong nhiều công đoạn của tăng cường xử lý ảnh.
Cân bằng lược đồ xám
Với một ảnh tự nhiên được lượng hóa một cách tuyến tính, phần lớn các điểm ảnh có giá trị thấp hơn độ sáng trung bình. Trong miền tối, ta khó có thể cảm nhận các chi tiết của ảnh. Thực tế cần phải khắc phục nhược điểm này bằng cách biến đổi lược đồ xám. Người ta biến đổi lược đồ sao cho tiến gần tới lược đồ định trước. Có nhiều phương pháp, trong đó phương pháp phổ dụng nhất là san bằng lược đồ.
Nếu ảnh có kích thước (p x p) và ảnh kết quả được mã hóa trên mức xám thì số điểm ảnh cho một mức xám trong lược đồ cân bằng lý tưởng sẽ là hằng số và bằng (là số mức xám đầu xa). Trên thực tế, thường nhỏ hơn (số mức xám ban đầu).
Ta có thuật toán cân bằng lược đồ xám như sau:
Với bức ảnh đầu vào I(m,n)
B1: Tính tổ chức đồ H[i] của ảnh.
B2: Tính tỷ lệ xuất hiện của mức xám H[i] trên ảnh(H[i]/m*n).
B3: Tính mật độ xác suất của các mức xám H[i](Hc[i]=H[i]+H[i-1]).
B4: San bằng mức xám và gán các mức xám mới cho điểm ảnh đầu ra.(Eq[i]=255*hc[i]).
Hình minh họa:
Ảnh gốc
Ảnh sau khi cân bằng lược đồ xám
Hình 27 Minh họa về cân bằng lược đồ xám
Một số bài toán về lọc nhiễu ảnh
Thường thì ảnh thu nhận sau khi được số hóa có thể gây nhiễu. Trên thực tế tồn tại nhiều loại nhiễu, tuy nhiên người ta thường xem xét 3 loại nhiễu chính: nhiễu cộng, nhiễu nhân và nhiễu xung:
Nhiễu cộng
Nhiễu cộng thường phân bố khắp ảnh. Nếu gọi ảnh quan sát (ảnh thu được) là Xqs, ảnh gốc là Xgoc, nhiễu là η, ảnh thu được có thể biểu diễn bởi:
(2.4)
Nhiễu nhân
Nhiễu nhân thường phân bố khắp ảnh và ảnh thu được sẽ biểu diễn với công thức:
(2.5)
Nhiễu xung
Nhiễu xung thường gây đột biến tại một số điểm ảnh.
Cơ sở để xử lý điểm ảnh bị nhiễu là dùng thông tin của các điểm ảnh lân cận. Thay thế giá trị điểm ảnh cần xử lý bằng tổ hợp giá trị các điểm ảnh lân cận. Việc thay thế dựa trên giả định là các điểm ảnh lân cận có giá trị gần giống với điểm ảnh cần xét.
Về kỹ thuật, người ta sử dụng một mặt nạ di chuyển khắp ảnh gốc, từ trái qua phải và từ trên xuống dưới. Ở mỗi vị trí của ảnh, tính toán theo các điểm trong mặt nạ và thay vào giá trị cho điểm ở tâm mặt nạ. Theo các loại mặt nạ khác nhau mà có các cách tính khác nhau, tổ hợp giá trị các điểm lân cận điểm được xét.
Phép cuộn (Tính chập) và mẫu (nhân chập)
Tính chập là một khái niệm rất quan trọng trong xử lý ảnh. Toán tử tính chập được định nghĩa như sau:
Giả sử ta có ảnh I kích thước (M x N), mẫu T có kích thước (m x n) khi đó, ảnh I cuộn theo mẫu T được xác định bởi công thức:
(2.6)
Hoặc:
(2.7)
VD: Giả sử ta có:
Và
Khi đó:
Nhận xét:
- Trong quá trình thực hiện phép cuộn có một số thao tác ra ngoài ảnh, ảnh không được xác định tại những vị trí đó dẫn đến ảnh thu được có kích thước nhỏ hơn.
- Ảnh thực hiện theo 2 công thức trên chỉ sai khác nhau 1 phép dịch chuyển để đơn giản ta sẽ hiểu phép cuộn là theo công thức đầu tiên.
Làm trơn nhiễu bằng lọc tuyến tính
Trong kỹ thuật lọc tuyến tính, ảnh sẽ là tổng trọng số hay là trung bình trọng số các điểm lân cận với nhân chập hay mặt nạ. Nguyên tắc lọc theo tổng trọng lượng được trình bày trong hình Hình 28. Thí dụ tâm mặt nạ là điểm P5 thi điểm P5 mới sẽ được tính theo công thức sau:
(2.8)
Hình 28 Tâm mặt nạ và các điểm lân cận
Ta có thuật toán cho lọc tuyến tính:
B1: Nhập vào ma trận nhân chập H.
B2: Thực hiện vòng lặp:
For (int i=0 ; i<=chiều cao ảnh -2 ; i++) //trừ đi biên ảnh ngang.
For(int j=0 ; j<= chiều rộng ảnh -2; j++) // trừ đi biên ảnh dọc.
{
Thực hiện nhân chập:
}
B3: Gán giá trị trung bình này cho ảnh đầu ra.
Lọc trung bình không gian
Với lọc trung bình, mỗi điểm ảnh được thay thế bằng trung bình trọng số của các điểm lân cận và được định nghĩa như sau:
(2.9)
Nếu trong kỹ thuật lọc trên, ta dùng các trọng số như nhau, phương trình trở thành:
(2.10)
Với + y(m,n): Ảnh đầu vào.
+ v(m,n): Ảnh đầu ra.
+ w(m,n): Là cửa sổ lọ.c
+ a(k,l): Là trọng số lọc.
Với và là số điểm ảnh trong cửa sổ lọc W.
Lọc trung bình có trọng số chính là thực hiện chập ảnh đầu vào với nhân chập H. Nhân chập H trong trường hợp này có dạng:
Hình minh họa:
Ảnh gốc
Ảnh sau khi lọc trung bình không gian
Hình 29 Minh họa lọc trung bình không gian
Lọc thông thấp
Lọc thông thấp thường được sử dụng để làm trơn nhiễu. Về nguyên lý giống như đã trình bày ở trên. Trong kỹ thuật này người ta hay dùng một số nhân chập sau:
Ta dễ dàng nhận thấy khi b=1, chính là nhân chập (Lọc trung bình)
Để hiểu rõ hơn bản chất khử nhiễu cộng của các bộ lọc này, ta viết lại phương trình thu nhận ảnh dưới dạng:
(2.11)
Trong đó [m,n] là nhiễu cộng có phương sai . Như vậy, theo cách tính của lọc trung bình ta có:
(2.12)
Hay:
(2.13)
Như vậy nhiễu cộng trong ảnh đã giảm đi Nw lần.
Hình minh họa:
Ảnh gốc
Ảnh sau khi lọc thông thấp
Hình 210 Minh họa lọc thông thấp
Lọc thông cao
Các kỹ thuật lọc trên là lọc thông thấp. Nó được dùng để lọc nhiễu. Ngoài lọc thông thấp, người ta còn sử dụng lọc thông cao. Lọc thông cao dùng để làm nổi bật các chi tiết có tần số không gian cao (thí dụ như các điểm biên) mà không ảnh hưởng đến các chi tiết tần số thấp. Các phần tử có tần số không gian cao sẽ sáng hơn, còn các phần tử có tần số không gian thấp sẽ đen đi. Kỹ thuật lọc thông cao cũng được thực hiện nhờ thao tác nhân chập. Các mặt nạ hay được dùng như:
Hình minh họa:
Ảnh gốc
Ảnh sau khi lọc thông cao
Hình 211 Minh họa lọc thông cao
Các nhân chập thông cao có đặc tính chung là tổng hệ số của bộ lọc bằng 1. Nguyên nhân chính là ngăn cản sự tăng quá giới hạn của các giá trị mức xám (các giá trị điểm ảnh vẫn giữ được giá trị của nó một cách gần đúng không thay đổi quá nhiều với giá trị thực).
Làm trơn nhiễu bằng lọc phi tuyến
Khác với lọc tuyến tính, kỹ thuật lọc phi tuyến coi một điểm ảnh kết quả không phải là tổ hợp tuyến tính của các điểm lân cận. Bộ lọc phi tuyến thường dùng là lọc trung vị (median Filtering), nó khá hiệu quả đối với hai loại nhiễu: nhiễu đốm (speckle noise) và nhiễu muối tiêu (salt-pepper noise).
Lọc trung vị
Trung vị của một chuỗi n phần tử được định nghĩa:
- Nếu n lẻ: có (n-1)/2 phần tử lớn hơn và (n-1)/2 phần tử nhỏ hơn hay bằng .
- Nếu n chẵn: là trung bình cộng của 2 phần tử và sao cho có (n-2)/2 phần tử nhỏ hơn hay bằng và (n-2)/2 phần tử lớn hơn hay bằng .
Kỹ thuật này đòi hỏi giá trị các điểm ảnh trong cửa sổ phải xếp theo thứ tự tăng hay giảm dần so với giá trị trung vị. Kích thước cửa sổ thường được chọn sao ch số điểm ảnh trong cửa sổ là lẻ. Các cửa sổ hay dùng là 3x3, 5x5 hay 7x7.
Thuật toán lọc trung vị:
B1: Quét cửa sổ lọc lên các thành phần của ảnh gốc; điền các giá trị được quét vào cửa sổ lọc.
B2: Lấy các thành phần trong của sổ lọc để xử lý.
B3: Sắp xếp theo thứ tự các thành phần trong cửa sổ lọc.
B4: Lưu lại thành phần trung vị, gán cho ảnh đầu ra.
Hình minh họa:
Ảnh gốc
Ảnh sau khi lọc trung vị
Hình 212 Minh họa lọc ảnh trung vị
Lọc ngoài (Outlier Filter)
Giả thiết rằng có một mức ngưỡng nào đó cho các mức nhiễu (có thể dựa vào lược đồ xám). Tiến hành so sánh giá trị của một điểm ảnh với trung bình số học 8 lân cận của nó. Nếu sự sai lệch này lớn hơn ngưỡng, điểm ảnh này được coi như nhiễu. Trong trường hợp này ta thay thế giá trị của điểm ảnh bằng giá trị trung bình 8 lân cận vừa tính được. Các cửa sổ tính toán thường là 3x3. Tuy nhiên cửa sổ có thể mở rộng đến 5x5 hay 7x7 để đảm bảo tính tương quan giữa các điểm ảnh. Vấn đề quan trọng là xác định ngưỡng đẻ loại nhiễu mà vẫn không làm mất thông tin.
Thuật toán lọc ngoài:
B1: Nhập vào giá trị ngưỡng cho phép.
B2: Quét cửa sổ lọc lên các thành phần của ảnh gốc, điền các giá trị được quét vào cửa sổ lọc.
B3: Lấy các thành phần các trong cửa sổ lọc để xử lý.
B4: Tính giá trị trung bình của 8 giá trị trong cửa sổ lọc (trừ giá trị tâm mặt nạ).
B5: Tính độ chênh lệch giữa giá trị tính được ở B4 và giá trị tâm mặt nạ. Nếu giá trị này lớn hơn ngưỡng cho phép thì gán giá trị tâm mặt nạ đúng bằng giá trị trung bình của 8 giá trị xung quanh.
Bài toán về phát hiện biên ảnh
Khái niệm, ý nghĩa của biên trong xử lý ảnh
Khái niệm biên
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 lân cận nó có ít nhất một điểm trắng.
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 biên trong xử lý ảnh
Trước hết đườ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. Thứ hai, người ta sử dụng biên làm phân cách các vùng xám (màu) cách biệt. Ngược lại, người ta cũng sử dụng các vùng ảnh để tìm đường phân cách.
Hình 213 Các dạng đường biên trong xử lý ảnh
Phân loại các kỹ thuật phát hiện biên
Xuất phát từ các cơ sở trên người ta thường sử dụng hai phương pháp phát hiện biên cơ bản:
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 của ảnh: ta có phương pháp Laplace.
Phát hiện biên gián tiếp
Nếu bằng cách nào đấy, ta phân được ảnh thành các vùng thì đường phân ranh giữa các vùng đó chính là biên. việc phân vùng ảnh thường dựa vào kết cấu (texture) bề mặt của ảnh.
Phương pháp phát hiện biên trực tiếp tỏ ra khá hiệu quả và ít chịu ảnh hưởng của nhiễu, song nếu sự biến thiên độ sáng không đột ngột, phương pháp tỏ ra kém hiệu quả, phương pháp phát hiện biên gián tiếp tuy khó cài đặt, song lại áp dụng khá tốt trong trường hợp này.
Các phương pháp phát hiện biên
Phương pháp Gradient
Phương pháp gradient là phương pháp dò biên cục bộ dựa vào cực đại của đạo hàm. Theo định nghĩa, gradient là một véctơ có các thành phần biểu thị tốc độ thay đổi giá trị của điểm ảnh theo hai hướng x và y. Các thành phần của gradient được tính bởi:
(2.14)
(2.15)
Với dx là khoảng cách giữa các điểm theo hướng x (khoảng các tính bằng số điểm) và tương tự với dy. Trên thực tế, người ta hay dùng với dx = dy = 1.
Trong phương pháp gradient, người ta chia thành 2 kỹ thuật (do dùng 2 toán tử khác nhau): kỹ thuật gradient và kỹ thuật la bàn.
Kỹ thuật Gradient
Từ định nghĩa về Gradient, ta thấy nếu áp dụng nó vào xử lý ảnh, việc tính toán sẽ rất phức tạp, để đơn giản hóa mà không làm mất tính chất của phương pháp Gradient người ta sử dụng một cặp mặt nạ H1 và H2 trực giao (theo 2 hướng vuông góc). Nếu định nghĩa g1, g2 là gradient tương ứng theo 2 hướng x và y, thì biên độ của gradient tại điểm g(m,n) được tính theo công thức:
(2.16)
(2.17)
là hướng của đường biên.
Chú ý: để giảm tính toán, công thức 2.16 được tính gần đúng bởi:
(2.18)
Các toán tử đạo hàm được áp dụng là khá nhiều. Ở đây ta chỉ xét một số toán tử tiêu biểu: Sobel, Prewitt…
Thuật toán dò biên theo kỹ thuật Gradient như sau:
Đầu vào: ma trận ảnh cần tìm biên:
mặt nạ Hx và Hy
Đầu ra: Một ma trận ảnh (chứa các đường biên được tìm thấy).
Giải thuật:
For (mỗi điểm ảnh của ảnh)
if(Nếu điểm ảnh nẳm trên đường viền ảnh)
Gán giá trị các điểm ảnh trên đường viền ảnh = 0(hoặc bằng màu nền ảnh).
else
{
+ Tính xấp xỉ Gradient theo chiều x (Gx): nhân chập với mặt nạ Hx.
+ Tính xấp xỉ Gradient theo chiều y (Gy): nhân chập với mặt nạ Hy.
+ Tính giá trị điểm ảnh theo công thức xấp xỉ G:
G=|Gx|+ |Gy|
+ Nếu giá trị điểm ảnh lớn hơn chỉ số màu của ảnh thì gán giá trị ảnh là giá trị màu lớn nhất.
}
+ Toán tử (mặt nạ) Sobel
Toán tử Sobel được Duda và Hart đặt ra năm 1973 với các mặt nạ có cấu trúc như sau:
Với Hx, Hy lần lượt là mặt nạ theo hướng ngang (x) và hướng dọc (y).
Hình minh họa cho dò biên sử dụng toán tử Sobel:
Ảnh gốc
Dò biên bằng toán tử sobel
Hình 214 Minh họa dò biên sử dụng toán tử Sobel
+ Toán tử (Mặt nạ)Prewitt
Toán tử được Prewitt đưa ra vào năm 1970 sử dụng 2 ma trận:
Với Hx, Hy lần lượt là ma trận theo các hướng ngang (x) và dọc (y).
Hình minh họa cho dò biên sử dụng toán tử Prewitt:
Ảnh gốc
Dò biên bằng toán tử Prewitt
Hình 215 Minh họa dò biên sử dụng toán tử Prewitt
Kỹ thuật La bàn
Về phương pháp kỹ thuật này tương tự kỹ thuật Gradient. Tuy nhiên, điểm khác là kỹ thuật Gradient chỉ lấy đạo hàm theo 2 hướng, còn kỹ thuật la bàn lấy đạo hàm theo 8 hướng chính: Bắc, Nam, Đông, Tây và Đông Bắc, Tây Bắc, Đông Nam, Tây Nam. Bằng cách sử dụng 8 mặt nạ cho 8 hướng khác nhau.
Có nhiều toán tử la bàn khác nhau. ở đây ta xem xét toán tử la bàn Kirsh đặc trưng bởi tám mặt nạ với kích thước 3x3 như sau:
Ký hiệu Ai; i= 1, 2, …,8 là Gradient theo 8 hướng như 8 mặt nạ kể trên, khi đó biên độ Gradient tại điểm ảnh (x,y) được tính theo:
i=1,2,…,8.
(2.19)
Thuật toán dò biên theo kỹ thuật La bàn như sau:
Đầu vào: ma trận ảnh cần tìm biên:
mặt nạ (I = 1,2,…,8).
Đầu ra: Một ma trận ảnh (chứa các đường biên được tìm thấy).
Giải thuật:
For (mỗi điểm ảnh của ảnh)
if(Nếu điểm ảnh nẳm trên đường viền ảnh)
Gán giá trị các điểm ảnh trên đường viền ảnh =0 (hoặc bằng màu nền ảnh).
else
{
+ Tính xấp xỉ Gradient theo các hướng khác nhau:
+ Tính giá trị điểm ảnh theo công thức xấp xỉ G:
(i=1, 2…, 8)
+ Nếu giá trị điểm ảnh lớn hơn chỉ số màu của ảnh thì gán giá trị ảnh là giá trị màu lớn nhất.
}
Hình minh họa cho dò biên sử dụng toán tử la bàn (Kirsh):
Ảnh gốc
Dò biên bằng toán tử La Bàn
Hình 216 Minh họa dò biên sử dụng toán tử La bàn
Phương pháp Laplace
Các kỹ thuật sử dụng phương pháp Gradient khá tốt khi độ sáng có tốc độ thay đổi nhanh, khá đơn giản trên cơ sở các mặt nạ theo các hướng. Nhược điểm của các kỹ thuật Gradient là nhạy cảm với nhiễu và tạo các biên kép làm chất lượng biên thu được không cao.
Để khắc phục hạn chế và nhược điểm của phương pháp Gradient, trong đó sử dụng đạo hàm riêng bậc nhất người ta nghĩ đến việc sử dụng đạo hàm riêng bậc hai hay toán tử Laplace. Phương pháp dò biên theo toán tử Laplace hiệu quả hơn phương pháp toán tử Gradient trong trường hợp mức xám biến đổi chậm, miền chuyển đổi mức xám có độ trải rộng.
Toán tử Laplace được đĩnh nghĩa như sau:
(2.20)
Toán tử Laplace dùng nhiều kiểu mặt nạ khác nhau để xấp xỉ đạo hàm bậc hai. Dưới đây là 3 kiểu mặt nạ hay dùng.
Kỹ thuật laplace cho đường biên mảnh, tức là đường biên có độ rộng bằng một pixel. Tuy nhiên, kỹ thuật này rất nhạy cảm với nhiễu vì đạo hàm bậc hai thường không ổn định.
Gọi G là ma trận điểm thu được sau khi nhân chập ma trận điểm ảnh (của ảnh cần tìm biên) với mặt nạ H2 (Trong chương trình em sử dụng mặt nạ này).
G chính là ma trận điểm ảnh chứa các đường biên cần tìm.
Thuật toán dò biên theo phương pháp Laplace như sau:
Đầu vào: ma trận ảnh cần tìm biên:
mặt nạ H2
Đầu ra: Một ma trận ảnh (chứa các đường biên được tìm thấy).
Giải thuật
For (mỗi điểm ảnh của ảnh)
if(Nếu điểm ảnh nẳm trên đường viền ảnh)
Gán giá trị các điểm ảnh trên đường viền ảnh =0 (hoặc bằng màu nền ảnh).
else
{
+ Tính xấp xỉ Laplace G: nhân chập với mặt nạ H2.
+ Nếu giá trị điểm ảnh lớn hơn chỉ số màu của ảnh thì gán giá trị ảnh là giá trị màu lớn nhất.
}
Hình minh họa cho sử dụng toán tử Laplace:
Ảnh gốc
Dò biên ảnh theo kỹ thuật Laplace
Hình 217 Minh họa dò biên theo kỹ thuật Lalace – H2
Phương pháp dò biên gián tiếp
Dựa trên kỹ thuật phân vùng ảnh, Phương pháp này dò biên theo sự thay đổi mức xám màu của ảnh. Nếu những điểm ảnh nào có cùng màu hoặc có màu khác nhưng khoảng cách màu nằm trong phạm vi cho phép, đồng thời nằm kề nhau sẽ tạo thành một vùng. Khi đó đường phân ranh giữa các vùng đó chính là biên.
Trước hết ta đi tìm hiểu các khái niệm liên quan đến phương pháp:
+ Định nghĩa khoảng cách màu:
Khoảng cách màu là một khái niệm để chỉ sự khác nhau về giá trị màu của các điểm ảnh.
Giả sử a và b là 2 giá trị màu của 2 điểm ảnh. Khoảng cách màu d của a và b được tính như sau:
(2.21)
Trong đó:
Ra: là giá trị màu đỏ tại điểm ảnh
Ga: là giá trị màu xanh (green)tại điểm ảnh
Ba: là giá trị màu xanh da trời (blue) tại điểm ảnh.
Nếu khoảng cách màu d=0 thì 2 điểm ảnh đó có cùng màu.
Đường biên giữ các vùng chính là các đường biên cần tìm.
Thuật toán tìm đường biên dựa vào khoảng cách màu giữa các điểm ảnh:
Đầu vào: Ma trận điểm ảnh, khoảng cách màu tối thiểu
Đầu ra: Ma trận điểm ảnh mới (chứa các đường biên tìm thấy).
For (mỗi điểm ảnh của ảnh)
{
+ Tính khoảng cách màu của điểm ảnh với các điểm ảnh lân cận: Tính theo 8 hướng của điểm ảnh.
+ Tìm khoảng cách màu lớn nhất.
if(khoảng cách màu đó lớn hơn khoảng cách màu cho phép(ngưỡng))
{
Ghi nhận điểm ảnh này là một điểm biên mới.
}
Else
Điểm đó là nền (màu đen)
}
Hình minh họa dò biên theo PP gián tiếp:
Ảnh gốc
Dò biên gián tiếp
Hình 218 Minh họa dò biên theo PP gián tiếp
CHƯƠNG TRÌNH ỨNG DỤNG
Giới thiệu về chương trình
Áp dụng lý thuyết xử lý ảnh được trình bày trong 2 chương trên, em đã xây dựng một chương trình xử lý ảnh bằng ngôn ngữ C#. Chương trình này thực hiện giải quyết các bài toán cơ bản trong xử lý ảnh như là: lọc nhiễu ảnh, dò biên ảnh… Ngoài ra còn có thêm chức năng Zoom và Resize ảnh.
Dưới đây là giao diện chính của chương trình:
Hình 31 Giao diện chính của chương trình
Các chức năng của chương trình
Chức năng thao tác với file ảnh
Hình 32 Các chức năng con thao tác với File ảnh
Chức năng mở một file ảnh(Load ảnh)
File >> Open.
Khi ta chọn chức năng này, một cửa sổ dialog sẽ hiện ra cho phép ta tìm kiếm file ảnh cần load(mặc định là ổ C), sau khi tìm được file ảnh chọn ok và file ảnh sẽ được load lên form, từ đó ta có thể thực hiện nhiều phép xử lý tiếp theo với bức ảnh.
Hình 33 Form load ảnh
Chức năng lưu ảnh (Save)
File >> Save.
Tương tự như chức năng load ảnh, khi chọn chức năng lưu ảnh thì một cửa sổ dialog sẽ hiện ra cho phép ta chọn nơi lưu lại bức ảnh sau khi đã xử lý vào máy tính.
Hình 34 Form lưu ảnh sau xử lý
Chức năng “Chỉnh sửa”
Hình 35 Các chức năng con trong chỉnh sửa ảnh
Chức năng này cho phép ta thực hiện các thao tác chỉnh sửa ảnh. Bao gồm:
Chức năng “Undo”:
Cho phép ta trở lại với thao tác xử lý ảnh gần nhất.
Chức năng Resize:
Cho phép ta thay đổi kích thước của ảnh thông qua các giá trị kích thước mới được nhập vào Form Resize:
Hình 36 Form resize kích thước cho ảnh
Chọn chế độ lọc Bilinear để ảnh sau khi resize được rõ nét và mịn hơn.
Chức năng “Xử lý điểm ảnh”
Hình 37 Chức năng “Xử lý điểm ảnh”
Chức năng này cho phép chúng ta thực hiện các xử lý ảnh đơn giản sử dụng toán tử điểm (thao tác trên từng pixel ko liên quan đến các pixel lân cận). Bao gồm các chức năng con sau:
Tương phản:
Chức năng cho phép ta thay đổi độ tương phản cho ảnh(tăng hoặc giảm độ tương phản) thông qua giá trị các cận được nhập vào Form Contrast:
Hình 38 Form thay đổi độ tương phản
Độ sáng ảnh:
Chức năng thay đổi độ sáng của ảnh(tăng hoặc giảm sáng) thông qua giá trị được nhập vào Form:
Hình 39 Form thay đổi độ sáng
Tạo ảnh âm bản:
Chức năng cho phép ta biến đổi từ một ảnh gốc thành một ảnh âm bản(ứng dụng lớn trong y học).
Tạo ảnh đen trắng:
Chức năng cho phép ta biến đổi từ một ảnh gốc thành một ảnh đen trắng thông qua giá trị ngưỡng được nhập vào Form:
Hình 310 Form phân ngưỡng tạo ảnh đen trắng
Tạo ảnh xám:
Chức năng cho phép ta biến đổi từ một ảnh màu thành một ảnh xám.
Color: Bộ lọc màu sắc
Chức năng cho phép ta thêm hoặc bớt giá trị cho mỗi màu thông qua các gi
Các file đính kèm theo tài liệu này:
- Một số bài toán Xử lý ảnh bằng C Sharp.doc