Chương 2: Các kỹ thuật xử lý ảnh

Một phần của tài liệu NHẬN DIỆN BIỂN số XE BẰNG KIT DE2 DUNG NIOS II (Trang 28 - 57)

2. LÝ THUYẾT

2.2. Chương 2: Các kỹ thuật xử lý ảnh

Mơ hình ảnh màu RGB:

Khái niệm:

Mơ hình màu RGB trong đó ánh sáng đỏ, xanh lá cây và xanh lam được tổ hợp với nhau theo nhiều phương thức khác nhau để tạo thành các màu khác. Từ viết tắt RGB trong tiếng Anh có nghĩa là đỏ (red), xanh lá cây (green) và xanh lam (blue), là ba màu gốc trong các mơ hình ánh sáng bổ sung. [2]

Hình 2-19 Minh họa mơ hình màu RGB

Cơ sở sinh học:

Các màu gốc có liên quan đến các khái niệm sinh học hơn là vật lý, nó dựa trên cơ sở phản ứng sinh lý học của mắt người đối với ánh sáng. Mắt người có các tế bào cảm quang có hình nón nên cịn được gọi là tế bào hình nón, các tế bào này thơng thường có phản ứng cực đại với ánh sáng vàng - xanh lá cây (tế bào hình nón L), xanh lá cây (tế bào hình nón M) và xanh lam (tế bào hình nón S) tương ứng với các bước sóng khoảng 564 nm, 534 nm và 420 nm. Ví dụ, màu vàng thấy được khi các tế bào cảm nhận màu xanh ánh vàng được kích thích nhiều hơn một chút so với tế bào cảm nhận màu xanh lá cây và màu đỏ cảm nhận được khi các tế bào cảm nhận màu vàng - xanh lá cây được kích thích nhiều hơn so với tế bào cảm nhận màu xanh lá cây.

Mặc dù biên độ cực đại của các phản xạ của các tế bào cảm quang khơng diễn ra ở các bước sóng của màu "đỏ", "xanh lá cây" và "xanh lam", ba màu này được mô tả như là các màu gốc vì chúng có thể sử dụng một cách tương đối độc lập để kích thích ba loại tế bào cảm quang.

Để sinh ra khoảng màu tối ưu cho các lồi động vật khác, các màu gốc khác có thể được sử dụng. Với các lồi vật có bốn loại tế bào cảm quang, chẳng hạn như nhiều loại chim,

19 người ta có lẽ phải nói là cần tới bốn màu gốc; cho các lồi vật chỉ có hai loại tế bào cảm quang, như phần lớn các loại động vật có vú, thì chỉ cần hai màu gốc.

RGB và hiển thị:

Một trong những ứng dụng phổ biến nhất của mơ hình màu RGB là việc hiển thị màu sắc trong các ống tia âm cực, màn hình tinh thể lỏng hay màn hình plasma, chẳng hạn như màn hình máy tính hay ti vi. Mỗi điểm ảnh trên màn hình có thể được thể hiện trong bộ nhớ máy tính như là các giá trị độc lập của màu đỏ, xanh lá cây và xanh lam. Các giá trị này được chuyển đổi thành các cường độ và gửi tới màn hình. Bằng việc sử dụng các tổ hợp thích hợp của các cường độ ánh sáng đỏ, xanh lá cây và xanh lam, màn hình có thể tái tạo lại phần lớn các màu trong khoảng đen và trắng

Phần lớn các màn hình máy tính trên thế giới sử dụng RGB. Các định dạng pixel theo kiểu RGB thường gặp:

16 bit RGB: 24 bit RGB: 30 bit RGB 16 bit RGBA RGB 32 bit: Ảnh xám (gray image):

Ảnh xám là ảnh chỉ có một màu với nhiều cường độ xám khác nhau nằm trên thang xám (grayscale). Với ảnh xám 8 bit, thang xám có tất cả 256 mức khác nhau.

20

Hình 2-20 Ảnh xám

Chuyển đổi từ định dạng RGB sang Gray:

𝑌′= 0.299𝑅′+ 0.587𝐺′+ 0.114𝐵′

Với R’, G’, B’ là cường độ của pixel trong ảnh RGB. Y’ là cường độ pixel trong ảnh xám.

Định dạng ảnh BMP:

Định dạng file BMP là một loại file ảnh bitmap (biểu diễn ảnh bằng mảng các bit) là một định dạng dùng để lưu trữ ảnh số không nén.

Định dạng này dùng để lưu thông tin của ảnh số 2D với nhiều dạng khác nhau về độ phân giải, ảnh một màu hay ảnh RGB, độ sâu của màu khác nhau (số bit để biểu diễn màu).

Cấu trúc một file BMP gồm 4 phần sau:

Bitmap Header (14 byte): giúp nhận dạng một tập tin bitmap

Bitmap Information (40 bytes): lưu một số thơng tin chi tiết giúp hiển thị ảnh. Có thể là DIB Header hoặc BITMAPINFOHEADER

Color Palette (4*x bytes), x là số màu của ảnh: định nghĩa các màu sẽ được sử dụng

trong ảnh.

Bitmap Data: lưu dữ liệu ảnh.

Có nhiều phiên bản được sử dụng để lưu trữ ảnh bmp khác nhau. Nhưng tất cả đều có các trường chung sau đây.

Bitmap Header

offset size Tên Mô tả

21

BM – Windows 3.1x, 95, NT, ...

etc.

BA – OS/2 struct Bitmap Array CI – OS/2 struct Color Icon CP – OS/2 const Color Pointer IC – OS/2 struct Icon

PT – OS/2 Pointer

Thông thường là dùng BM 0002h 4 bytes FileSize Độ dài của tồn file BMP tính bằng

bytes

0006h 2 bytes Reserved Giá trị thực tế phụ thuộc vào ứng dụng dùng để lưu ảnh

0008h 2 bytes Reserved Giá trị thực tế phụ thuộc vào ứng dụng dùng để lưu ảnh

000Ah 4 bytes DataOffset Giá trị Offset bắt đầu lưu Data của ảnh

Bitmap Information

0Eh 4 Size Kích thước của InfoHeader thường là

=40

12h 4 Width Chiều rộng của ảnh tính bằng pixel 16h 4 Height Chiều cao của ảnh tính bằng pixel

1Ah 2 Planes Số mặt phẳng, thường =1

1Ch 2 BitCount Số bit để biểu diễn một pixel: 1: ảnh nhị phân. Numcolors=2; 4: 4 bit xám. Numcolors=16 8: 8 bit xám. Numcolors=256 16: ảnh 16 bit RGB. Numcolors=65,536 24: ảnh 24 bit RGB. Numcolors xấp xỉ 16,7 triệu màu. 1Eh 4 Compression Dạng nén

0: ảnh không nén RGB (thường là loại này)

1: RLE 8bit/1pixel 2: RLE 4bit/1pixel

3: Bit field hoặc Huffman 1D 4: JPEG RLE-24

5: PNG 6: Bit feild

22h 4 ImageSize Kích thước Bitmap Data

26h 4 XpixelsPerM Độ phân giải theo phương ngang Pixels/Meter

22 2Ah 4 YpixelsPerM Độ phân giải theo phương dọc

Pixels/Meter

2Eh 4 ColorsUsed Số màu trong Color Palette

32h 4 ColorsImportant Số màu quan trọng, 0 nếu tất cả đều quan trọng

Color Palette có độ lớn là 4*NumColors, chỉ có ý nghĩa với ảnh 1,4,8bit. Bitmap Data: nơi lưu dữ liệu ảnh

Bảng 2-1 Định dạng file ảnh BMP

Phát hiện cạnh:

Phát hiện cạnh là một bước quan trọng trong nhiều bài toán xử lý ảnh. Từ ảnh đầu vào là ảnh đa mức xám, qua phương pháp phát hiện cạnh sẽ cho ảnh đầu ra là ảnh đa mức xám với các cạnh có cường độ cao hơn hẳn các điểm cịn lại trong ảnh.

Hình 2-21 Ảnh trước và sau khi phát hiện cạnh

23 Toán tử Gradient: ∇𝑓 = [𝐺𝐺𝑥 𝑦] = [ 𝜕𝑓 𝜕𝑥 𝜕𝑓 𝜕𝑦] ∇𝑓 = 𝑚𝑎𝑔(∇𝑓) = [𝐺𝑥2+ 𝐺𝑦2]12 = [(𝜕𝑓 𝜕𝑥) 2 + (𝜕𝑓 𝜕𝑦) 2 ] 1 2 Tính gần đúng: ∇𝑓 ≈ |𝐺𝑥| + |𝐺𝑦| Mặt nạ Sobel: Z1 Z2 Z3 Z4 Z5 Z6 Z7 Z8 Z9 𝐺𝑥 = (𝑧1+ 2𝑧2+ 𝑧3) − (𝑧7+ 2𝑧8+ 𝑧9) (1) 𝐺𝑦 = (𝑧1+ 2𝑧4+ 𝑧7) − (𝑧3+ 2𝑧6+ 𝑧9) (2) ∇𝑓 ≈ |𝐺𝑥| + |𝐺𝑦|

Trượt ma trận 3x3 dưới đây hết bức ảnh. Giả sử ta cần tính giá trị của ma trận Gx tại điểm 𝑧5, ta dùng các điểm lân cận của nó tính theo cơng thức (1) như trên. Tương tự như vậy ta tính ma trận Gy.

Dựa vào công thức (1) và (2) người ta hình thành mặt nạ Sobel theo phương x và phương y như sau:

Mặt nạ Robert’s cross:

Tương tự mặt nạ Sobel, ta lướt phần tử 2x2 để lần lượt các điểm của ảnh ban đầu để tính ra giá trị ảnh cạnh.

24

Mặt nạ Prewitt:

Tương tự phương pháp Sobel, hai mặt nạ theo hai phương là:

Laplacian of Gaussian: ∇2𝑓 = 𝜕2𝑓(𝑥, 𝑦) 𝜕𝑥2 +𝜕2𝑓(𝑥, 𝑦) 𝜕𝑦2 Trong đó: 𝜕2𝑓(𝑥, 𝑦) 𝜕𝑥2 = 𝑓(𝑥 + 1, 𝑦) + 𝑓(𝑥 − 1, 𝑦) − 2𝑓(𝑥, 𝑦) 𝜕2𝑓(𝑥, 𝑦) 𝜕𝑦2 = 𝑓(𝑥, 𝑦 + 1) + 𝑓(𝑥, 𝑦 − 1) − 2𝑓(𝑥, 𝑦) ∇2𝑓 = [𝑓(𝑥 + 1, 𝑦) + 𝑓(𝑥 − 1, 𝑦) + 𝑓(𝑥, 𝑦 + 1) + 𝑓(𝑥, 𝑦 − 1) − 4𝑓(𝑥, 𝑦)] Mặt nạ Laplacian:

Vì mặt nạ Laplacian về cơ bản dựa trên đạo hàm bậc hai nên nó rất nhạy với nhiễu. Vì vậy để kết quả ổn định, trước khi dùng mặt nạ Laplacian người ta thường dùng mặt nạ

Gaussian để lọc bớt nhiễu. Để thuận tiện người ta có thể nhân chập hai loại mặt nạ trước khi cho trượt qua ảnh để tính. Điều này mang đến cái lợi là giảm số lượng các bước tính tốn, vì thể sẽ giảm thời gian xử lý.

Laplacian of Gaussian

25 So sánh kết quả:

Hình 2-22 b) Sobel. c)Prewitt. d) Robert. e)Laplacian. f)LoG

Nhận xét: nhìn chung các phương pháp ở trên đều cho kết quả tương đối giống nhau. Ưu điểm của chúng là đơn giản và dễ thực hiện. Tuy nhiên trừ (LoG) các phương pháp còn lại đều nhạy với nhiễu. LoG có khuyết điểm là thường bị mất ở góc, mất cạnh đường cong.

