CHƯƠNG 1 – Statistics library in Python1.1 Giới thiệu về thư viện Statistics: Thư viện Statistics trong python là một thư viện mang chức năng như một bộ công cụ mạnh mẽ được sử dụng để t
Trang 1TIỂU LUẬN XÁC SUẤT THỐNG KÊ
GIỮA KỲ
Người hướng dẫn: ThS Trần Lương Quốc Đại Người thực hiện: Hà Thị Nguyệt Hà
Lớp : 22050201 Khoá : 26
THÀNH PHỐ HỒ CHÍ MINH, NĂM 2023
Trang 2LỜI CẢM ƠN
Lời đầu tiên em xin gửi lời cảm ơn đến 2 giảng viên đang giảng dạy cho em môn Xác suất thống kê, thầy Trần Lương Quốc Đại dạy thực hành môn và cô Huỳnh Thị Thùy Trâm dạy lý thuyết môn Hai giảng viên đã dạy tâm huyết và nhiệt tình giảng dạy, luôn giải đáp mọi thắc mắc của sinh viên và quan trọng nhất là giúp đỡ em trong việc làm tiểu luận giữa kỳ môn học Xác suất thống kê.
Trang 3CÔNG TRÌNH ĐƯỢC HOÀN THÀNH
TẠI TRƯỜNG ĐẠI HỌC TÔN ĐỨC THẮNG
Tôi xin cam đoan đây là công trình nghiên cứu của riêng tôi và được sự hướngdẫn khoa học của ThS Trần Lương Quốc Đại; Các nội dung nghiên cứu, kết quả trong
đề tài này là trung thực và chưa công bố dưới bất kỳ hình thức nào trước đây Những sốliệu trong các bảng biểu phục vụ cho việc phân tích, nhận xét, đánh giá được chính tácgiả thu thập từ các nguồn khác nhau có ghi rõ trong phần tài liệu tham khảo
Ngoài ra, trong luận văn còn sử dụng một số nhận xét, đánh giá cũng như số liệucủa các tác giả khác, cơ quan tổ chức khác đều có trích dẫn và chú thích nguồn gốc
Nếu phát hiện có bất kỳ sự gian lận nào tôi xin hoàn toàn chịu trách nhiệm
về nội dung luận văn của mình Trường đại học Tôn Đức Thắng không liên quan đến
những vi phạm tác quyền, bản quyền do tôi gây ra trong quá trình thực hiện (nếu có)
TP Hồ Chí Minh, ngày 9 tháng 11 năm 2023
Tác giả (ký tên và ghi rõ họ tên)
Hà Thị Nguyệt Hà
Trang 5CHƯƠNG 1 – Statistics library in Python 2
1.1 Giới thiệu về thư viện Statistics: 2
2.2 Hàm fmean(): 3
2.3 Hàm geomatric_mean(): 4
2.4 Hàm harmonic_mean(): 4
a)Có sử dụng weights: 5
b) Không sử dụng weights: 5
2.5 Hàm median(): 5
3.6 Hàm median_low(): 5
2.7 Hàm median_high(): 6
2.8.Hàm median_grouped(): 6
2.9 Hàm mode(): 7
2.11 Hàm quantiles: 8
2.12 Hàm pstdev(): 8
2.13 Hàm pvariance: 9
2.14 Hàm stdev(): 9
2.15 Hàm variance(): 10
2.16 Hàm covariance(): 10
2.17 Hàm correlation(): 11
2.18 Hàm liner_regression: 11
CHƯƠNG 2 – HISTOGRAM EQUALIZATION ALGORITHM 13
2.1 Trình bày, giới thiệu thuật toán: 13
2.2.1 Cơ sở lí thuyết: 14
2.2.2 Các bước của thuật toán: 15
CHƯƠNG 3 – HISTOGRAM MATCHING ALGORITHM 16
3.2.1 Cơ sở lí thuyết: 16
3.2.2 Minh họa: 17
CHƯƠNG 4 – IMPLEMENTATION 18
Tổng quát chương 4, 18
4.2 Histogram Matching Algorithm: 22
Trang 6CHƯƠNG 1 – Statistics library in Python
1.1 Giới thiệu về thư viện Statistics:
Thư viện Statistics trong python là một thư viện mang chức năng như một bộ công
cụ mạnh mẽ được sử dụng để thực hiện các phép tính thống kê cơ bản trên bộ dữ liệu
số Được thiết kế và tích hợp sẵn trong thư viện chuẩn của Python, nó giúp người dùng
phân tích, mô tả và tính toán dữ liệu số
Công dụng của thư viện statistics:
-Tính toán các đại lượng cơ bản: Thư viện cung cấp các hàm để tính trung bình
(mean), độ lệch chuẩn (standard deviation), phương sai (variance), median, mode, và
nhiều đại lượng thống kê khác Những công cụ này giúp chúng ta có cái nhìn tổng quan
về trung tâm và phân phối của dữ liệu
-Phân tích trung tâm và phân phối: Bạn có thể sử dụng thư viện để xác định giá trị
trung bình của dữ liệu (mean), đồng thời điều này cũng giúp bạn hiểu về sự biến động
của dữ liệu thông qua độ lệch chuẩn (standard deviation) và phương sai (variance)
-Xác định tính tương đối của dữ liệu: Thư viện hỗ trợ trong việc xác định gitrung vị (median), giá trị xuất hiện nhiều nhất (mode), và các phân vị (percentiles),
giúp bạn hiểu rõ hơn về sự phân phối của dữ liệu
-Thực hiện trung bình trọng số: Nếu bạn làm việc với dữ liệu có trọng số, thư viện
cung cấp hàm fmean() để tính trung bình trọng số dựa trên trọng số của mỗi giá trị
-Hỗ trợ xử lý dữ liệu lớn: Các hàm trong thư viện được tối ưu hóa để xử lý cả dữ
liệu lớn, giúp bạn thực hiện các phép tính thống kê một cách hiệu quả
1.2 Hàm mean():
* Ý nghĩa: Hàm mean(data) tính giá trị trung bình (mean) của một danh sách dữ liệu
* Cú pháp: statistics.mean(data)
Trong đó, data là đối số đầu vào của hàm, đại điện cho danh sách dữ liệu mà bạn
muốn tính giá trị trung bình
Trang 8Kết quả trả về:
2.4 Hàm harmonic_mean():
* Ý nghĩa: Hàm harmonic_mean được sử dụng để trả về giá trị trung bình hài hòa của
dữ liệu, một chuỗi hoặc số lần lặp của các số có giá trị thực Nếu weights bị bỏ qua hoặc không có thì giả sử trọng số bằng nhau
Trang 9Trong đó, data là đối số đầu vào của hàm, đại diện cho danh sách dữ liệu mà bạnmuốn tính giá trị trung vị.
Ví dụ:
Kết quả trả về:
3.6 Hàm median_low():
*Ý nghĩa: Hàm median_low(data) dùng để trả về giá trị trung bình thấp của dữ liệu
số Nếu dữ liệu trống, lỗi thống kê sẽ xuất hiện dữ liệu có thể là một chuỗi hoặc có thể lặp lại
Trang 10Kết quả trả về:
2.8.Hàm median_grouped():
*Ý nghĩa: Hàm statistics.median_grouped(data, interval=1) được sử dụng để tính giá trịtrung vị (median) của một dãy dữ liệu nhóm (grouped data) Hàm này cho phép bạn tính giá trị trung vị khi bạn chỉ có thông tin về các nhóm dữ liệu và không biết giá trị
* Cú pháp: statistics.mode(data)
Trong đó, data là danh sách các chứa số
Ví dụ:
Kết quả trả về:
Trang 112.10 Hàm multimode():
* Ý nghĩa: Hàm multimode dùng để trả về danh sách các giá trị xuất hiện thường xuyên nhất theo thứ tự chúng xuất hiện lần đầu trong dữ liệu, hàm này sẽ trả về nhiều kết quả nếu có nhiều chế độ hoặc danh sách trống nếu dữ liệu trống
* Cú pháp: statistics.quantiles(data, *, n=4, method='exclusive')
Trong đó
+ data là bộ dữ liệu truyền vào
+ n là số lượng phân vị mà bạn muốn tính, mặc định chính là 4(ở đây có thể hiểu là chia theo 4 phần bằng nhau)
+ method là phương pháp tính toán giá trị phân vị, tùy chọn Mặc định phương pháp là ‘exclusive’
Ví dụ:
Kết quả trả về:
Trang 122.12 Hàm pstdev():
* Ý nghĩa: Hàm pstdev() được sử dụng để tính độ lệch chuẩn dự đoán của một bộ dữ liệu Từ đó ta thấy được độ phân tán của các giá trị trong bộ dữ liệu, tìm ra đại điện chotoàn bộ bộ dữ liệu
*Cú pháp: statistics.pstdev(data,mu=None)
Trong đó
+ data là bộ dữ liệu truyền vào
+ mu là giá trị trung bình dự đoán của bộ dữ liệu, nếu không được cung cấp, hàm sẽ tự động tính giá trị trung bình từ bộ dữ liệu truyền vào
Ví dụ:
Kết quả trả về:
2.13 Hàm pvariance:
* Ý nghĩa: Hàm pvariance dùng để dự đoán phương sai của một bộ dữ liệu Phương sai
dự đoán đo lường mức độ phân tán của các giá trị trong bộ dữ liệu
* Cú pháp: statistics.pvariance(data,mu=None)
Trong đó:
+ data là bộ dữ liệu truyền vào
+ mu là giá trị trung bình dự đoán của bộ dữ liệu.Nếu không cung cấp tham số, thì nó sẽ tự tính giá trị trung bình từ dữ liệu có sẵn
Ví dụ:
Kết quả trả về:
Trang 132.14 Hàm stdev():
* Ý nghĩa: Hàm dùng để ước tính độ lệch chuẩn dựa trên mẫu Độ lệch chuẩn là số đo
độ phân tán của các giá trị so với giá trị trung bình
* Cú pháp: statistics.stdev(data,xbar=None)
Trong đó,
+ data là bộ dữ liệu truyền vào
+ xbar là giá trị trung bình của mẫu, nếu không được cung cấp thì hàm này sẽ tự động tính giá trị trung bình từ bộ dữu liệu có sẵn
* Cú pháp: statistics.variance(data,xbar=None)
Trong đó:
+ data là bộ dữ liệu truyền vào
+ xbar là giá trị trung bình của bộ dữ liệu, nếu không cung cấp sẽ tự độngtính giá trị trung bình của bộ dữ liệu đã truyền vào
Ví dụ:
Kết quả trả về:
Trang 142.16 Hàm covariance():
* Ý nghĩa: Hàm covariance dùng để trả về hiệp phương sai của thổng thể bộ dữ liệu tức
là trung bình tích của các độ lệch cho mỗi cặp điểm dữ liệu tronh hai tập dữ liệu Hiệp phương sai cho ta thấy mối tương gian giữa hai bộ dữ liệu
* Cú pháp: statistics.covariance(x, y, /)
Trong đó:
+ x là mảng hoặc chuỗi dữ liệu thứ 1
+ y là mảng hoặc chuỗi dữ liệu thứ 2
Trang 15*Ý nghĩa: Hàm dùng để thực hiện phân tích hồi quy tuyến tính giữa hai tập dữ liệu x,
y Có thể hiểu cách khác là tìm ra một đường thẳng gần nhất biểu diễn mối quan hệ tuyến tính giữa hai biên
*Cú pháp:statistics.linear_regression(x, y, /, *, proportional=False)
Ví dụ:
Kết quả trả về:
Trang 16CHƯƠNG 2 – HISTOGRAM EQUALIZATION ALGORITHM
2.1 Trình bày, giới thiệu thuật toán:
2.1.1 Khái niệm thuật toán Histogram Equalization:
Histogram equaliztion (Cân bằng lược đồ mức xám) tức là đưa lược đồ mức độ
về dạng chuẩn hay có thể hiểu là làm tăng, giảm độ tương phản tổng thể của nhiều hìnhảnh Có thể hiểu cách khác là, cân bằng Histogram(lược đồ xám) hay chính là biểu đồtần xuất thống kê số lần xuất hiện các mức xám trong ảnh Thông qua việc điểu chìnhnày cường độ mức xám trong mỗi bức hình có thể được phân bổ tốt hơn trên biểu đồ.Điều này cho phép, các khu vực có mức xám thấp hơn có thể cải thiện tốt hơn và đồngđều hơn so với các khu vực khác
Ví dụ ảnh minh họa:
Hình 2.1.1.1 Ví dụ cho thuật toán Histogram Equaliztion
Trang 17Ta có công thức hàm chuyển đổi như sau:
Để cân bằng được lược đồ mức xám ta phải tính được lược đồ mức xám
Ví dụ hình ảnh có kích thước 4x5:
Trang 182.2.2 Các bước của thuật toán:
Bước 1: Thống kê được số lượng các pixel n(k) tương ứng đối với từng mứcxám r(k)
Bước 2: Tính các hàm phân bố tích lũy cho (cdf) các điểm mức ảnh có mức xámnhỏ hơn hoặc bằng k:
Bước 3: Tính giá trị các pixel mới s(k) theo công thức như sau:
Trang 19CHƯƠNG 3 – HISTOGRAM MATCHING ALGORITHM
3.1 Trình bày, giới thiệu thuật toán:
3.1.1 Khái niệm thuật toán Histogram Matching:
Thuật toán Histogram matching còn được gọi là cân bằng histogram, đây là ttoán sử dụng dùng để điều chỉnh độ sáng của một ảnh bằng cách sửa đổi phân phối
cường độ của nó Hướng sử dụng của thuật toán này chính là tăng cường độ tương
phản bằng cách phân phối lại các giá trị pixel qua toàn bộ dài cường độ
3.2 Phương pháp cân bằng của thuật toán Histogram Matching:
3.2.1 Cơ sở lí thuyết:
Ta có:
a: Giá trị xám của một điểm ảnh đầu vào
z: Giá trị xám của một điểm ảnh đầu ra
Ta sẽ biến đổi lược đồ xám của ảnh đầu vào theo lược đồ xám cụ thể nào đó
Các bước của thuật toán:
Bước 1: Tính lược đồ xám h(a) ảnh đầu vào
Bước 2: Cân bằng lược đồ mức xám h(a) ta được:
Bước 3: Cân bằng lược đồ mức xám mẫu ta được:
Trang 203.2.2 Minh họa:
Trang 21CHƯƠNG 4 – IMPLEMENTATION
Tổng quát chương 4,
4.1 Histogram Equalization Algorithm
4.1.2Code mẫu về thuật toán Histogram Equalization:
Code bằng ngôn ngữ lập trình python với tệp ảnh truyền vào tên là ‘example2_image’
4.1.3 Giải thích code mẫu về thuật toán Histogram Equalization:
Bước 1: Khai báo thư viện OpenCV, thư viện Numpy , thư viện Matplotlib vàtruyền ảnh vào
+ Thư viện OpenCV chuyên về xử lý ảnh
+ thư viện Numpy để làm việc với mảng vầ ma trận dễ dàng
+ thư viện Matplotlib sử dụng để vẽ đồ thị và hiển thị hình ảnh
Trang 22Sử dụng hàm ‘cv2.imread’ là một hàm của thư viện OpenCV, để đọc tệp hìnhảnh
Bước 2: Tính lược đồ mức xám (Histogram ): ở bước này, tính lược đồ mứcxám của hình ảnh Số liệu của lược đồ chính là đếm số lần xuất hiện của các giá trịmức xám của hình ảnh Nó cũng thể hiện tần suất của mỗi giá trị mức xám Mức xámcủa một bước ảnh sẽ nằm trong khoảng 0 đến 255 Điều này có thể hiểu rằng mộtpixel trong hình ảnh có thể có mức xám từ 0 ( đen hoàn toàn) tới 255 (trắng hoàn toàn)
Với hình ảnh truyền vào ‘example1_image’, dòng đầu tiên sử dụng hàm
‘cv2.calcHist’ từ thư viện OpenCv để tính toán lược đồ mức xám của hình ảnhtruyền vào Tiếp theo đó sử dụng hàm ‘np.histogram’ từ thư viện Numpy để tínhlược đồ mức xám từ hình ảnh truyền vào ‘example1_image’ bao gồm các tham số
‘example1_image’ , 256 là số lượng bins(khoảng phạm vi mức xám mà bạn chiatrong lược đồ mức xám), và ‘[0,256]’ là phạm vi mức xám
Bước 3: Chuẩn hóa lược đồ (Histogram Normaliztion) : thực hiện chuẩnhóa, điều này đảm bảo rằng tổng các gía trị trong lược đồ bằng tổng số pixel tronghình ảnh Lược đồ có thể thể hiện dưới dạng phân phối xác suất.(Bước này có thểgộp chung với bước 1)
Trang 23Bước 4: Tính CDF(Hàm phân phối tích lũy) từ lược đồ mức xám CFD tích lũydưới dạng hàm liên tục và tăng dần, biểu thị xác suất của giá trị mức xám nhất địnhtrong hình ảnh.
Ở bước này, ta sẽ có CDF và CDF đã được chuẩn hóa
Bước 5: Tạo hàm ánh xạ(Mapping Function) Sau khi đã tính được CDF vàchuẩn hóa Ta dùng hàm ánh xạ để ánh xạ các xá trị mức xám (có giá trị từ 0 đến 255).Hàm này cho phép biến đổi các giá trị mức xám ban đầu để phân phối đến các khu vựcmức xám khác nhau của hình ảnh
Trong bước này ta sử dụng hàm ‘np.interp’ trong thư viện Numpy của Python,dùng để thực hiện các bước ánh xạ giữa giá trị mức xám trong từng khu vực ảnh banđầu và giá trị mức xám mới cân bằng Hàm bao gồm các tham số truyền vào là hìnhảnh gốc, ‘range(256)’ là một mảng từ 0 đến 256 chứa các giá trị mức xám của một hìnhảnh và mảng chứa giá trị ‘cdf_normalized’ đã được chuẩn hóa( được đảm bảo rằng giátrị lớn nhất là 255, phù hợp với khoảng mức xám từ 0 đến 255)
Bước 6: Áp dụng hàm ánh xạ để cân bằng lược đồ
Ở đây ta dùng phương thức ‘.astype()’ của thư viện Numpy để thay đổi kiểu dữ liệu hình ảnh Điều có có nghĩa là các gía trị mức xám được biểu diễn dưới dạng
số nguyên 8 bit, và các gía trị mức xám vẫn trong khoảng từ 0 đến 255.Bước 7: Tính lược đồ mức xám của hình ảnh đã được cân bằng
Trang 24Ta tính lược đồ của hình cảnh cân bằng như cách ta tính lược đồ của hình ảnh
‘example1_image’ Ta sử dụng ‘anh_can_bang.flatten() thành một mảng một chiều để thuận tiện tính toán histogram Bước này thực hiện giống bước 2, sử dụng hàm
‘np.histogram’, với tham số ‘anh_can_bang.flatten()’, số lượng bin là 256 và phạm vi giá trị của histogram
-plt.title('Hình ảnh gốc'): Đặt tiêu đề cho hình
*In ra hình ảnh đã cân bằng (anh_can_bang):
-plt.subplot(222): Chọn vùng hiển thị thứ hai
-plt.imshow(anh_can_bang, 'gray'): Hiển thị hình ảnh đã cân bằng
Trang 25-plt.title('Hình ảnh đã cân bằng'): Đặt tiêu đề cho hình
-Lược đồ màu xám của ảnh gốc và đã cân bằng: plt.subplot(223): Chọn vùng hiển thị thứ ba
-plt.hist(example2_image.flatten(), bins=256, range=(0, 256), density=True, cumulative=False): Vẽ lược đồ màu xám của ảnh gốc
-plt.title('Lược đồ màu xám ảnh gốc'): Đặt tiêu đề cho lược đồ plt.subplot(224): Chọn vùng hiển thị thứ tư
-plt.hist(anh_can_bang.flatten(), bins=256, range=(0, 256), density=True, cumulative=False): Vẽ lược đồ màu xám của ảnh đã cân bằng
-plt.title('Lược đồ màu xám ảnh đã cân bằng'): Đặt tiêu đề cho lược đồ.-plt.show(): Hiển thị hình vẽ
4.2 Histogram Matching Algorithm:
4.1.2 Code mẫu về thuật toán Matching Algorithm:
Trang 264.1.3 Giải thích code mẫu về thuật toán Histogram Matching:
Bước 1: Khai báo thư viện( tương tự với thuật toán Histogram Equalization.Bước 2: Tạo hàm ‘hist_match’ để thực hiện quá trình histogram matching giữanguồn và ảnh mẫu
+ Tính histogram và CDF của ảnh nguồn và ảnh mẫu:
Ở đây ta có thể thấy hàm áp dụng giống với thuật toán Histogram Equalizationa.+Tính toán hàm phân phối tích lũy CDF của ảnh nguồn và ảnh mẫu:
Trang 27Đối với tính toán hàm phân phối tích lũy, ta sử dụng hàm ‘np.cumsum’ để tínhtổng tích lũy của ảnh nguồn và ảnh mẫu, với đối số truyền vào là tính histogram vàCDF.
+Chuẩn hóa CDF:
Ta có áp dụng công thức chuẩn hóa của ảnh nguồn và ảnh mẫu:
-source_cdf.min(): Là giá trị nhỏ nhất trong hàm CDF của histogram của ảnhnguồn
-source_cdf.max(): Là giá trị lớn nhất trong hàm CDF của histogram của ảnhnguồn
-(source_cdf - source_cdf.min()): Dịch chuyển giá trị của hàm CDF để đưa giátrị nhỏ nhất về 0
-* 255 / (source_cdf.max() - source_cdf.min()): Thực hiện tỷ lệ để đưa giá trịlớn nhất về 255
-source_cdf.astype('uint8'): Chuyển đổi kiểu dữ liệu của hàm CDF sang kiểu dữliệu uint8, điều có có nghĩa là các gía trị mức xám được biểu diễn dưới dạng sốnguyên 8 bit, và các gía trị mức xám vẫn trong khoảng từ 0 đến 255
+ Tạo hàm ánh cạ từ ảnh nguồn sang ảnh mẫu:
+ Áp dụng hàm ánh xạ lên ảnh nguồn: