1. Trang chủ
  2. » Giáo Dục - Đào Tạo

PYTHON và vấn đề xử lý ẢNH đồ án i GIỚI THIỆU NGÔN NGỮ lập TRÌNH PYTHON

80 13 0

Đ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

Định dạng
Số trang 80
Dung lượng 5,44 MB

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

Nội dung

Nghiêncứu về sự thay đổi trạng thái ban đầu của ảnh, với mục đích cải thiện thông tin ảnh trựcquan theo cách hiểu của con người, nén ảnh hoặc làm cho nó phù hợp với tri giác máy.Phần lớn

Trang 1

PYTHON VÀ VẤN ĐỀ XỬ LÝ ẢNH

ĐỒÁNI Chuyên ngành: Toán tin Chuyên sâu: Tin học

Giảng viên hướng dẫn:

Sinh viên thực hiện:

Mssv:

Lớp:

Ts Nguyễn Thị Thanh Huyền

Vũ Thị Ánh Nguyệt 20195905

Toán tin 02 – K64

Trang 2

………

………

………

2 Kết quả đạt được ………

………

………

………

3 Ý thức làm việc của sinh viên ………

………

………

………

Hà Nội, ngày… tháng… năm 2022

Giảng viên hướng dẫn (Ký và ghi rõ họ tên)

Trang 3

I Hệ thống xử lý ảnh

II Những khái niệm cơ bản trong xử lý ảnh

1 Ảnh số và điểm ảnh

2 Độ phân giải hình ảnh

3 Mức xám của ảnh

4 Độ sâu màu của ảnh số

CHƯƠNG 3: XỬ LÝ ẢNH VỚI THƯ VIỆN OPENCV

I Làm quen với thư viện OpenCV

1 Đọc, hiển thị và lưu file ảnh

2 Cắt, xoay và thay đổi kích thước ảnh

II Cải thiện và nâng cấp ảnh

1 Toán tử trên điểm ảnh

1.1 Một số phép biến đổi cấp xám cơ bản

1.2 Cắt ngưỡng

1.3 Trích chọn bit

1.4 Histogram

2 Toán tử trên miền không gian

1.1 Lọc mịn ảnh

1.2 Lọc sắc nét ảnh

2 Toán tử trên miền tần số

3.1 Biến đổi Fourier

3.2 Lọc thông thấp (làm mịn ảnh)

3.3 Lọc thông cao (làm sắc nét ảnh)

III Khôi phục ảnh

1 Nhiễu trong ảnh

1.1 Khái niệm

Trang 4

1 Phân vùng ảnh dựa trên kỹ thuật cắt ngưỡng toàn cục

2 Phân vùng ảnh dựa trên thuộc tính vùng ảnh

2.1.1 Thuật toán nở vùng

2.1.2 Thuật toán tách và gộp các vùng ảnh

Tài liệu tham khảo:

Trang 5

MỞ ĐẦU

CHƯƠNG 1: GIỚI THIỆU NGÔN NGỮ LẬP TRÌNH PYTHON

Python là một ngôn ngữ lập trình bậc cao, đa năng do Guido van Rossum tạo ra và ramắt vào năm 1991 Python được nhiều lập trình viên lựa chọn sử dụng vì ưu thế dễđọc, dễ học và dễ nhớ Python được sử dụng rộng rãi trong phát triển trí tuệ nhân tạo

Ban đầu Python được phát triển để chạy trên nền Unix, nhưng về sau Python được phát triển sang mọi hệ điều hành từ MS – DOS đến MAC OS, OS/2, Windows, Linux…

Python được sử dụng rộng rãi trong nhiều lĩnh vực như: Lập trình web , Data Analysis( Machine Learning, Image and Video Analysis ), lập trình robot, lập trình game…

Với chủ đề về Xử lý ảnh, Python cung cấp cho chúng ta nhiều thư viện với nhiều tínhnăng hỗ trợ xử lý như: OpenCV, Scikit-image, PIL/pillow, Numpy, Mahotas

Trang 6

Sobel; hay làm mịn ảnh với bộ lọc Gaussian cùng hàm gaussian()… cùng rất nhiềuthuật toán khác.

PIL/pillow

PIL là viết tắt của Python Image Library Đây là một trong những thư viện mạnh mẽ,

hỗ trợ nhiều định dạng hình ảnh như ppm, jpeg, tif, gif, png và bmp