Các phương pháp phát hiện cạnh cao cấp hơn như kỹ thuật Canny sẽ đạt kết quả tốt hơn, nhưng lại mất thời gian tính tốn phức tạp hơn. (sẽ khơng đề cập đến ở mục này).

26

Hình 2-23 Ma trận ảnh và ma trận Hough

Phép biến đổi Hough biến đổi mỗi pixel có tọa độ (𝑥0, 𝑦0) trong mặt phẳng x-y thành

một đường cong có phương trình là

𝑝 = 𝑓(𝜃) = 𝑥0𝑐𝑜𝑠𝜃 + 𝑦0𝑠𝑖𝑛𝜃

trong mặt phẳng Hough. Hàm trên là một hàm tuần hoàn với chu kỳ là 2𝜋.

Trong mặt phẳng x-y ta ký hiệu 𝑝0 và 𝜃0 lần lượt là khoảng cách từ gốc tọa độ đến đường thẳng t như hình vẽ. Khi đó ta có với mọi (x, y) thuộc đường thẳng t thì:

𝑝0 = 𝑥𝑐𝑜𝑠𝜃0 + 𝑦𝑠𝑖𝑛𝜃0

Như vậy mọi điểm (x, y) thuộc đường thẳng t khi biến đổi qua mặt phẳng Hough thì đều đi qua điểm có tọa độ là (𝜃0, 𝑝0). Điều này suy ra rằng: nếu đường thẳng t trong mặt

phẳng ảnh x-y được biểu diễn bởi n pixel, thì trong mặt phẳng Hough điểm (𝜃0, 𝑝0) sẽ có n

đường cong đi qua. Vì vậy hình thành khái niệm điểm tích lũy trên mặt phẳng Hough. Theo đó, cứ mỗi lần có một đường thẳng đi qua một điểm (𝜃, 𝑝) thì giá trị tích lũy của điểm đó sẽ tang lên 1 đơn vị.

Do ta xét mặt phẳng ảnh x-y chỉ nằm trên góc phần tư thứ nhất với 𝑥 ≥ 0 𝑣à 𝑦 ≥ 0 nên ta chỉ xét khoảng −90 ≤ 𝜃 ≤ 90 trên mặt phẳng Hough.

Khoảng cách lớn nhất giữa đường thẳng trong mặt phẳng ảnh với gốc tọa độ bằng với đường chéo của ảnh, ta đặt là pmax. Khoảng của p phải xét trong mặt phẳng Hough là

−𝑝𝑚𝑎𝑥 ≤ 𝑝 ≤ 𝑝𝑚𝑎𝑥

Các bước của bài toán phát hiện đường thẳng bằng biến đổi Hough: Biến đổi ảnh về ảnh nhị phân cạnh

27 Kiểm tra ma trận tích lũy trên mặt phẳng Hough. Lọc ra các điểm (𝜃, 𝑝) có giá trị tích lũy lớn hơn một ngưỡng nào đó.

Với mỗi 𝜃0 𝑣à 𝑝0 ta đã tìm ra một phương trình đường thẳng trên mặt phẳng ảnh x-y là

𝑝0 = 𝑥𝑐𝑜𝑠𝜃0 + 𝑦𝑠𝑖𝑛𝜃0

Lưu ý: độ chia của mặt phẳng Hough theo phương 𝜃 𝑣à 𝑝 không nên q nhỏ, vì thời gian tính tốn sẽ lớn. Đối với biến đổi Hough thời gian tính là một yếu tố quan trọng vì nó sử dụng 3 vịng lặp lồng nhau. Vì vậy với ảnh có độ phân giải lớn sử dụng biến đổi Hough rất tốn thời gian.

Xoay ảnh:

Bài này xin trình bày cách xoay ảnh như hình minh họa dưới.

Hình 2-24 Minh họa việc xoay ảnh một góc a

Thuật tốn sử dụng là quay tất cả các điểm quanh điểm trên cùng bên trái của ảnh một góc alpha theo chiều dương qui ước. Có hai cách để thực hiện việc xoay này là ánh xạ xuôi (forward mapping) và ánh xạ ngược (reverse mapping). Forward mapping sẽ làm cho ảnh có lỗ. Với reverse mapping, ảnh mượt hơn nhưng các mép vẫn không được mềm lắm. [3]

