Tải bản đầy đủ (.doc) (81 trang)

Tài liệu Image Processing in C (giao trinh xu ly anh) ppt

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 (3.13 MB, 81 trang )

Mục Lục
MỤC LỤC
CHƯƠNG 1.GIỚI THIỆU 5
1.1.Khái niệm xử lí ảnh 5
1.2.Ứng dụng của xử lí ảnh 5
1.2.1.Khoa học và không gian 5
1.2.2.Phim ảnh 6
1.2.3.Tự động hóa văn phòng 6
1.2.4.Công nghiệp y tế 6
1.3.Biểu diễn màu 7
1.3.1.Không gian màu RGB 7
1.3.2.Không gian màu HSI (HSV) 8
1.1.1.Chuyển đổi không gian màu 9
1.4.Một số khái niệm về ảnh số 10
1.4.1.Pixel 10
1.4.2.Mức xám (Gray level) 10
1.4.3.nh số (Digital Image) 11
1.4.4.Một số khái niệm khác 11
1.5.Cài đặt 11
1.5.1.Cấu trúc file ảnh bitmap 11
1.5.2.Chương trình đọc file ảnh bmp ra mảng 13
1.5.3.Chương trình ghi mảng ảnh vào file bitmap 16
1.5.4.Hàm chuyển đổi không gian màu RGB -> HSI và ngược lại 18
CHƯƠNG 2.XỬ LÍ ĐIỂM 21
2.1.Phép toán số học trên ảnh 21
2.2.Phép toán XOR 21
2.3.Bảng tìm kiếm 22
2.4.Histogram 22
2.4.2.Cân bằng Histogram 23
2.4.3.Histogram chỉ trước 25
2.5.Tăng độ tương phản 25


2.6.Biến đổi cường độ 27
Dương Hoàng Huyên
1
2 Nhập Môn Xử Lí Ảnh
2.7.Cài đặt thuật toán 30
2.7.1.Phép toán số học trên ảnh 30
2.7.2.Phép toán XOR 31
2.7.3.Các thuật toán trên Histogram 31
2.7.4.Hàm tăng độ tương phản bằng kó thuật End-in-Search 33
2.7.5.Biến đổi cường độ 34
CHƯƠNG 3.XỬ LÍ VÙNG 37
3.1.Cuộn 37
3.2.Làm mờ ảnh (Blurring) 38
3.3.Làm nét ảnh (Sharpening) 41
3.4.Phát hiện biên 42
3.4.2.Đạo hàm bậc một 44
3.4.3.Toán tử la bàn 46
3.4.4.Toán tử đạo hàm bậc hai 47
3.4.5.Phát hiện biên ảnh màu 49
3.5.Lọc trung vò 50
3.6.Cài đặt 52
3.6.1.Cuộn 52
3.6.2.Phát hiện biên 56
3.6.3.Lọc trung vò 58
CHƯƠNG 4.XỬ LÍ HÌNH HỌC 59
4.1.nh xạ thẳng và nghòch đảo 59
4.2.Nội suy 59
4.2.1.Nội suy dựa vào láng giềng gần nhất 60
4.2.2.Nội suy song tuyến 60
4.2.3.Nội suy cuộn với hàm bậc ba 61

4.2.4.Nội suy bằng hàm B-Spline 61
4.3.Tỉ lệ ảnh 61
4.4.Cực tiểu hóa ảnh 62
4.4.1.Biểu diễn trung vò 62
4.4.2.Biểu diễn trung bình 62
4.5.Xoay ảnh 62
4.6.Tònh tiến 64
Khoa Công Nghệ Thông Tin – Trường ĐH Quy Nhơn
Mục Lục
4.7.Ảnh soi gương 64
4.8.Cài đặt 64
4.8.1.Hàm nội suy song tuyến 64
4.8.2.Tỉ lệ ảnh 65
4.8.3.Xoay ảnh 67
4.8.4.nh soi gương 68
CHƯƠNG 5.XỬ LÍ NHIỀU ẢNH 71
5.1.Cộng hai ảnh 71
5.2.Trừ hai ảnh 71
5.3.And/Or logic 71
5.4.Trung bình ảnh 71
CHƯƠNG 6.CHUYỂN ẢNH VỀ TÔNG MÀU TRUNG GIAN 73
6.1.Giới thiệu 73
6.2.Tạo mẫu sẳn 73
6.3.Kó thuật tạo bóng 73
6.4.Lỗi khuyếch tán 73
6.5.Chú ý khi chuyển tông màu 73
BIẾN ĐỔI ẢNH 75
6.6.Giới thiệu 75
6.7.Biến đổi Fourier rời rạc 75
6.8.Biến đổi Fourier nhanh 75

6.9.Lọc trong miền tần số 75
6.10.Biến đổi Cosine rời rạc 75
LÀM MÉO VÀ BIẾN ẢNH 77
6.11.Biến đổi Affine 77
6.12.Biến đổi phối cảnh 79
6.13.Biến đổi song tuyến 80
Dương Hoàng Huyên
3
4 Nhập Môn Xử Lí Ảnh
6.14.Thuật toán MeshWarp 82
6.15.Thuật toán lấy mẫu của Fant 82
6.16.Làm méo bằng phương pháp field-based 82
6.17.Chồng chéo 82
6.18.Một vài điểm lưu ý khi biến ảnh 82
NÉN ẢNH 83
6.19.Giới thiệu 83
6.19.1.Mã loạt dài 83
6.19.2.Mã Huffman 83
6.19.3.Biến đổi mã Huffman 83
6.19.4.READ 83
6.19.5.Nén LZW 83
6.19.6.Mã hóa toán học 83
6.19.7.Nén chuẩn JPEG 83
6.20.Một số phương pháp nén khác 83
6.20.1.Vector lượng tử hóa 83
6.20.2.Nén Fractal 83
6.20.3.Biến đổi Wavelet rời rạc 83
TÀI LIỆU THAM KHẢO 85
Khoa Công Nghệ Thông Tin – Trường ĐH Quy Nhơn
Chương 1. Giới Thiệu

CHƯƠNG 1. GIỚI THIỆU
1.1. Khái niệm xử lí ảnh
Xử lí ảnh là một môn khoa học thao tác trên ảnh. Nó bao gồm nhiều kó thuật
trong nhiều ứng dụng. Những kó thuật có thể là cải tiến, làm méo ảnh, làm nổi các
đặt trưng của ảnh, tạo ảnh mới từ những vò trí của ảnh khác, khôi phục ảnh bò suy
giảm trong quá trình thu nhận ảnh.
Xử lí ảnh thường nhầm lẫn với đồ họa máy tính. Tuy nhiên hai lónh vực này
cũng có những đặt điểm khác nhau. Đồ họa máy tính là sinh ra một ảnh nhân tạo.
Xử lí ảnh là thao tác trên những ảnh đã có.
Có bốn loại thuật toán xử lí ảnh: điểm, vùng, hình học và đa Sảnh. Xử lí
điểm là thay đổi giá trò của điểm ảnh dựa trên điểm gốc hoặc vò trí. Xử lí theo vùng
là thay đổi giá trò điểm ảnh dựa vào giá trò gốc và các giá trò xung quanh. Xử lí hình
học là thay đổi vò trí hay sắp xếp lại các điểm ảnh. Xử lí trên nhiều ảnh là thay đổi
giá trò điểm ảnh dựa vào nhiều ảnh.
1.2. Ứng dụng của xử lí ảnh
1.2.1. Khoa học và không gian
Trong những năm trước, xử lí ảnh chỉ được dùng bởi các nhà khoa học.
Những nhà khoa học này là thành viên của hiệp hội nghiên cứu không gian và bộ
quốc phòng.
Những năm gần đây, NASA đã có rất nhiều ảnh cần xử lí. Tàu vũ trụ
Ranger cung cấp hàng trăm bức ảnh bề mặt của mặt trăng. Tàu vũ trụ Surveyor 7
trả về 21.038 ảnh từ xa của vò trí đáp xuống của tàu vũ trụ trên mặt trăng. Mariner
Dương Hoàng Huyên
5
6 Nhập Môn Xử Lí Ảnh
4 được phóng vào năm 1964 trả về 22 ảnh của sao hỏa.
Các tàu thăm dò vũ trụ truyền các ảnh không gian về trái đất bằng dòng dữ
liệu. Dữ liệu được truyền thường bò gián đoạn bởi những vệt sáng và ảnh cũng bò
gián đoạn. Các kó thuật xây dựng lại và lọc xóa nhiễu và khôi phục lại ảnh các vò
trí đã mất của ảnh.

1.2.2. Phim ảnh
Sử dụng máy tính làm phim được phát triển mạnh. Máy tính chuyển ảnh này
thành ảnh khác, xóa những đối tượng không mong muốn, tạo ảnh mới từ những
phần của ảnh khác. Ví dụ cảnh trong phim chỉ có 1000 người, qua quá trình xử lí sẽ
cho ra nhiều người hơn có thể đến 20.000 người. Một vài thao tác thực hiện trong
file như:
Kết hợp ảnh: một nhận vật nào đó có thể thêm vào một đoạn phim lòch sử.
Hoặc có thể tạo một đám đông từ một nhóm nhỏ hơn.
Biến đổi hình: biến hình này thành hình khác.
Làm méo hình: làm cho diễn viên có thể cao hơn, thấp hơn, mập hơn, gầy
hơn so với người thật. Kó thuật làm méo hình đã sử dụng để tìm trẻ lạc bằng cách
tạo ảnh theo độ tuổi.
1.2.3. Tự động hóa văn phòng
Tất cả các tài liệu được lưu trữ ở dạng số và hiển thò lên màn hình. Phần
mềm làm việc này còn gọi là DIP (Document Image Processing). Nhiều ngân hàng
sử dụng phần mềm này để lưu trữ tấm séc đã xử lí, đơn vay tiền, các báo cáo tài
khoản. Chính phủ lưu trữ thông tin mẫu đăng kí cử tri, giấy kết hôn, giấy chứng tử.
Bệnh viện sử dụng DIP để lưu trữ hàng ngàn ảnh y tế, thẻ bảo hiểm,
1.2.4. Công nghiệp y tế
Khoa Công Nghệ Thông Tin – Trường ĐH Quy Nhơn
Chương 1. Giới Thiệu
Có nhiều công nghệ hình ảnh được sử dụng như ảnh X-quang, ảnh siêu âm.
Tất cả các ảnh được lưu trữ trong máy tính sau đó cải tiến và thao tác để bác só có
thể tập trung vào những vùng quan tâm. Nhiều ảnh y tế được lưu trữ ở dạng không
gian ba chiều, do đó bác só có thể xoay, tònh tiến vò trí của ảnh trên màn hình để
nghiên cứu.
Một điểm thuận tiện khác trong ảnh y tế là ảnh có thể được truyền đến bác
só ở xa, bệnh nhân có thể được khám bệnh mà không cần đến bệnh viện.
1.3. Biểu diễn màu
Một mô hình màu (không gian màu) là cách biểu diễn màu và mối liên hệ

giữa các thành phần. Các ứng dụng xử lí ảnh khác nhau sẽ dùng những không gian
màu khác nhau. Trong ngành công nghiệp xuất bản, sử dụng không gian màu
CMY. Màn hình máy vi tính, sử dụng không gian màu RGB. Những ứng dụng phải
thao tác riêng biệt trên các thuộc sắc thái, độ bảo hòa, độ sáng của màu thì sử dụng
không gian HSI. Những không gian màu đề cập sau đây đều được chuẩn hóa (các
giá trò đều thuộc đoạn [0,1]). Tuy nhiên trong các ứng dụng thực tế, ta sẽ ánh xạ
vào dãy số nguyên nhất đònh.
1.3.1. Không gian màu RGB
Không gian màu bao gồm ba thành phần Red, Green, Blue. Mô hình màu
này biểu diễn bằng một hình khối 3 chiều như hình 1-1. Đối với điểm ảnh được
biểu diễn bằng 24bit màu, khi đó đó mỗi thành phần màu sẽ được mã hóa thành
8bit ứng với 256 giá trò. Ví dụ: màu đỏ (255, 0, 0), màu xanh lá cây (0, 255, 0), màu
xanh dương (0, 0, 255), màu trắng (255, 255, 255), màu đen (0, 0, 0). Mô hình màu
này thường được sử dụng để hiển thò màu trong máy tính, tuy nhiên do các thành
phần có độ tương quan cao nên không thích hợp cho các ứng dụng xử lí ảnh.
Dương Hoàng Huyên
7
8 Nhập Môn Xử Lí Ảnh
Hình 1.1. Không gian màu RGB.
1.3.2. Không gian màu HSI (HSV)
Hình 1.1. Không gian màu HSI.
Không gian màu HSI là sự kết hợp của ba thành phần Hue (màu sắc),
Saturation (độ bảo hòa), Intensity (cường độ). Khi sử dụng không gian màu này, ta
không cần quan tâm có bao nhiêu phần trăm màu đỏ, xanh để sinh ra màu. Ta chỉ
cần điều chỉnh thành phần Hue để sinh ra màu mong muốn. Để thay đổi từ màu
đậm sang màu, ta thay đổi thành phần Saturation, để tạo ảnh sáng hay đối hơn, ta
Khoa Công Nghệ Thông Tin – Trường ĐH Quy Nhơn
Chương 1. Giới Thiệu
thay đổi thành phần Intensity. Trong các ứng dụng xử lí ảnh, các thao tác chỉ làm
việc trên thành phần Intensity của điểm ảnh, do đó ta thường sử dụng không gian

màu này cho các thuật toán xử lí ảnh. Hình 1-2 mô tả không gian màu HSI.
1.1.1. Chuyển đổi không gian màu
Ảnh được lưu trong máy tính sử dụng không gian màu RGB, do đó để làm
việc trong các ứng dụng xử lí ảnh ta phải chuyển đổi không gian màu về HSI.
1.3.2.2. Chuyển không gian màu RGB về không gian màu HSI:
BGR
R
r
++
=
,
BGR
G
g
++
=
,
BGR
B
b
++
=
. Các giá trò h, s, i là các giá trò
chuẩn hóa của H, S, I tương ứng và được tính như sau:
( )
[ ]
( ) ( )( )











−−+−
−+−
=

bgbrgr
brgr
h
2
1
()
2
1
cos
, nếu b > g thì h = 2π-h, h ∈[0,2π].
s = 1 – 3 min(r, g, b,), s ∈ [0,1];
2553×
++
=
BGR
i
, i∈ [0,1].
Các giá trò h, s, i phải được chuyển về các đoạn tương ứng [0
0

, 360
0
], [0,100],
[0,255] bằng cách:
H = h × 180/π; S = s × 100; I = i × 255;
1.3.2.3. Chuyển không gian màu HSI về không gian RGB:
h = H ×π/180; s = S / 100; i = I / 255;
công thức chuyển đổi chia thành 3 trường hợp phụ thuộc vào giá trò h:
+ Nếu 0 ≤ h < 2/3π:







+=
)60cos(
)cos(
1.
0
h
hs
ir
; b = i.(1 - s); g = 3.i – (r + b);
Dương Hoàng Huyên
9
10 Nhập Môn Xử Lí Ảnh
+ Nếu 2/3π ≤ h < 4/3π: h = h – 2/3π:








+=
)60cos(
)cos(
1.
0
h
hs
ig
; r = i.(1 - s); b = 3.i – (r + g);
+ Nếu 4/3π ≤ h < 2π: h = h – 4/3π:







+=
)60cos(
)cos(
1.
0
h
hs

ib
; g = i.(1 - s); r = 3.i – (g + b);
Trong đó r, g, b là các giá trò chuẩn hóa của R, G, B. Để chuyển sang giá trò
R, G, B ta nhân tất cả cho 255.
1.4. Một số khái niệm về ảnh số
1.4.1. Pixel
nh trong thực tế liên tục về không gian và cường độ sáng, để ảnh có thể xử
lý được bằng máy tính cần thiết phải số hóa ảnh. Trong quá trình số hóa, ta biến tín
hiệu liên tục sang dạng rời rạc (rời rạc về không gian và giá trò). Mỗi giá trò rời rạc
đó được gọi là một pixel. Mỗi pixel là bộ giá trò tọa độ x, y và màu sắc.
Cặp tọa độ x, y tạo nên độ phân giải. Như vậy ảnh là tập hợp các điểm ảnh
thường biểu diễn bởi một mảng hai chiều R dòng và C cột. Mỗi phần tử trong mảng
cho biết giá trò của điểm ảnh tại vò trí đó.
Độ phân giải của ảnh là mật độ điểm ảnh trên ảnh. Theo đònh nghóa khoảng
cách giữa các điểm ảnh phải được chọn sao cho mắt người thấy được sự liên tục về
không gian và cường độ sáng của ảnh. Việc lựa chọn khoảng cách thích hợp tạo
nên mật độ phân bố đó chính là độ phân giải và được phân bố trên hai trục x, y
trong không gian hai chiều.
1.4.2. Mức xám (Gray level)
Là kết quả mã hóa cường độ sáng của mỗi điểm ảnh với một giá trò số.
Khoa Công Nghệ Thông Tin – Trường ĐH Quy Nhơn
Chương 1. Giới Thiệu
Thông thường ta mã hóa cường độ sáng gồm có 2, 16, 32, 64, …, 2
k
mức khác nhau.
Khi đó mỗi điểm ảnh có mức xám từ 0 ≤ l ≤ L.
1.4.3. nh số (Digital Image)
nh số là tập hợp các điểm ảnh cùng với mức xám tương ứng được sắp xếp
theo cột dòng. Đònh nghóa hình thức, ảnh số là một ma trận trong đó giá trò cột,
dòng cho biết vò trí của điểm ảnh, giá trò tại phần tử (x,y) của ma trận cho biết mức

xám của điểm ảnh tại vò trí đó. Ta có thể coi ảnh số là một hàm hai biến f(x,y), x, y
là tọa độ không gian và giá trò f cho biết mức xám của điểm ảnh đó.
1.4.4. Một số khái niệm khác
Láng giềng (Neighbors) của một điểm: một điểm p có tọa độ (x,y) có bốn
láng giềng theo hướng ngang và dọc với tọa độ tương ứng như sau: (x+1, y), (x-1,
y), (x, y+1), (x, y-1), tập bốn điểm này gọi là 4-láng giềng của p. Bốn láng giềng
của điểm p theo hướng chéo có tọa độ tương ứng như sau: (x+1, y+1), (x-1, y-1),
(x+1, y-1), (x-1, y+1). Tám láng giềng của điểm p có tọa độ (x,y) là tập hợp những
điểm có tọa độ như sau: (x+1, y), (x-1, y), (x, y+1), (x, y-1), (x+1, y+1), (x-1, y-1),
(x+1, y-1), (x-1, y+1)
Biểu đồ tần suất: là một vector H
f
=[h(0), h(1), , h(m)] mỗi thành phần h(i)
của vector H
f
cho biết số điểm ảnh trong ảnh f. Biểu đồ tần suất chuẩn hóa H được
đònh nghóa dựa vào biểu đồ H = 1/N x H
f
, trong đó N là tổng số điểm ảnh trong ảnh.
1.5. Cài đặt
1.5.1. Cấu trúc file ảnh bitmap
Đây là dạng file đơn giản nhất trong hệ điều hành windows, nó hỗ trợ 1, 4,
8, 16, 24 và 32 bits màu. Trong đó dạng 16 và 32 bit màu rất ít khi sử dụng. Trong
những năm gần đây xuất hiện nhiều đònh dạng file BMP không tương thích với
Dương Hoàng Huyên
11
12 Nhập Môn Xử Lí Ảnh
nhau. Để đơn giản trong cài đặt, tài liệu này chỉ giới thiệu file ảnh bitmap với 24bit
màu. Cấu trúc của một file bitmap 24bit màu như sau:
File Header

Image Header
Pixel Data
1.5.1.1. File Header
Kích thước 14 byte giúp nhận dạng ảnh BMP cấu trúc như sau:
Cấu trúc BITMAPFILEHEADER
Tên
Kích thước
(byte)
Mơ tả
bfType
2
Ln ln là 'BM' để cho biết file
ảnh Bmp.
bfSize
4
Cho biết kích thước của file bmp.
bfReserved1
2
Ln thiết lập 0.
bfReserved2
2
Ln thiết lập 0.
bfOffBits
4
Chỉ cho biết vị trí bắt đầu của dữ
liệu ảnh.
1.5.1.2. Image Header
Theo sau File Header, có hai dạng phân biệt, một sử dụng cho hệ điều hành
OS/2 và một cho Windows. Đối với windows, cấu trúc này có 40 byte
Cấu trúc BITMAPINFORHEADER

Tên
Kích thước
(byte)
Mơ tả
biSize
4
Kích thước của cấu trúc này,
phải đặt ít nhất là 40.
biWidth
4
Chiều rộng ảnh (pixel).
biHeight
4
Chiều cao ảnh (pixel)
Khoa Công Nghệ Thông Tin – Trường ĐH Quy Nhơn
Chương 1. Giới Thiệu
biPlanes
2
Phải đặt là 1
biBitCount
2
Số bit cho điểm ảnh: 24
biCompression
4
Phương pháp nén: 0
biSizeImage
4
Kích thước dữ liệu điểm ảnh
(byte)
biXPelsPerMeter

4
Độ phân giải tính bằng
pixel/meter
biYPelsPerMeter
4
Độ phân giải tính bằng
pixel/meter
biClrUser
4
Số phần tử trong bảng màu
thực tế sử dụng: 0
biClrImportant
4
Số màu có nghĩa: 0
1.5.1.3. Dữ liệu các điểm ảnh
Thông thường dữ liệu theo sau bảng màu ngay lập tức, nhưng cũng có thể có
các byte xen vào giữa. Ta phải dùng trường bfOffBits trong file header để xác đònh
offset từ file header đến dữ liệu.
Dòng pixel được xếp theo trật tự trong file là từ dưới lên trên, số dòng được
đưa trong trường biHeight trong image header. Kích thước của một dòng được xác
đònh dựa vào thông số biBitCount và biWidth. Số byte trên một dòng được làm tròn
tới bội số của 4 và có thể được xác đònh qua công thức sau:
Byte/row = width x 3 + [4 - (width x 3) mod 4] mod 4.
Ảnh bmp 24 bit: mỗi điểm được biểu diễn bởi ba byte liên tiếp nhau chi ra ba
giá trò Blue, Green, Red tương ứng. Chú ý, trật tự của ba thành phần màu bò đảo
ngược so với các file ảnh khác.
1.5.2. Chương trình đọc file ảnh bmp ra mảng
Chương trình đọc file ảnh bmp ở đònh dạng bmp với 24bit màu ra mảng có
thể tóm tắt thành các bước sau:
Dương Hoàng Huyên

13
14 Nhập Môn Xử Lí Ảnh
1. Mở file bmp để đọc ở dạng nhò phân.
2. Lấy thông tin của file bmp bằng cách đọc thông tin ra cấu trúc bitmap
header.
3. Lấy thông tin dữ liệu ảnh bằng cách đọc dữ liệu ra cấu trúc Bitmap
information header.
4. Cấp phát bộ nhớ cho mảng ảnh.
5. Đọc thông tin ảnh ra mảng.
1.5.2.1. Cấu trúc để lưu trữ thông tin header
struct BitmapFileHeader{
unsigned short int bfType; // 2 bytes
unsigned int bfSize; // 4 bytes
unsigned short int bfReserved1; // 2 bytes
unsigned short int bfReserved2; // 2 bytes
unsigned int bfOffBits; // 4 bytes
};
1.5.2.2. Cấu trúc BitmapInforHeader
struct BitmapInfoHeader{
unsigned int biSize; // 4 bytes
unsigned int biWidth; // 4 bytes
unsigned int biHeight; // 4 bytes
unsigned short int biPlanes; // 2 bytes
unsigned short int biBitCount; // 2 bytes
unsigned int biCompression; // 4 bytes
unsigned int biImageSize; // 4 bytes
unsigned int bihResolution; // 4 bytes
unsigned int bivResolution; // 4 bytes
unsigned int biClrUser; // 4 bytes
unsigned int biClrImportant; // 4 bytes

};
1.5.2.3. Cấu trúc điểm ảnh trong không gian màu RGB như sau:
struct PixelRGB{
unsigned char R,G,B; // 1 byte for every element
};
1.5.2.4. Hàm đọc tiêu đề của file bitmap
Khoa Công Nghệ Thông Tin – Trường ĐH Quy Nhơn
Chương 1. Giới Thiệu
void Read_Bmp_Header(struct BitmapFileHeader *bmpHeader,FILE
*fp){
fread(&bmpHeader->bfType,2,1,fp);
fread(&bmpHeader->bfSize,4,1,fp);
fread(&bmpHeader->bfReserved1,2,1,fp);
fread(&bmpHeader->bfReserved2,2,1,fp);
fread(&bmpHeader->bfOffBits,4,1,fp);
}
1.5.2.5. Hàm đọc thông tin về dữ liệu ảnh:
void Read_Info_Header(struct BitmapInfoHeader *bmpInfo,FILE
*fp){
fread(&bmpInfo->biSize,4,1,fp);
fread(&bmpInfo->biWidth,4,1,fp);
fread(&bmpInfo->biHeight,4,1,fp);
fread(&bmpInfo->biPlanes,2,1,fp);
fread(&bmpInfo->biBitCount,2,1,fp);
fread(&bmpInfo->biCompression,4,1,fp);
fread(&bmpInfo->biImageSize,4,1,fp);
fread(&bmpInfo->bihResolution,4,1,fp);
fread(&bmpInfo->bivResolution,4,1,fp);
fread(&bmpInfo->biClrUser,4,1,fp);
fread(&bmpInfo->biClrImportant,4,1,fp);

}
1.5.2.6. Hàm đọc dữ liệu ảnh ra mảng:
void Read_To_Array(struct PixelRGB **I,unsigned int Width,
unsigned int Height,FILE *fp){
int i,j;
unsigned char ch,temp[4];
for(i=Height-1;i>=0;i ){
for(j=0;j<Width;j++){
fread(&ch,1,1,fp);
I[i][j].B=ch;
fread(&ch,1,1,fp);
I[i][j].G=ch;
fread(&ch,1,1,fp);
I[i][j].R=ch;
}
*temp=4-Width*3 % 4;
fread(temp,1,*temp%4,fp);
}
}
1.5.2.7. Hàm cấp phát bộ nhớ cho ảnh, các điểm ảnh ở không gian màu RGB
Dương Hoàng Huyên
15
16 Nhập Môn Xử Lí Ảnh
struct PixelRGB **Allocate_Memory_RGB(unsigned int Width,
unsigned Height){
unsigned int i;
struct PixelRGB **I;
I=malloc(Height*sizeof(struct PixelRGB *));
if(I==NULL){
printf("don't allocate memory\n");

getch();
return NULL;
}
for(i=0;i<Height;i++){
I[i]=malloc(Width*sizeof(struct PixelRGB));
if(I[i]==NULL){
printf("don't allocate memory at row: %d\n",i);
getch();
return NULL;
}
}
return I;
}
1.5.2.8. Hàm đọc dữ liệu ảnh
struct PixelRGB **Read_File_to_Array(char *filename,struct
BitmapFileHeader *bmpHeader,struct BitmapInfoHeader *bmpInfo){
FILE *fp;
struct PixelRGB **I;
unsigned int Width,Height;
fp=fopen(filename,"rb");
if(fp==NULL){
printf("File not found, can't open this file!");
getch();
return NULL;
}
Read_Bmp_Header(bmpHeader,fp);
Read_Info_Header(bmpInfo,fp);
Width = bmpInfo->biWidth;
Height = bmpInfo->biHeight;
I = Allocate_Memory_RGB(Width,Height);

Read_To_Array(I,Width,Height,fp);
fclose(fp);
return I;
}
1.5.3. Chương trình ghi mảng ảnh vào file bitmap
Chương trình ghi mảng ảnh vào file bitmap 24 bit màu có thể tóm tắt thành
Khoa Công Nghệ Thông Tin – Trường ĐH Quy Nhơn
Chương 1. Giới Thiệu
các bước sau:
1. Mở file để ghi dữ liệu ở dạng nhò phân.
2. Ghi tiêu đề file vào file
3. Ghi thông tin ảnh vào file.
4. Ghi mảng dữ liệu ảnh ở không gian màu RGB vào file
5. Giải phóng bộ nhớ và đóng file.
1.5.3.1. Hàm ghi tiêu đề vào file:
void Write_Bmp_Header(struct BitmapFileHeader bmpHeader,FILE
*fp){
fwrite(&bmpHeader.bfType,2,1,fp);
fwrite(&bmpHeader.bfSize,4,1,fp);
fwrite(&bmpHeader.bfReserved1,2,1,fp);
fwrite(&bmpHeader.bfReserved2,2,1,fp);
fwrite(&bmpHeader.bfOffBits,4,1,fp);
}
1.5.3.2. Hàm ghi thông tin ảnh vào file:
void Write_Info_Header(struct BitmapInfoHeader bmpInfo,FILE
*fp){
fwrite(&bmpInfo.biSize,4,1,fp);
fwrite(&bmpInfo.biWidth,4,1,fp);
fwrite(&bmpInfo.biHeight,4,1,fp);
fwrite(&bmpInfo.biPlanes,2,1,fp);

fwrite(&bmpInfo.biBitCount,2,1,fp);
fwrite(&bmpInfo.biCompression,4,1,fp);
fwrite(&bmpInfo.biImageSize,4,1,fp);
fwrite(&bmpInfo.bihResolution,4,1,fp);
fwrite(&bmpInfo.bivResolution,4,1,fp);
fwrite(&bmpInfo.biClrUser,4,1,fp);
fwrite(&bmpInfo.biClrImportant,4,1,fp);
}
1.5.3.3. Hàm ghi mảng ảnh vào file:
void Write_To_Bmp(struct PixelRGB **I,unsigned int Width,
unsigned int Height, FILE *fp){
short int i,j;
unsigned char ch,temp;
Dương Hoàng Huyên
17
18 Nhập Môn Xử Lí Ảnh
for(i=Height-1;i>=0;i ){
for(j=0;j<Width;j++){
ch=I[i][j].B;
fwrite(&ch,1,1,fp);
ch=I[i][j].G;
fwrite(&ch,1,1,fp);
ch=I[i][j].R;
fwrite(&ch,1,1,fp);
}
temp=4-Width*3 % 4;
fwrite(&temp,1,temp%4,fp);
}
}
1.5.3.4. Hàm tạo một file bitmap từ các thông tin đã có:

void Write_Array_to_File(char *filename,struct PixelRGB
**I,struct BitmapFileHeader bmpHeader,struct
BitmapInfoHeader bmpInfo){
FILE *fp;
unsigned int Width, Height;
Width = bmpInfo.biWidth;
Height = bmpInfo.biHeight;
fp=fopen(filename,"wb");
Write_Bmp_Header(bmpHeader,fp);
Write_Info_Header(bmpInfo,fp);
Write_To_Bmp(I,Width,Height,fp);
fclose(fp);
}
1.5.4. Hàm chuyển đổi không gian màu RGB -> HSI và ngược lại
1.5.4.1. Hàm chuyển không gian màu RGB sang HSI
void RGB2HSI(struct PixelRGB p1,struct PixelHSI *p2){
double min, angle, r, g, b, h, s, i, rgb;
const double pi = 3.141592654;
r = p1.R;
g = p1.G;
b = p1.B;
rgb = r + g + b;
i = rgb / 3 / 255;
r = r / rgb;
g = g / rgb;
b = b / rgb;
min = r;
if(min > g)
min = g;
Khoa Công Nghệ Thông Tin – Trường ĐH Quy Nhơn

Chương 1. Giới Thiệu
if(min > b)
min = b;
if(r == g && g == b)
h = s = 0;
else {
s = 1 - 3 * min;
angle=(r - g/2 - b/2)/sqrt((r-g) * (r-g) + (r-b) *
(g-b));
h = acos(angle);
}
if(b > g)
h = 2 * pi - h;
p2->H = h * 180 / pi;
p2->S = s * 100;
p2->I = i * 255;
}
1.5.4.2. Hàm chuyển không gian màu HSI về RGB
void HSI2RGB(struct PixelHSI p1,struct PixelRGB *p2){
double r, g, b, h, s, i;
const double pi = 3.141592654;
h = p1.H * pi / 180;
s = p1.S / 100.0;
i = p1.I / 255.0;
if(i==0)
r = g = b = 0;
else
if(s==0)
r = g = b = i;
else

if(h <= 2*pi/3){
b = i * (1-s);
r = i * (1 + s*cos(h)/cos(pi/3-h));
g = 3 * i - r - b;
}
else if(h <= 4*pi/3){
h = h - 2*pi/3;
g = i * (1 + s*cos(h)/cos(pi/3-h));
r = i * (1 - s);
b = 3 * i - r - g;
}
else {
h = h - 4 * pi / 3;
b = i * (1 + s*cos(h)/cos(pi/3-h));
g = i * (1 - s);
r = 3 * i - g - b;
Dương Hoàng Huyên
19
20 Nhập Môn Xử Lí Ảnh
}
p2->R = r * 255;
p2->G = g * 255;
p2->B = b * 255;
}
Khoa Công Nghệ Thông Tin – Trường ĐH Quy Nhơn
Chương 2. Xử Lí Điểm
CHƯƠNG 2. XỬ LÍ ĐIỂM
2.1. Phép toán số học trên ảnh
Toán tử số học bao gồm cộng, trừ, nhân, chia một điểm ảnh với một hằng số.
Cộng giá trò tăng độ sáng của điểm ảnh và trừ sẽ làm điểm ảnh tối hơn. Nhân, chia

giá trò điều chỉnh độ tương phản của ảnh.
Các phép toán số học thường tạo ra các giá trò âm hoặc giá trò vượt qua giá
trò lớn nhất của điểm ảnh. Khắc phục điều này bằng cách nếu giá trò âm thì gán 0,
giá trò vượt 255 thì gán 255. Hình 2-1 thể hiện kết quả của cộng, trừ, nhân, chia
ảnh.
a b c
d e
Hình 1.1. a. Ảnh gốc; b. nh cộng 40; c. nh trừ 40; d. nh nhân 1.2; e. nh
chia 2.
2.2. Phép toán XOR
Toán tử Xor logic thiết lập các bit toán hạng khác nhau bằng 0, các bit trong
toán hạng giống nhau bằng 1. Toán tử Xor thường sử dụng để tìm một điểm có giá
Dương Hoàng Huyên
21
22 Nhập Môn Xử Lí Ảnh
trò cho trước bằng cách Xor điểm ảnh đó với giá trò cho trước. Điểm ảnh nào có giá
trò bằng với giá trò cho trước sẽ chuyển sang màu đen, những điểm còn lại sẽ là
màu khác đen.
Trong các phần mềm đồ họa, toán tử Xor sử dụng để tạo ra hình dạng con
trỏ chuột trên màn hình. Khi chuột di chuyển đến đâu ta thực hiện phép Xor của
chuột với các điểm ảnh trên màn hình. Lúc đó màn sẽ chuyển sang hình dạng của
chuột. Khi di chuyển màn hình đến vò trí mới, các điểm trên màn hình ở vò trí cũ sẽ
chuyển về trạng thái ban đầu.
a b c
Hình 1.1. a. nh gốc; b. kết quả ảnh gốc Xor với giá trò 48; c. kết quả ảnh gốc
Xor với 128.
2.3. Bảng tìm kiếm
Thuật toán xử lí từng điểm sẽ hiệu quả hơn nếu sử dụng bảng tìm kiếm
(LUT). LUT là một mảng sử dụng giá trò điểm hiện hành như là chỉ số mảng.
Hình 1.1. Mô tả bảng tìm kiếm.

2.4. Histogram
Khoa Công Nghệ Thông Tin – Trường ĐH Quy Nhơn
Chương 2. Xử Lí Điểm
Histogram là một đồ thò mô tả tần số xuất hiện của những điểm ảnh có mức
xám nào đó. Nói cách khác, Histogram là một vector H={h[0], h[1], , h[N-1]} có
N phần tử. Trong đó h[i] là số điểm ảnh có mức xám thứ i (i=0 N-1) trong ảnh.
Hình 1.1. Ảnh và Histogram.
Ta thấy rằng nếu ảnh tối Histogram của ảnh hướng về bên trái trục ngang và
ảnh sáng Histogram sẽ hướng về bên phải của trục ngang. nh lí tưởng là ảnh có
Histogram đồng dạng, tức là mật độ điểm ảnh phân bố đều trên toàn trục ngang.
Một cách sử dụng khác của Histogram là xác đònh đối tượng trong ảnh. Cho
trước một ảnh, các điểm thuộc đối tượng sẽ có mức xám tương tự. Bằng cách phân
tích chỗ lõm và đỉnh của Histogram, ta xác đònh phạm vi cường độ mức xám nào
thuộc đối tượng và nền.
2.4.2. Cân bằng Histogram
Mục đích của cân bằng Histogram là biến đổi ảnh sao cho ảnh kết quả có
Histogram đồng dạng. Nếu Histogram của ảnh có bao nhiêu đỉnh và chỗ lõm nó
vẫn giữ được các đỉnh và chỗ lõm đó sau cân bằng. Cân bằng Histogram được thực
hiện qua ba bước sau:
1. Tính histogram của ảnh. Tính H={h[i]} với i = 0 L-1
Dương Hoàng Huyên
23
24 Nhập Môn Xử Lí Ảnh
2. Tính tổng histogram chuẩn hóa. Sum_hist[i] =

=
×

i
j

ih
HeightWidth
L
0
][
1
,
với Width, Height là chiều rộng, cao của ảnh.
3. Chuyển đổi ảnh đầu vào thành ảnh đầu ra. Output(i)=Sum_hist[i].
Ví dụ cho ảnh như sau:
1 3 3 3 7 6 5
2 3 8 9 7 5 3
3 3 4 6 2 9 7
4 0 6 5 3 8 5
5 2 3 4 5 7 3
6 1 3 5 6 8 9
Khi đó Width = 7; Height = 6. Các mức xám trong ảnh là 0, 1, 2, 3, 4, 5, 6,
7, 8, 9=L-1; H={1, 2, 3, 11, 3, 7, 5, 4, 3, 3}; Sum_hist={0, 1, 1, 4, 4, 6, 7, 8, 8, 9}
đã làm tròn. nh kết quả là:
1 4 4 4 8 7 6
1 4 8 9 8 6 4
4 4 4 7 1 9 8
4 0 7 6 4 8 6
6 1 4 4 6 8 4
7 1 4 6 7 8 9
Kó thuật cân bằng histogram làm việc tốt trên ảnh với chi tiết ảnh ở vùng tối.
a b
Hình 1.1. nh gốc (a) và ảnh sau khi cân bằng histogram (b).
Khoa Công Nghệ Thông Tin – Trường ĐH Quy Nhơn
Chương 2. Xử Lí Điểm

2.4.3. Histogram chỉ trước
Cân bằng Histogram luôn cho ảnh có Histogram đồng dạng. Có những
trường hợp ta không muốn ảnh có histogram đồng dạng này. Chẳng hạn như ta
muốn ảnh sáng hơn, tối hơn hoặc có độ tương phản cao hơn. Những thao tác này có
thể thực hiện được bằng cách chỉ ra một Histogram mong muốn và sau đó chuyển
ảnh kết quả sao cho có histogram này.
Phương pháp chỉ trước Histogram được thực hiện qua hai bước. Thứ nhất cân
bằng Histogram, thứ hai cân bằng ngược của ảnh đã cân bằng. Bước thứ hai có thể
được mô tả chi tiết như sau:
- Gọi sum_hist[i] là tổng histogram cho trước từ 0 đến i.
- Inv_hist[i] là biến đổi của điểm ảnh có mức xám thứ i và được tính
như sau: Inv_hist[i] = j sao cho j thỏa mãn điều kiện min{i -
sum_hist[j], với j = 0 255}.
Sau khi đã tính được Inv_hist[i] ta thay mức xám i của ảnh đầu vào
bằng chính giá trò inv_hist[i].
a b
Hình 1.1. nh gốc (a) và ảnh với histgram cho trước là một hàm Parabol (b).
2.5. Tăng độ tương phản
Dương Hoàng Huyên
25

×