Thư viện giúp chúng ta thực hiện nhiều thao tác trên hình ảnh như xoay, thay đổi kích thước, cắt xén,… thông qua nhiều hàm

Numpy

Với thư viện này ta có thể thao tác các kỹ thuật đơn giản như lật ảnh, trích xuất các tínhnăng và phân tích Trong thư viện, hình ảnh có thể được biểu diễn bởi các mảng đa chiều, vì vậy kiểu của chúng là NdArrays Với hình ảnh màu sẽ được thể hiện bởi mảng 3 chiều

Trang 7

CHƯƠNG 2 : GIỚI THIỆU CHUNG VỀ XỬ LÝ ẢNH

Xử lý ảnh là một phân ngành trong xử lý số tín hiệu với tín hiệu xử lý là ảnh Nghiêncứu về sự thay đổi trạng thái ban đầu của ảnh, với mục đích cải thiện thông tin ảnh trựcquan theo cách hiểu của con người, nén ảnh hoặc làm cho nó phù hợp với tri giác máy.Phần lớn các chức năng xử lý ảnh cho ra một hình ảnh mới, đã được can thiệp Các phương pháp xử lý ảnh dựa trên các ứng dụng chính: xử lý nâng cao chất lượng ảnh, phân tích ảnh Dưới đây là hệ thống xử lý ảnh mô tả các bước trong quá trình xử lý ảnh:

Hình 2.1 Hệ thống xử lý ảnh Thu nhận ảnh, chụp ảnh và số hóa ảnh

Đây là công đoạn đầu tiên của quá trình xử lý ảnh, ảnh được thu nhận thông qua các thiết bị như camera, sensor, scanner,… các tín hiệu sau đó sẽ được số hóa Các thông

số quan trọng của bước này đó là độ phân giải, chất lượng màu, dung lượng bộ nhớ vàtốc độ thu nhận ảnh của các thiết bị

Trang 8

Giai đoạn này ta tiến hành các bước như: cải thiện nâng cấp ảnh, sửa lỗi, khôi phụcảnh; phân tách đặc trưng: tách biên, phân vùng ảnh; biểu diễn và xử lý đặc trưng hìnhdạng đối tượng ảnh; nhận dạng đối tượng ảnh, phân tích cảnh và hiểu cảnh.

Sau khi kết thúc bước Thu nhận ảnh, chụp ảnh và số hóa ảnh , ta sẽ đi vào giai đoạn

tiền xử lý Ở bước này, chất lượng ảnh sẽ được cải thiện tốt hơn về độ tương phản, khửnhiễu, khử bóng, khử độ lệch,…, chuẩn bị cho các bước xử lý sâu sau đó

Phân vùng ảnh (hay phân đoạn) là tách ảnh đầu vào thành các vùng thành phần có cùng tính chất nào đó dựa theo biên hay các vùng liên thông

Việc chọn các tính chất để thể hiện ảnh gọi là trích chọn đặc trưng (Feature Selection) gắn với việc tách các đặc tính của ảnh dưới dạng các thông tin định lượng hoặc làm cơ

sở để phân biệt lớp đối tượng này với đối tượng khác trong phạm vi ảnh nhận được Vídụ: trong nhận dạng ký tự trên phong bì thư, chúng ta miêu tả các đặc trưng của từng

ký tự giúp phân biệt ký tự này với ký tự khác

Mỗi ảnh gốc hay còn gọi là ảnh tự nhiên, là ảnh liên tục về không gian và độ sáng Để

có thể xử lý ảnh, ta cần phải số hóa ảnh gốc đó, tức là biến đổi gần đúng một ảnh liên tục thành một tập điểm phù hợp với ảnh đó về vị trí và độ sáng Mỗi điểm như vậy

được gọi là một điểm ảnh ( picture element) viết tắt là pixel Khoảng cách giữa các

pixel được thiết lập sao cho mắt người nhìn bình thường không phân biệt được ranh giới giữa chúng

Trang 9

Hình 2.2 Ảnh số

Như vậy, xét về mặt toán học, ảnh số là một hàm hai biến f(x,y) , với x, y là các tọa độ.Mỗi điểm có tọa độ (x,y) là một pixel, giá trị số tại điểm (x,y) đó chính là giá trị xám( sẽ được trình bày sau), giá trị đó là hữu hạn : 0 ≤ f(x,y) ≤

2 Độ phân giải hình ảnh

