1. Trang chủ
  2. » Công Nghệ Thông Tin

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

81 1,3K 23

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Tiêu đề Tài liệu Image Processing in C (Giao trinh xu ly anh) PPT
Tác giả Dương Hoàng Huyên
Trường học Trường Đại học Bách Khoa Hà Nội
Chuyên ngành Xử lý ảnh
Thể loại Giáo trình
Thành phố Hà Nội
Định dạng
Số trang 81
Dung lượng 8,58 MB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

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.. Nhiều

Trang 1

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 Aû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 24

2.5 Tăng độ tương phản 25

2.6 Biến đổi cường độ 27

Trang 2

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 Aù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

Trang 3

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 Aû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

CHƯƠNG 7 BIẾN ĐỔI ẢNH 75

7.1 Giới thiệu 75

7.2 Biến đổi Fourier rời rạc 75

7.3 Biến đổi Fourier nhanh 75

7.4 Lọc trong miền tần số 75

7.5 Biến đổi Cosine rời rạc 75

CHƯƠNG 8 LÀM MÉO VÀ BIẾN ẢNH 77

8.1 Biến đổi Affine 77

8.2 Biến đổi phối cảnh 79

8.3 Biến đổi song tuyến 80

Trang 4

8.4 Thuật toán MeshWarp 82

8.5 Thuật toán lấy mẫu của Fant 82

8.6 Làm méo bằng phương pháp field-based 82

8.7 Chồng chéo 82

8.8 Một vài điểm lưu ý khi biến ảnh 82

CHƯƠNG 9 NÉN ẢNH 83

9.1 Giới thiệu 83

9.1.1 Mã loạt dài 83

9.1.2 Mã Huffman 83

9.1.3 Biến đổi mã Huffman 83

9.1.4 READ 83

9.1.5 Nén LZW 83

9.1.6 Mã hóa toán học 83

9.1.7 Nén chuẩn JPEG 83

9.2 Một số phương pháp nén khác 83

9.2.1 Vector lượng tử hóa 83

9.2.2 Nén Fractal 83

9.2.3 Biến đổi Wavelet rời rạc 83

tài liệu tham khảo 85

Trang 5

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ậttrong 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ị suygiả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àycũ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ùnglà 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ìnhhọ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 đổigiá 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 7trả 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

Trang 6

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àythành ảnh khác, xóa những đối tượng không mong muốn, tạo ảnh mới từ nhữngphầ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 trongfile 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ầyhơ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áchtạ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ầnmềm làm việc này còn gọi là DIP (Document Image Processing) Nhiều ngân hàngsử 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àikhoả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ế

Trang 7

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ônggian 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 gianmàu khác nhau Trong ngành công nghiệp xuất bản, sử dụng không gian màuCMY Màn hình máy vi tính, sử dụng không gian màu RGB Những ứng dụng phảithao 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ụngkhông gian HSI Những không gian màu đề cập sau đây đều được chuẩn hóa (cácgiá 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àunà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 đượcbiểu diễn bằng 24bit màu, khi đó đó mỗi thành phần màu sẽ được mã hóa thành8bit ứng với 256 giá trị Ví dụ: màu đỏ (255, 0, 0), màu xanh lá cây (0, 255, 0), màuxanh dương (0, 0, 255), màu trắng (255, 255, 255), màu đen (0, 0, 0) Mô hình màunày thường được sử dụng để hiển thị màu trong máy tính, tuy nhiên do các thànhphần có độ tương quan cao nên không thích hợp cho các ứng dụng xử lí ảnh

Trang 8

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, takhô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

Trang 9

thay đổi thành phần Intensity Trong các ứng dụng xử lí ảnh, các thao tác chỉ làmviệc trên thành phần Intensity của điểm ảnh, do đó ta thường sử dụng không gianmà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àmviệ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:

B G R

R r

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:

b r g r h

2

2

1 cos , nếu b > g thì h = 2π-h, h [0,2π].].

) cos(

1

h

h s i

r ; b = i.(1 - s); g = 3.i – (r + b);

+ Nếu 2/3π] ≤ h < 4/3π].: h = h – 2/3π].:

Trang 10

) cos(

1

h

h s i

) cos(

1

h

h s i

b ; 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

Aû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ínhiệ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 ảnhthườ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ảngcho 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ảngcá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ạonên mật độ phân bố đó chính là độ phân giải và được phân bố trên hai trục x, ytrong 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ố.Thông thường ta mã hóa cường độ sáng gồm có 2, 16, 32, 64, …, 2k mức khác nhau

Trang 11

Khi đó mỗi điểm ảnh có mức xám từ 0 ≤ l ≤ L.

1.4.3 Aûnh số (Digital Image)

Aû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ếptheo 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, ylà 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 Hf=[h(0), h(1), , h(m)] mỗi thành phần h(i)của vector Hf 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 Hf, 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 Trongnhững năm gần đây xuất hiện nhiều định dạng file BMP không tương thích vớinhau Để đơn giản trong cài đặt, tài liệu này chỉ giới thiệu file ảnh bitmap với 24bit

Trang 12

màu Cấu trúc của một file bitmap 24bit màu như sau:

File HeaderImage HeaderPixel Data1.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

bfType 2 Luơn luơn là 'BM' để cho biết file ảnh Bmp.bfSize 4 Cho biết kích thước của file bmp.bfReserved1 2 Luơn thiết lập 0

bfReserved2 2 Luơn 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ànhOS/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)

Trang 13

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/meterbiYPelsPerMeter 4 Độ phân giải tính bằng pixel/meterbiClrUser 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 địnhoffset 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òntớ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 bagiá trị Blue, Green, Red tương ứng Chú ý, trật tự của ba thành phần màu bị đảongượ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:

1 Mở file bmp để đọc ở dạng nhị phân

Trang 14

2 Lấy thông tin của file bmp bằng cách đọc thông tin ra cấu trúc bitmapheader.

3 Lấy thông tin dữ liệu ảnh bằng cách đọc dữ liệu ra cấu trúc Bitmapinformation 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

Trang 15

void Read_Bmp_Header(struct BitmapFileHeader *bmpHeader,FILE

1.5.2.5 Hàm đọc thông tin về dữ liệu ảnh:

void Read_Info_Header(struct BitmapInfoHeader *bmpInfo,FILE

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){

Trang 16

struct PixelRGB **Allocate_Memory_RGB(unsigned int Width,

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;

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

Trang 17

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

1.5.3.2 Hàm ghi thông tin ảnh vào file:

void Write_Info_Header(struct BitmapInfoHeader bmpInfo,FILE

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;

for(i=Height-1;i>=0;i ){

Trang 18

}

}

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

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;

Trang 19

1.5.4.2 Hàm chuyển không gian màu HSI về RGB

void HSI2RGB(struct PixelHSI p1,struct PixelRGB *p2){

Trang 20

p2->G = g * 255;

p2->B = b * 255;

}

Trang 21

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, chiagiá 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

Hình 1.1 a Ảnh gốc; b Aûnh cộng 40; c Aûnh trừ 40; d Aûnh nhân 1.2; e Aû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 trongtoá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á

Trang 22

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 contrỏ 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ủachuộ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ủachuộ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

Trang 23

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 Aû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

2 Tính tổng histogram chuẩn hóa Sum_hist[i] =

Trang 24

 

j h i Height

Width

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:

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 Aûnh kết quả là:

Trang 25

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ư tamuố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ínhnhư 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àobằng chính giá trị inv_hist[i]

Trang 26

tương phản thấp hầu hết là tối, hầu hết là sáng, hầu hết là xám Trong Histogram

của ảnh có độ tương phản thấp, các điểm thường tập trung ở bên trái, bên phải,chính giữa của đồ thị Aûnh có độ tương phản cao có cả vùng tối và sáng Hình 2-7thể hiện histogram của ảnh có độ tương phản thấp và cao

Hình 1.1 Histogram của ảnh có độ tương phản thấp và cao tương ứng.

Giãn độ tương phản áp dụng vào ảnh để kéo giãn histogram sao chohistogram lấp đầy phạm vi hiển thị của ảnh Kĩ thuật này làm việc tốt với ảnh có

histogram được phân bố như hàm Gaussian.

Có hai kiểu giãn độ tương phản đó là giãn độ tương phản cơ bản và

ends-in-search Giãn độ tương phản cơ bản làm việc tốt trên ảnh có tất cả các điểm ảnh tập

trung một phần của Histogram Công thức như sau:

low high

low input

Giãn độ tương phản bằng phương pháp ends-in-search với công thức cụ thể

for

high input

low for low

high

low input

low input

for

255

255 0

High, low trong trường hợp này là phần trăm số điểm ảnh.

Trang 27

a b

Hình 1.2 Ảnh gốc (a) và ảnh giãn độ tương phản bằng phương pháp

ends-in-search với 5% điểm đen và 5% điểm trắng (b)

2.6 Biến đổi cường độ

Biến đổi cường độ điểm ảnh là chuyển một điểm ảnh thành điểm mới dựavào hàm định nghĩa trước Những hàm chuyển đổi này thường cài đặt bằng mộtbảng tìm kiếm Mối liên hệ giữa điểm ảnh đầu vào và đầu ra được thể hiện bằngmột đồ thị Giá trị điểm ảnh gốc theo chiều ngang, giá trị điểm ảnh đầu ra theo trụcdọc Hàm chuyển đổi đơn giản nhất là lấy ảnh âm bản Hàm được định nghĩa nhưsau: output = 255 – input

Hình 1.1 Ảnh gốc (a), đồ thị hàm ảnh âm bản (b), ảnh kết quả (c).

Một số hàm thông dụng dùng cho chuyển đổi cường độ như sau:

1 Hàm tương quan Gamma: output = input1/

2 Hàm Solarise: output =

 threshold x

với x - 255

threshold x

với

x

Trang 28

3 Hàm Parabol thứ nhất: output = 255 – 255(input/128-1)2.

4 Hàm Parabol thứ hai: output = 255(input/128-1)2

5 Hàm tăng cường độ trong phạm vi cho trước: output =

Hình 1.2 Aûnh gốc (a), đồ thị hàm Gamma với =2.2 (b), ảnh kết quả khi biến

đổi bằng hàm trên (c)

Hình 1.3 Aûnh gốc (a), đồ thị hàm Gamma với =0.45 (b), ảnh kết quả khi biến

đổi bằng hàm trên (c)

Trang 29

khi biến đổi bằng hàm trên (c).

Hình 1.7 Aûnh gốc (a), đồ thị hàm highlight (b), ảnh kết quả khi biến đổi bằng

hàm trên (c) với ngưỡng min=50, Max=150

2.7 Cài đặt thuật toán

Trang 30

2.7.1 Phép toán số học trên ảnh

2.7.1.1 Hàm cộng một giá trị vào từng điểm ảnh

Phép toán cộng ảnh với hằng số J là ma trận các điểm ảnh ở không gianmàu HSI; Width, Height là chiều rộng, cao của ảnh; factor là hằng số cộngvào ảnh, nếu factor > 0 ảnh sẽ sáng hơn, factor < 0 ảnh tối lại

void Adding_Pixel(struct PixelHSI **J, unsigned int Width,

unsigned int Height,short int factor){

unsigned int i, j;

unsigned char LUT[256];

for(i=0; i<255;i++)

2.7.1.2 Hàm nhân một giá trị cho từng điểm ảnh

Phép toán nhân ảnh với hằng số J là ma trận các điểm ảnh ở không gianmàu HSI; Width, Height là chiều rộng, cao của ảnh; factor là hằng số nhânvào ảnh, nếu factor > 1 ảnh có độ tương phản cao hơn, factor < 1 ảnh giảmđộ tương phản

void Multiplying_Pixel(struct PixelHSI **J, unsigned int

Width, unsigned int Height,float factor){

Trang 31

for(i=0; i<Height; i++)

for(j=0; j<Width; j++)

J[i][j].I = LUT[J[i][j].I];

}

2.7.2 Phép toán XOR

2.7.2.1 Hàm thực hiện phép toán XOR logic

Phép toán XOR ảnh với hằng số J là ma trận các điểm ảnh ở không gianmàu HSI; Width, Height là chiều rộng, cao của ảnh; mask là mặt nạ

void Xor_Pixel(struct PixelHSI **J, unsigned int Width,

unsigned int Height,unsigned char mask){

unsigned int i,j;

for(i=0; i<Height; i++)

for(j=0; j<Width; j++)

J[i][j].I ^= mask;

}

2.7.3 Các thuật toán trên Histogram

2.7.3.1 Hàm thực hiện thuật toán cân bằng Histogram

P là ma trận ảnh ở không gian màu HSI; Width, Height là kích thước ảnh;H[256]là histogram của ảnh; Pi[256] là histogram chuẩn hóa của ảnh;SumPi[256] là tổng histogram chuẩn hóa của ảnh từ 0 đến i; LUT[i] là giá trịđiểm ảnh đầu ra với mức xám đầu vào là i

void Histogram_Equalize(struct PixelHSI **P,unsigned int

Width,unsigned int Height){

unsigned int i,j;

Trang 32

//Calculate sum of Normalize Histogram

LUT[i] = (unsigned char)( 255 * SumPi[i]);

//Calculate new image

for(i=0;i<Height;i++)

for(j=0;j<Width;j++)

P[i][j].I = LUT[P[i][j].I];

}

2.7.3.2 Hàm chuyển ảnh về Histogram cho trước

P là ma trận ảnh ở không gian màu HSI; Width, Height là kích thước ảnh;desired_hist là histogram mong muốn (histogram ở dạng chuẩn hóa)

void Histogram_Specification(struct PixelHSI **P, unsignedint Width, unsigned int Height,float *desired_hist){

unsigned char sum_hist[256],inv_hist[256],min;

}

for(i=0; i<Height; i++)

for(j=0; j<Width; j++)

P[i][j].I = inv_hist[P[i][j].I];

Trang 33

2.7.4 Hàm tăng độ tương phản bằng kĩ thuật End-in-Search

J là ma trận ảnh ở không gian màu HSI; Width, Height là kích thước ảnh;low phần trăm điểm ảnh có mức xám 0, high là phần trăm điểm ảnh có mức xám255

void E_I_Contrast_Stretch(struct PixelHSI **J,unsigned int

Width, unsigned int Height, float low, float high){

short int i, j;

float H[256],d, runsum;

unsigned char LUT[256],lowthresh, highthresh;

for(i=0; i<=255; i++)

}

d = (float)(highthresh - lowthresh);

for(i=0; i<lowthresh; i++)

LUT[i] = 0;

for(i=highthresh+1; i<=255; i++)

LUT[i] = 255;

for(i=lowthresh; i<=highthresh; i++)

LUT[i] = (unsigned char)( 255 * (i - lowthresh)/d);

for(i=0;i<Height;i++)

Trang 34

J[i][j].I = LUT[J[i][j].I];

}

2.7.5 Biến đổi cường độ

J là ma trận ảnh ở không gian màu HSI; Width, Height là kích thước ảnh;

f là con trỏ hàm, con trỏ này nhận hàm chuyển đổi điểm ảnh

void Intensity_Transform(struct PixelHSI **J, unsigned int

Width, unsigned int Height,float (*f)(float x)){

unsigned int i, j;

unsigned char LUT[256];

for(i=0; i<=255; i++)

LUT[i] = (unsigned char)(*f)(i);

for(i=0; i<Height; i++)

Trang 35

float Negative(float x){

return 255-x;

}

2.7.5.5 Hàm Solarise

Để thay đổi ngưỡng, ta thay đổi giá hằng t

float Solarize(float x){

const char t=150;

if(x <= t) return x;

else return 255-x;

}

2.7.5.6 Hàm làm nổi những đối tượng có mức xám nằm trong ngưỡng min Max

Để thay đổi tham số min, Max ta thay đổi hằng min, Max trong hàm

float Range_Highlight(float x){

unsigned char min=50, Max = 150;

Trang 36

CHƯƠNG 3 XỬ LÍ VÙNG

3.1 Cuộn

Cuộn rời rạc được sử dụng nhiều trong xử lí ảnh ví dụ làm trơn, làm nét,phát hiện biên, cuộn đơn giản là tính tổng có trọng số của các điểm xung quanhđiểm đang xét Trọng số này được xác định bởi ma trận nhỏ gọi là mặt nạ cuộn Sốchiều của ma trận này thường là số lẻ để xác định được tâm của ma trận Vị trí củatâm tương ứng với vị trí của điểm ảnh đầu ra Giá trị điểm mới được tính bằng cáchnhân giá trị các điểm lân cận với trọng số của mặt nạ và tính tổng các tích này Giátrị mới sẽ đặt vào vị trí của điểm ảnh mới và nó được sử dụng để sinh ra điểm mớitiếp theo

Tổng các hệ số trong mặt nạ cuộn thường bằng 1, một vài mặt nạ cuộn cócác hệ số âm và tổng các hệ số này bằng 0 Trong trường hợp này việc tính toán cóthể sinh một giá trị âm Để hiển thị được điểm ảnh này ta có thể cộng thêm vàođiểm ảnh mới sinh bằng một hằng số dương (chẳng hạn như 128) nếu giá trị sau đóvẫn nhỏ hơn 0 thì ta thiết lập bằng 0 Hoặc ta có thể giữ nguyên các giá trị đã tínhđược sau đó ánh xạ toàn bộ các giá trị đó về đoạn [0,255]

Một vấn đề nữa khi cuộn ảnh đó là làm sao tính các điểm biên của ảnh bởi

vì khi đưa mặt nạ cuộn vào điểm (0,0) chẳng hạn, khi đó các hệ số của mặt nạcuộn nằm ngoài phạm vi ảnh Để khắc phục điều này ta có thể sử dụng nhiều cáchkhác nhau ví dụ ta coi các điểm ngoài biên ảnh có giá trị bằng 0, hoặc ta chỉ tínhtoán những điểm ảnh mà khi đưa mặt nạ cuộn vào thì nằm hoàn toàn trong ảnh

Chạm nổi ảnh (Emboss) là một ví dụ của nhân cuộn Chạm nổi là làm cho

ảnh hiển thị như khắc trên bề mặt của kẽm, mặt nạ chạm nổi có hệ số ở tâm bằng

Trang 37

1 0 0

0 0

0 và kết quả thể hiện như hình 3-1

Hình 1.1 Aûnh gốc (a) và ảnh được chạm nổi (b).

Khi cuộn với ảnh màu ta có thể thực hiện thao tác cuộn trên thành phần

Intensity của không gian HSI hoặc có thể cuộn trên các thành phần R, G, B.

3.2 Làm mờ ảnh (Blurring)

Làm mờ hay lọc thông thấp xóa các chi tiết mịn trong ảnh Nó có nhiều ứngdụng trong thực tế Ví dụ mô phỏng camera xa tiêu điểm, hoặc làm giảm chú ý đếnnền Kĩ thuật làm mờ ảnh thực hiện thông qua một mặt nạ cuộn Thông thường mặtnạ này có các hệ số bằng nhau, ví dụ mặt nạ 3×3 các hệ số là 1/9, mặt nạ 5×5 cáchệ số là 1/25, mặt nạ có kích thước càng lớn thị độ mờ của ảnh càng cao Mặt nạnày còn gọi là mặt nạ trung bình bởi vì việc nhân ảnh với mạt nạ giống như tínhtrung bình các điểm ảnh lân cận điểm đang xét Mặt nạ trung bình còn có tác dụnglàm giảm độ tương phản của ảnh Ta có thể sử dụng kĩ thuật khác làm mờ ảnh đó

là lọc thông thấp (Lowpass Filter) thường được dùng để xóa nhiễu của ảnh, tuy

nhiên kĩ thuật này này xóa được nhiễu nhưng làm mờ các biên của đối tượng

Trang 38

2 4 2

1 2 1

(

2 2 2



y x

e y

Ta có thể sinh mặt nạ từ hàm Gaussian này bằng cách coi các giá trị x, y là

vị trí (tọa độ) của phần tử đó trong ma trận, giá trị G(x,y) là giá trị của phần tử đóvà tâm của ma trận là tại (0,0) Giả sử khi mặt nạ cuộn là 3×3, khi đó ta sử dụngcác cặp (-1,-1), (-1,0), (-1,1), (0,-1), (0,0), (0,1), (1,-1), (1,0), (1,-1) là cặp giá trị(x,y) để thế vào công thức trên Cụ thể, khi =1, khi đó mặt nạ là:

Trang 39

0 1 1 1 0

1 3 5 3 1

1 5 8 5 1

1 3 5 3 1

0 1 1 1 0

52

1

Với =1,7 ta có mặt nạ:

0 1 1 1 1 1 0

1 1 2 3 2 1 1

1 2 4 5 4 2 1

1 3 5 6 5 3 1

1 2 4 5 4 2 1

1 1 2 3 2 1 1

94 1

Với =2 ta có mặt nạ:

0 0 0 0 1 0 0 0 0

0 0 1 1 1 1 1 0 0

0 1 1 2 2 2 1 1 0

0 1 1 2 2 2 1 1 0

1 1 2 4 4 4 2 1 1

0 1 2 3 4 3 2 1 0

0 1 1 2 2 2 1 1 0

0 0 1 1 1 1 1 0 0

0 0 0 0 1 0 0 0 0

3.3 Làm nét ảnh (Sharpening)

Làm nét là kĩ thuật ngược lại với làm mờ Làm nét ảnh là làm nổi các chi

Trang 40

tiết của ảnh lên Khi một ảnh bị mờ từ trước hoặc do quá trình thu nhận ảnh, ta cóthể khôi phục ảnh này ở trạng thái thích hợp bằng cách làm nét ảnh lên Làm nétảnh cũng làm tăng độ tương phản.

Hình 1.1 Aûnh gốc (a); ảnh đã được làm nét (b).

Mặt nạ cuộn sử dụng trong kĩ thuật làm nét có các hệ số dương ở tâm và hầuhết các hệ số âm ở biên của mặt nạ Một số mặt nạ dùng để làm nét ảnh như sau:

0 1 0

1 5 1

0 1 0

1 9 1

1 1 1

2 5 2

1 2 1

Ta có thể sử dụng kĩ thuật lọc thông cao (Highpass Filter) để làm nét ảnh.

Kĩ thuật lọc thông cao xóa những những thành phần có tần số thấp và hiển thịnhững thành phần có tần số cao Mặt nạ lọc thông cao thường được sử dụng là:

1 1 1

1 8 1

1 1 1

Ngày đăng: 23/02/2014, 12:20

HÌNH ẢNH LIÊN QUAN

Hình 1.1. Khơng gian màu HSI. - Tài liệu Image Processing in C (giao trinh xu ly anh) ppt
Hình 1.1. Khơng gian màu HSI (Trang 8)
Hình 1.1. Không gian màu RGB. - Tài liệu Image Processing in C (giao trinh xu ly anh) ppt
Hình 1.1. Không gian màu RGB (Trang 8)
Hình 1.1. a. Ảnh gốc; b. Aûnh cộng 40; c. Aûnh trừ 40; d. Aûnh nhân 1.2; e. Aûnh - Tài liệu Image Processing in C (giao trinh xu ly anh) ppt
Hình 1.1. a. Ảnh gốc; b. Aûnh cộng 40; c. Aûnh trừ 40; d. Aûnh nhân 1.2; e. Aûnh (Trang 21)
Hình 1.1. Ảnh và Histogram. - Tài liệu Image Processing in C (giao trinh xu ly anh) ppt
Hình 1.1. Ảnh và Histogram (Trang 23)
Hình 1.1. Aû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 - Tài liệu Image Processing in C (giao trinh xu ly anh) ppt
Hình 1.1. Aû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 (Trang 25)
Hình 1.2. Ảnh gốc (a) và ảnh giãn độ tương phản bằng phương pháp ends-in- - Tài liệu Image Processing in C (giao trinh xu ly anh) ppt
Hình 1.2. Ảnh gốc (a) và ảnh giãn độ tương phản bằng phương pháp ends-in- (Trang 27)
Hình 1.1. Ảnh gốc (a), đồ thị hàm ảnh âm bản (b), ảnh kết quả (c). - Tài liệu Image Processing in C (giao trinh xu ly anh) ppt
Hình 1.1. Ảnh gốc (a), đồ thị hàm ảnh âm bản (b), ảnh kết quả (c) (Trang 27)
Hình 1.3. Aûnh gốc (a), đồ thị hàm Gamma với γ=0.45 (b), ảnh kết quả khi biến - Tài liệu Image Processing in C (giao trinh xu ly anh) ppt
Hình 1.3. Aûnh gốc (a), đồ thị hàm Gamma với γ=0.45 (b), ảnh kết quả khi biến (Trang 28)
Hình 1.4. Aûnh gốc (a), đồ thị hàm Solarize với ngưỡng =150 (b), ảnh kết quả - Tài liệu Image Processing in C (giao trinh xu ly anh) ppt
Hình 1.4. Aûnh gốc (a), đồ thị hàm Solarize với ngưỡng =150 (b), ảnh kết quả (Trang 29)
Hình 1.5. Aûnh gốc (a), đồ thị hàm Parabol1 (b), ảnh kết quả khi biến đổi bằng - Tài liệu Image Processing in C (giao trinh xu ly anh) ppt
Hình 1.5. Aûnh gốc (a), đồ thị hàm Parabol1 (b), ảnh kết quả khi biến đổi bằng (Trang 29)
Hình 1.7. Aûnh gốc (a), đồ thị hàm highlight (b), ảnh kết quả khi biến đổi bằng - Tài liệu Image Processing in C (giao trinh xu ly anh) ppt
Hình 1.7. Aûnh gốc (a), đồ thị hàm highlight (b), ảnh kết quả khi biến đổi bằng (Trang 30)
và kết quả thể hiện như hình 3-1. - Tài liệu Image Processing in C (giao trinh xu ly anh) ppt
v à kết quả thể hiện như hình 3-1 (Trang 37)
Hình 1.1. Aûnh gốc (a); ảnh làm mờ bằng mặt nạ trung bình với kích thước 3×3 - Tài liệu Image Processing in C (giao trinh xu ly anh) ppt
Hình 1.1. Aûnh gốc (a); ảnh làm mờ bằng mặt nạ trung bình với kích thước 3×3 (Trang 38)
Hình 1.2. Aûnh gốc (a); ảnh làm mờ bằng mặt nạ Gaussian với σ=1 (b); - Tài liệu Image Processing in C (giao trinh xu ly anh) ppt
Hình 1.2. Aûnh gốc (a); ảnh làm mờ bằng mặt nạ Gaussian với σ=1 (b); (Trang 39)
Hình 1.1. Aûnh gốc (a); ảnh đã được làm nét (b). - Tài liệu Image Processing in C (giao trinh xu ly anh) ppt
Hình 1.1. Aûnh gốc (a); ảnh đã được làm nét (b) (Trang 40)

TỪ KHÓA LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w