Forward mapping

Trong forward mapping, từ mỗi điểm của ảnh gốc, xác định một điểm của ảnh kết quả. Do phải làm tròn số khi thực hiện phép xoay nên ở ảnh gốc, có những pixel khơng được "tơ màu" làm cho trên ảnh xuất hiện những "lỗ" li ti. Đối với ảnh đen trắng không cần chất lượng cao, sau khi tạo ra ảnh xoay với những lỗ trống chưa được gán trị, ta có thể tự gán trị cho lỗ trống đó bằng giá trị trung bình của các điểm ảnh xung quanh.

Hình học giải tích cấp 3 và đại số tuyến tính đại học có trình bày về cách xoay điểm M(x, y) quanh gốc tọa độ góc a, thành N(x', y') như sau:

28

Hình 2-25 Xoay điểm N quanh gốc O một góc a sẽ được điểm M

|𝑦′| = |𝑥′ 𝑐𝑜𝑠𝑎 −𝑠𝑖𝑛𝑎𝑠𝑖𝑛𝑎 𝑐𝑜𝑠𝑎 | |𝑦|𝑥

Hay

𝑥′ = 𝑥𝑐𝑜𝑠𝑎 − 𝑦𝑠𝑖𝑛𝑎 𝑦′ = 𝑥𝑠𝑖𝑛𝑎 + 𝑦𝑐𝑜𝑠𝑎

Reverse mapping

Với reverse mapping, từ mỗi điểm của ảnh kết quả, suy ngược lại từ ảnh gốc để lấy ra giá trị màu cần thiết. Với cách này, tất cả các điểm trên ảnh kết quả đều được gán giá trị màu của một điểm tương ứng (hay ít nhất cũng là điểm lân cận của điểm đó) ở ảnh gốc nên khơng có hiện tượng "lỗ" như ở trên.

Ta tìm ma trận xoay ảnh trong trường hợp này như sau: Do |𝑦′| = |𝑥′ 𝑐𝑜𝑠𝑎 −𝑠𝑖𝑛𝑎𝑠𝑖𝑛𝑎 𝑐𝑜𝑠𝑎 | |𝑦|𝑥 Nên |𝑥𝑦| = |𝑐𝑜𝑠𝑎 −𝑠𝑖𝑛𝑎𝑠𝑖𝑛𝑎 𝑐𝑜𝑠𝑎 |−1. |𝑥′𝑦′| |𝑥𝑦| = |−𝑠𝑖𝑛𝑎 𝑐𝑜𝑠𝑎𝑐𝑜𝑠𝑎 𝑠𝑖𝑛𝑎| |𝑦′|𝑥′ So sánh:

Sau đây là kết quả của hai thuật toán trên. Dễ dàng nhận thấy là với reverse mapping, ảnh mịn hơn. Tuy nhiên, trong q trình tính tốn, vẫn phải làm trịn nên các mép có hiện tượng răng cưa. Một khuyết điểm của phương pháp reverse mapping là người lập trình gặp khó khan hơn trong việc tìm ra cá điểm góc của ảnh sau khi xoay.

29

Hình 2-26 Kết quả xoay ảnh của phương pháp Forward Mapping

Xoay ảnh ở tâm:

Ở trên vừa trình bày cách xoay ảnh ở góc tọa độ ban đầu của ảnh, tức là góc trên cùng bên trái. Tuy nhiên trong phần lớn các ứng dụng, người ta thường cần xoay ảnh ở tâm của bức ảnh. Để làm được việc đó trước và sau khi xoay ảnh người lập trình tiến hành đổi hệ tọa độ quy chiếu bức ảnh như sau:

30

Hình 2-27 Các bước đổi tọa độ ảnh [4]

Resize ảnh:

Có nhiều phương pháp resize ảnh khác nhau. Sau đây là các phương pháp thường dùng.