Độ phân giải hình ảnh ( image resolution ) chỉ lượng thông tin được chứa đựng trong

một tập tin ảnh hiển thị trên màn hình Hay nói cách khác đó là số điểm (pixel) trongmột hình ảnh số

Rõ ràng, độ phân giải càng thấp thì ảnh càng mờ:

Trang 10

Mỗi điểm ảnh có hai đặc trưng cơ bản là vị trí (x,y) của nó và độ xám f(x,y).

Mức xám của điểm ảnh là là kết quả của sự biến đổi tương ứng 1 giá trị độ sáng của 1 điểm ảnh với 1 giá trị nguyên dương Thông thường nó xác định trong đoạn [0,255] tùythuộc vào giá trị mà mỗi điểm ảnh được biểu diễn

Các thang giá trị mức xám thông thường là: 16, 32, 64, 128, 256 Mức 256 là mức phổbiến nhất

4 Độ sâu màu của ảnh số

Độ sâu màu của ảnh số là đại lượng mô tả khả năng biểu diễn các màu sắc trong ảnh

số khi thể hiện trên các thiết bị màn hình hoặc in ấn Đó chính là thông số thể hiện sốlượng các bit được sử dụng để biểu thị màu sắc của mỗi pixel

Từ đó ta phân biệt 3 loại ảnh: ảnh nhị phân, ảnh xám và ảnh màu:

Trang 11

Ảnh nhị phân (binary image) là ảnh đen trắng, mỗi pixel chỉ có 1 giá trị 0 hoặc 255,

dùng 1 bit để biểu diễn một pixel

Hình 2.4 Ảnh nhị phân

Ảnh xám ( gray image) là ảnh có mô hình màu đơn sắc với 256 cấp độ xám biến thiên từ

đen đến trắng, mỗi pixel có 1 giá trị từ 0 đến 255, dùng 8 bit để biểu diễn một pixel

Hình 2.5 Ảnh xám

Khi biểu diễn ảnh nhị phân hay ảnh xám, ta chỉ cần một ma trận m x n, mỗi phần tửcủa ma trận là giá trị xám của một pixel

Trang 12

Ảnh màu là ảnh thông thường ta hay nhìn thấy nhất, ở đây ta sẽ xét ảnh theo mô hình

RGB: ánh sáng đỏ, ánh sáng xanh lục và ánh sáng xanh lam được tổ hợp với nhau theonhiều phương thức khác nhau để tạo thành nhiều màu khác nhau Mỗi pixel của ảnh màu có 3 giá trị xám tương ứng là giá trị của màu đỏ (R), giá trị của màu xanh lục (G)

và giá trị của màu xanh lam ( B), mỗi giá trị là số nguyên nằm trong đoạn [0,255] Ta dùng 24 bit ( 3 byte) để biểu diễn một pixel

Khi biểu diễn một ảnh màu, sẽ có dạng nhau sau:

Để tiện cho việc lưu trữ và xử lý ta sẽ tách ma trận trên ra thành 3 ma trận tương ứngcủa màu đỏ, xanh lam và xanh lục

Trang 13

CHƯƠNG 3: XỬ LÝ ẢNH VỚI THƯ VIỆN OPENCV

Để tiến hành thực hiện được các bộ lọc, thuật toán trong xử lý ảnh thì ba thao tác đọc,hiện thị và lưu file ảnh nắm vai trò quan trọng và tối thiểu

Hình ảnh sau được sử dụng để thao tác trong phần này:

Hình 3.1 Ảnh mẫu

Trước tiên ta sẽ đưa ra đoạn code thực hiện cả ba chức năng trên:

# import thư viện opencv

import cv2

# Hàm cv2.imread() được dùng để đọc ảnh

img_anh1 = cv2.imread( 'anh1.jpg' , 1 )

# Hàm namedWindow() thay đổi kích thước cửa sổ

Trang 14

# Hàm cv2.imshow được dùng để hiển thị ảnh trên cửa

sổ cv2.imshow( 'first image' , img_anh1)

# Hàm waitKey() chỉ định thời gian của sổ hiển thị

Để đọc ảnh đầu vào ta sử dụng hàm imread() của OpenCV với cú pháp :

imread( ‘filename’ , flags )

Với 2 đối số đầu vào:

đang thực thi, nếu không thì cần có đường dẫn đầy đủ đến tệp chứa ảnh

phổ biến được cung cấp bởi OpenCV:

o cv2.imread_unchanged hoặc -1: Tải hình ảnh bao gồm kênh alpha (có chế độ trong suốt)

o cv2.imread_grayscale hoặc 0: Tải hình ảnh ở chế độ xám

o cv2.imread_color hoặc 1: Tải hình ảnh màu và bỏ qua chế độ trong suốt

Đây là giá trị mặc định của đối số này

Trang 15

Ta có thể truyền tên đầy đủ hoặc số thay thế cho đối số, tùy mục đích khác nhau mà ta

sẽ sử dụng giá trị khác nhau

Hình 3.2 Của sổ ảnh kết quả

Lưu ý với thư viện OpenCV sẽ đọc hình ảnh màu ở định dạng BGR, trong khi hầu hếtcác thư viện thị giác máy tính khác sử dụng định dạng kên RGB Vì vậy khi sử dụng OpenCV với các bộ công cụ khác cần có chuyển đổi kênh màu để đảm bảo ảnh không

bị sai lệch màu

Hiển thị hình ảnh

Ta sử dụng àm imshow() để hiển thị ảnh trong cửa sổ với cú pháp:

imshow( ‘window_name’, image)

Gồm 2 đối số:

Trang 16

Hàm waitKey() là một hàm liên kết bàn phím:

được nhấnHàm destroyAllWindows() sẽ hủy tất cả cửa sổ đã tạo ra, nếu chỉ cần hủy một cửa sổnào đó, thì ta lấy tên cửa sổ đó làm đối số truyền vào cho hàm

Ngoài ra, ta có thay đổi kích thước cửa sổ hiển thị với hàm namedWindow(‘windowname’, flags), flags có thể là WINDOW_AUTOSIZE (mặc định) hoặc WINDOW_NORMAl (có thể thay đổi kích thước cửa sổ bằng việckéo/thả)

Lưu (ghi) hình ảnh

Ta sử dụng hàm imwrite() với cú pháp:

imwrite( ‘filename’, image )

Trang 17

Với hai đối số:

Hàm trả về giá trị True nếu ảnh được lưu thành công

Trước tiên ta sử dụng đoạn code sau để xem kích thước của ảnh đầu vào:

rows , cols , _ = img_anh1.shape

print ( "Rows" , rows)

print ( "Cols" , cols)

Trang 18

Hình sau mô tả chọn vùng bị cắt:

Hình 3.3 Mô tả ảnh cắt

Dựa trên kích thước đã xem trước đó mà ta chọn các giá trị x, y theo vùng cần cắt chophù hợp

Ví dụ: Sau khi thực hiện đoạn code sau:

# import thư viện opencv

import cv2

# Hàm cv2.imread() được dùng để đọc ảnh

img_anh1 = cv2.imread( 'anh1.jpg' , 1 )

# Cắt ảnh

Trang 19

roi = img_anh1[ 500 : 700 , 400 : 560 ] cv2.imshow( 'Region Of Interest' , roi)

# Hàm waitKey() chỉ định thời gian của sổ hiển thị

OpenCV cung cấp hàm getRotationMatrix2D() để xác định ma trận xoay, với cú pháp:

getRotationMatrix2D(center, angle, scale)

với 3 đối số:

Trang 20

 angle: góc quay (theo độ), nếu là số dương thì hình ảnh sẽ quay theo hướng nguowjwc chiều kim đồng hồ và ngược lại

khai báo, có thể là một giá trị dấu phẩy động Ví dụ 1.0 sẽ giữ ảnh đầu ra cùng kích thước ảnh gốc, giá trị 2.0 làmảnh ra gấp đôi kích thước ảnh gốc

Bước cuối cùng nhân hai ma trận để tạo ra ảnh xoay, đây chính là phép biến đối affine

và thư viện OpenCV cũng cấp hàm warpAffine() để thực hiện phép biến đối này, với

mặc định là 0

Ví dụ chạy đoạn code sau :

# import thư viện opencv

import cv2

Trang 21

cv2.imshow( 'rotated image' , rotated)

# Hàm waitKey() chỉ định thời gian của sổ hiển thị

Trang 22

Hình 3.5 Ảnh sau khi xoay

Thay đổi kích thước ảnh

Để thay đổi kích thước ảnh, OpenCV cung cấp hàm resize() với cú pháp:

# import thư viện opencv

import cv2

# Hàm namedWindow() thay đổi kích thước cửa sổ

Trang 23

img_anh1 = cv2.imread( 'anh1.jpg' , 1 )

# Lấy kích thước ảnh gốc

(h , w , d) = img_anh1.shape

r = 700.0 / w img_resize = cv2.resize(img_anh1 , ( 700 , int (h * r)))

# Hàm cv2.imshow được dùng để hiển thị ảnh trên cửa

sổ cv2.imshow( 'resized image' , img_resize)

# Lấy kích thước ảnh mới

rows , cols , _ = img_resize.shape

print ( "Rows" , rows)

print ( "Cols" , cols)

# Hàm waitKey() chỉ định thời gian của sổ hiển thị

cv2.waitKey( 0 )

# cv2.destroyAllWindows() xóa tất cả cửa sổ đã tạo

cv2.destroyAllWindows()

Ta thu được ảnh:

Trang 24

Hình 3.6 Ảnh thay đổi kích thước

Có kích thước:

Đảo ảnh với ảnh có các giá trị xám trong vùng [0, L-1] là thao tác xử lý trên điểm ảnh

có dạng:

s = ( L - 1) – rTrong đó s là điểm ảnh đã xử lý rồi, r là điểm ảnh ban đầu, L là mức xám cực đại Đoạn code sau thực hiện việc đảo ảnh sử dụng thư viện OpenCV:

# import thư viện opencv

import cv2

Trang 25

# Hàm namedWindow() thay đổi kích thước cửa sổ

cv2.imshow( 'Image Negatives' , img_anh2)

# Hàm waitKey() chỉ định thời gian của sổ hiển thị

cv2.waitKey( 0 )

# cv2.destroyAllWindows() xóa tất cả cửa sổ đã tạo

cv2.destroyAllWindows()

Kết quả:

Trang 26

Hình 3.7 Đảo ảnh

Ảnh sau khi đảo còn được gọi là ảnh âm bản

Sử dụng thuật toán trên với ảnh xám, ta thu được kết quả như sau:

Hình 3.8 Đảo ảnh xám

Trang 27

Ảnh âm bản được ứng dụng trong nhiều lĩnh vực, hữu ích trong việc cải thiện các chitiết màu trắng hay màu xám nằm triong vùng tối.

Biến đổi ảnh bằng hàm Logarit là thao tác xử lý điểm ảnh có dạng :

s = c.log ( 1 + r )trong đó, r là điểm ảnh đầu vào, c là hằng số, s là điểm ảnh đã xử lý

import cv2 as cv

import matplotlib.pyplot as plt

def Chuyen_doi_logarit (img , c):

return float (c) * cv.log( 1.0 + img)

def show_Chuyen_doi_logarit ():

fig = plt.figure( figsize =( 16 , 9 )) ax1 , ax2 = fig.subplots( 1 , 2 )

img = cv.imread( 'anh1.jpg' )

ax1.imshow(img , cmap = 'gray' ) ax1.set_title( "Ảnh gốc" )

Trang 28

if name == ' main ' : show_Chuyen_doi_logarit()

Kết quả:

Hình 3.9 Ảnh biến đổ Logarit

Biến đổi ảnh bằng hàm Logarit là thao tác xử lý điểm ảnh có dạng :

s = c

Trong đó, r là điểm ảnh đầu vào, c và γ là hằng số, s là điểm ảnh đầu ra

import cv2 as cv

import matplotlib.pyplot as plt

def Chuyen_Doi_Gamma (img , gamma , c):

return float (c) * pow (img , float (gamma))

Trang 29

y1 = Chuyen_Doi_Gamma(img , 0.6 , 1.0 ) ax2.imshow(y1 , cmap = 'gray' )

ax2.set_title( "gamma=0.6" )

y2 = Chuyen_Doi_Gamma(img , 0.3 , 1.0 ) ax3.imshow(y2 , cmap = 'gray' )

ax3.set_title( "gamma=0.3" )

y3 = Chuyen_Doi_Gamma(img , 0.1 , 1.0 ) ax4.imshow(y3 , cmap = 'gray' )

ax4.set_title( "gamma=0.1" ) plt.show()

if name == ' main ' : show_Chuyen_Doi_Gamma()

Trang 30

Hình 3.10 Ảnh biến đổi gamma

1.2 Cắt ngưỡng

Cắt ngưỡng là việc đưa ảnh đa cấp xám về hai mức giá trị xám

Ta sẽ chọn ra một giá trị ngưỡng cụ thể T để từ đó tiến hành cắt ngưỡng như sau: ta sosánh các giá trị xám tại mỗi pixel với giá trị ngưỡng T, nếu giá trị đó nhỏ hơn T thì ta chuyển giá trị xám đó về 0; còn nếu giá trị xám lớn hơn T thì chuyển về giá trị (L - 1)

Ta có thể quan sát đồ thị sau:

Trang 31

Trong đó:

r là các pixel của ảnh ban đầu

S là các pixel của ảnh sau khi cắt ngưỡng

Với th = 117 ta thu được kết quả như sau:

Hình 3.12 Hình cắt ngưỡng

Trang 32

Mỗi điểm ảnh của ảnh 8 bit được biểu diễn bằng 8 mặt phẳng bit từ 1 đến 8, xếp chồng

lên nhau theo thứ tự từ cao đến thấp (bit số 8 ở trên cùng, bit 1 ở dưới cùng) Những

mặt phẳng phía trên sẽ chứa nhiều dữ liệu ý nghĩa của ảnh và những mặt phẳng phía

dưới chứa chủ yếu dữ liệu chi tiết ảnh

Kỹ thuật lát cắt mặt phẳng bit là kỹ thuật sử dụng các phép toán trên điểm ảnh để chia

ảnh đa cấp xám thành nhiều ảnh nhị phân, cho phép xác định những mặt phẳng bit

quan trọng và số lượng bit yêu cầu của quá trình lượng tử hóa

Ta có thể mô tả các bước của kỹ thuật này với ví dụ về ảnh 3 bit như sau:

Bước 1: Chuyển ảnh n bit sang ma trận mà mỗi phần tử của ma trận là một chuỗi n bit

Trang 34

Bước 3: Tái tạo lại ảnh, chuyển các ảnh nhị phân thành ảnh đa cấp xám tương ứng theocông thức:

#Khởi tạo danh sách

lst = []

for i in range (img.shape[ 0 ]):

for j in range (img.shape[ 1 ]):

lst.append(np.binary_repr(img[i][j] , width = 8 )) # width: số bit

Trang 35

Bước 2: Sau khi có một danh sách chứa chuỗi các bit, ta sẽ lặp qua chuỗi các phân tửbit để tạo ra các mặt phẳng bit, rút chích và lưu vào từng danh sách

Ví dụ rút chích mặt phẳng bit thứ 8:

#Khởi tạo danh sách mặt phẳng bit

mp_bit_8 =[]

for i in lst:

mp_bit_8.append( int (i[ 0 ]))

Tương tự, để lấy phần tử của mặt phẳng thứ 7 ta sẽ truy cập vào phần tử i[1], mặtphẳng thứ 6 là i[2],…

Bước 3: Tái tạo lại ảnh từ các ảnh nhị phân

# Nhân từng phần tử với 2^(n-1) để có ảnh tái tạo tương ứng với mỗi mặt phẳng bit

(np.array(mp_bit_8 , dtype = 'uint8' )* 128 ).reshape(img.shape[ 0 ] , img.shape[ 1 ])

Tương tự với các mặt phẳng còn lạiKết quả thu được:

Trang 37

Hình 3.14 Kết hợp 2 mặt phẳng bit

1.4 Histogram

Histogram của ảnh hay còn gọi là lược đồ xám cho thấy phân bố mức xám trên ảnh

Đặt h( ) = là tổng số pixel có cùng giá trị mức xám Khi đó h( ) được gọi là Histogram không chuẩn hóa Đặt p( ) = h( )/ (M*N) :

Ví dụ ta có ma trận ảnh 8 x 8 sau:

Trang 39

Nhận xét:

Từ đó ta có ứng dụng cân bằng Histogram của ảnh để tăng cường ảnh

Các bước của kỹ thuật cân bằng Histogram:

Ví dụ: Cân bằng Histogram của một ảnh 3 bit, với mức xám L = 8, ảnh có kích thước

64 x 64 pixel, với giá trị mức xám như trong bảng sau:

=1

0 =0

Trang 40

để cân bằng histogram của ảnh, có cú pháp:

equalizeHist(src)Trong đó, src là ảnh cần cân bằng

Ta cũng có thể vẽ được biểu đồ Histogram thông qua thư viện matplotlib với câu lệnh:

hist(src)Kết quả thu được như sau:

Ngày đăng: 08/11/2022, 16:01

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w