Nội suy là phương pháp ước tính giá trị của các điểm dữ liệu chưa biết trong phạm vi

của một tập hợp rời rạc chứa một số điểm dữ liệu đã biết

Trong khoa học kỹ thuật, người ta thường có một số điểm dữ liệu đã biết giá trị bằng cách lấy mẫu thực nghiệm. Những điểm này là giá trị đại diện của một hàm số của một biến số độc lập có một lượng giới hạn các giá trị. Thường chúng ta phải nội suy (hoặc ước tính) giá trị của hàm số này cho một giá trị trung gian của một biến độc lập. Điều này có thể thực hiện bằng phương pháp đường cong phù hợp hoặc phân tích hồi quy.

Phương pháp nội suy điểm lân cận gần nhất (Nearest-neighbor):

Ý tưởng của phương pháp này là ta xấp xỉ giá trị của điểm trên ảnh kết quả bằng với giá trị của điểm gần nhất trên ảnh gốc sau khi nhân với tỉ lệ chiều dọc và chiều ngang.

Giả sử ta có ảnh ban đầu là I có kích thước 𝑤 × ℎ Ta cần resize ảnh này thành ảnh I’ kích thước 𝑤′ × ℎ′ Ta tiến hành tính như sau:

𝑘𝑤 = 𝑤 𝑤′ 𝑘ℎ = ℎ

ℎ′

Với mỗi điểm của ảnh kết quả I’ ta tìm ngược lại tọa độ của điểm này trên ảnh gốc I’ sau đó gán giá trị.

31 Với tọa độ điểm trên ảnh gốc được tính như sau:

𝑖𝑠 = 𝑟𝑜𝑢𝑛𝑑(𝑖 ∗ 𝑘𝑤) 𝑗𝑠 = 𝑟𝑜𝑢𝑛𝑑(𝑗 ∗ 𝑘ℎ)

Phương pháp nội suy tuyến tính (Bilinear interpolation):

Cơ sở tốn học: nội suy hàm một biến.

Ta đã biết qua hai điểm cho trước luôn luôn vẽ được một đường thằng.

𝑓(𝑥) = 𝑥1− 𝑥

𝑥1− 𝑥0𝑓(𝑥0) +

𝑥 − 𝑥0

𝑥1− 𝑥0𝑓(𝑥1)

Gọi 𝑝0, 𝑝1 là giá trị hàm tại điểm 𝑥0, 𝑥1 và 𝑥1− 𝑥0 = 1. Ta có 𝑓(𝑝0, 𝑝1, 𝑥) = (1 − 𝑥)𝑝0+ 𝑥𝑝1 = (𝑝1− 𝑝0)𝑥 + 𝑝0

Đối với hàm hai biến 𝑔(𝑥, 𝑦), phương pháp nội suy này có tên gọi là bilinear: 𝑔(𝑥, 𝑦) = 𝑓(𝑓(𝑝00, 𝑝10, 𝑥), 𝑓(𝑝10, 𝑝11, 𝑥), 𝑦)

Ví dụ:

32

𝐼20,14.5 = (210 − 91) ∗ 0.5 + 91 = 150.5 𝐼21,14.5 = (95 − 162) ∗ 0.5 + 162 = 128.5

𝐼20.2,14.5 = (128.5 − 150.5) ∗ 0.2 + 150.5 = 146.1

Phương pháp nội suy cubic (bicubic interpolation):

Cơ sở toán học: phép nội suy cubic Nội suy cubic hàm một biến:

Có rất nhiều phương pháp nội suy đường cong hàm một biến khác nhau. Ở đây em trình bày một phương pháp mà em đã tìm hiểu, đó là phương pháp CATMULL-ROM SPLINES Giả sử hàm cần tìm có dạng hàm số bậc ba: 𝑓(𝑥) = 𝑎𝑥3+ 𝑏𝑥2+ 𝑐𝑥 + 𝑑

Một phần của tài liệu NHẬN DIỆN BIỂN số XE BẰNG KIT DE2 DUNG NIOS II (Trang 28 - 57)

Tải bản đầy đủ (PDF)

(97 trang)