Tải bản đầy đủ (.docx) (37 trang)

Bài tập lớn các thuật toán xử lý ảnh, có source code.

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.04 MB, 37 trang )

TRƯỜNG ĐẠI HỌC
KHOA CÔNG NGHỆ THÔNG TIN
---------------------------------------

BÁO CÁO BÀI TẬP LỚN
Đề tài: Các thuật toán xử lý ảnh
Giảng viên giảng dạy
Họ và tên thành viên:

Lớp: D101K10

Khóa: 10

Trang


MỤC LỤC

2


LỜI MỞ ĐẦU
Xử lý ảnh là một trong những lĩnh vực phát triển rất nhanh của nghành Công
nghệ thông tin. Trong những năm gần đây, phần cứng máy tính và các thiết bị liên
quan đã có sự tiến bộ vượt bậc về tốc độ tính tốn, dung lượng chứa, khả năng xử
lý v.v… và giá cả đã giảm đến mức máy tính và các thiết bị liên quan đến xử lý ảnh
đã trở lên thông dụng với dầu hết mọi người trong xã hội và việc thu nhận ảnh số
bằng các thiết bị cá nhân hay chuyên dụng cùng với việc đưa vào máy tính xử lý đã
trở nên đơn giản. Nó được ứng dụng rộng rãi trong nhiều lĩnh vực khoa học và
công nghệ. Chẳng hạn như thị giác máy tính, robot, tìm kiếm tài liệu hình ảnh, hỗ
trợ chẩn đốn hình ảnh y học, thiết kế ảnh, giải trí,… xử lý ảnh só bằng máy tính


đã giúp chúng ta thay đổi các cảm nhận và sử dụng máy tính, nó đã trở thành
những cơng cụ trực quan quan trọng khơng thể thiếu trong đời sống hằng ngày.
Trong hồn cảnh đó, xử lý ảnh là một lĩnh vực đang được quan tâm và đã trở
thành môn học chuyên nghành của sinh viên nghành công nghệ thông tin trong
nhiều trường đại học trên cả nước.

3


I.

Tầm quan trọng của xử lý ảnh

Mục đích của xử lý ảnh là cải thiện chất lượng của hình ảnh để chúng ta có
thể phân tích nó theo cách tốt hơn. Chúng ta có thể ngăn chặn, xử lý các biến dạng
không mong muốn của ảnh và nâng cao những tính năng cần thiết cho những mục
đích cụ thể mà chúng ta đang cần. Những mục đích khác nhau thì cũng cần trích
xuất những tính năng khác nhau. Ví dụ như nhận dạng mặt người thì chúng ta chỉ
cần quan tâm tới khn mặt có trong ảnh mà khơng cần quan tâm quần áo hay tóc
của họ.
Xử lý ảnh được ứng dụng nhiều trong nghành trí tuệ nhân tạo, dùng ảnh để
huần luyện máy tính nhận dạng các vật thể có trong ảnh như nhận dạng mặt người,
nhận dạng động vật, nhận dạng chứ viết và trong các nghành khác ví dụ như xử lý
ảnh thiên văn, ảnh y tế … Nhưng máy tính cần các hình ảnh phù hợp để có thể học
tập được với từng mục đích cụ thể.
Hãy xem xét hình ảnh sau:

Chúng ta khơng thẻ thấy gì ngồi hình ảnh cái tháp và một vài điếm sáng
Nhưng sau khi áp dụng xử lý ảnh chúng ta có hình ảnh sau:


4


Đừng nghĩ rằng hình ảnh này xấu vì mục đích của chúng ta là xem
xem có gì trong bức ảnh. Trong hình ảnh trước thì chúng ta khơng thể thấy
gì nhưng bây giờ chúng ta có thể biết được hình dạng của cây cối. Đây tầm
quan trọng của xử lý ảnh

5


II.

Bảng phân chia cơng việc
STT
1

HỌ VÀ TÊN

CƠNG VIỆC
-Thuật tốn cân bằng histogram
-Thuật toán lọc Trung vị
-Thuật toán Co (Erosion)

2

-Thuật toán phát hiện biên Sobel
- Thuật toán nén ảnh SVD

3


-Thuật toán phát hiện biên Prewitt
-Thuật tốn lọc Gauussian
-Thuật tốn đóng, mở

4

-Thuật tốn ảnh âm bản
-Thuật tốn lọc Trung bình
-Thuật tốn Giãn (Dilation)

6


CHƯƠNG 1: TỔNG QUAN VỀ XỬ LÝ ẢNH
1. Xử lý ảnh là gì?
Con người thu nhận thơng tin qua các giác quan, trong đó thị giác đóng vai
trị quan trọng nhất. Những năm trở lại đây với sự phát triển của phần cứng máy
tính, xử lý ảnh và đồ hoạ đó phát triển một cách mạnh mẽ và có nhiều ứng dụng
trong cuộc sống. Xử lý ảnh và đồ hoạ đóng một vai trị trịn tương tác người
máy.
Hình ảnh chiếm 80% thông tin con người thu nhận được. Vài chục năm gần
đây xử lý ảnh phát triển mạnh do công nghệ máy tính, khả năng lưu trữ đáp ứng
được các hệ thống xử lý ảnh.
Ảnh số là gì:
Ảnh tạo bởi các điểm ảnh, điểm ảnh biểu diễn vô vàn thứ, ví dụ như: ảnh
chân dung, ảnh X-quang, ảnh thân nhiệt. Điểm ảnh đặc trưng cho một giá trị nào
đó là một hàm n biến. Ảnh trong thực tế là một ảnh liên tục về không gian và về độ
sáng. Để có thể xử lý ảnh bằng máy tính cần thiết phải tiến hành số hố ảnh là q
trình biến đổi tín hiệu liên tục sang tín hiệu rời rạc thơng qua q trình lấy mẫu

(rịi rạc hố về khơng gian) và lượng tử hoá thành phần giá trị mà về nguyên tắc
bằng mắt thường không phân biệt được 2 điểm kề nhau.
Ảnh số có 2 loại: dạng tín hiệu tương tự (analog), dạng tín hiệu số (digital)
Điểm ảnh hay cịn gọi là pixel (picture elements, pels, image element) dược
xem như dấu hiệu hay cường độ sáng tại một toạ độ trong không gian của đối
tượng.
Ảnh là tập hợp các điểm ảnh. Khi được số hố nó thường được biểu diễn là
ma trận 2 chiều a[i][j] mà mỗi phần tử có một giá trị nguyên hoặc là một véc tơ cấu
trúc màu.
a là giá trị độ đo (hay độ sáng) của điểm ảnh tại vị trí có toạ độ là (I, j)

7


Mức xám (gray level): là kết quả của sự mã hoá tương ứng một cường độ sáng của
mỗi điểm ảnh với một giá trị số - kết quả của quá trình lượng hố
Ảnh
Ảnh đen trắng
Ảnh đa cấp xám
Ảnh RGB
Ảnh 32 bit

Số bit/pixel
1
8
24
32

Số màu
2

256
2563
2564

Megapixel là đơn vị đo độ phân giải của thiết bị quang (như là số điểm trong bức
ảnh) đặc biệt trong camera số. Giá trị megapixel được tính bằng cách nhân chiều rộng với
chiều cao điểm ảnh
Ví dụ ảnh có độ phân giải 1280*1024 = 1.310.720 pixel hoặc là 1.3 megapixel
Nhưng khơng phải camera có độ phân giải cao thì chất lượng là tốt hơn, chất
lượng của hình ảnh còn phụ thuộc vào một số yếu tố khác như là thấu kínhm bộ cảm biến
chụp ảnh và quá trình xử lý hình ảnh (bức ảnh sau khi chụp được cố định mức của màu,
cân bằng trắng …).
Hình ảnh đồ hoạ trên máy tính được chia làm 2 loại: vector và raster.

Mơ hình Raster
Đây là cách biểu diễn ảnh thông dụng nhất hiện nay, ảnh được biểu diễn dưới dạng
ma trận các điểm ảnh. Thường thu nhận qua các thiết bị như camera, sacnner. Tuỳ theo
yêu cầu thực tế mà mỗi điểm ảnh được biểu diễn qua 1 hay nhiều bit
Mơ hình Raster thuận lợi cho hiển thị và in ấn. Ngày nay công nghệ phần cứng
cung cấp những thiết bị thu nhận ảnh Raster phù hợp với tốc độ nhanh và chất lượng cao
cho cả đầu vào và đầu ra. Một thuận lợi cho việc hiển thị trong môi trường Windows là
Microsoft đưa ra khuôn dạng ảnh DIB (Device Independent Bitmap) làm trung gian.

8


Một trong những hướng nghiên cứu cơ bản trên mô hình biểu diễn này là kĩ thuật
nén ảnh, các kỹ thuật nén ảnh lại chia ra theo 2 hướng là nén bảo tồn và nén khơng bảo
tồn, thơng tin nén bảo tồn có khả năng phục hồi tồn bộ dữ liệu bân đầu cịn nén khơng
bảo tồn chỉ có khả năng phục hồi trong sai số cho phép nào đó. Theo cách tiếp cận này

người ta đã đề ra nhiều quy cách khác nhau như BMP, TIF, GIF, PCX…
Hiện nay trên thế giới có trên 50 khn dạng ảnh thơng dụng bao gồm cả trong đó
các kỹ thuật nén có khả năng phục hồi dữ liệu 100% và nén có khả năng phục hồi với sai
số chấp nhận được

Mơ hình Vector
Biểu diễn ảnh ngồi mục đích tiết kiệm khơng gian lưu trữ dễ dàng cho hiển thị, in
ấn và dễ dàng trong việc lựa chọn sao chép di chuyển tìm kiếm… Theo những yêu cầu
này thì kỹ thuật biểu diễn Vector tỏ ra ưu việt hơn.
Trong mơ hình Vector người ta sử dụng hướng giữa các vector của điểm ảnh lân
cận để mã hố và tái tạo hình ảnh ban đầu, ảnh vector được thu nhận trực tiếp từ các thiết
bị số hoá như Digital hoặc được chuyển đổi từ ảnh Raster thơng qua các phần mềm số
hố.
Cơng nghệ phần cứng cung cấp những thiết bị với tốc độ sử lý nhanh và chất
lượng cho cả đầu ra và đàu vào nhugnw lại chỉ hỗ trợ cho ảnh Raster.
Do vậy, những nghiên cứu về biểu diễn vector đều tập trung từ chuyển đổi ảnh
sang Raster

9


Hình ảnh vector
Được mơ tả bằng đường cong hình học

Hình ảnh raster
Được mô tả bằng lưới điểm, mỗi điểm
được gọi là 1 pixel và có giá trị màu riêng
Khơng thay đổi chất lượng khi phóng to Chất lượng bị giảm khi phóng to hoặc thu
thu nhỏ
nhỏ ảnh

File lưu trữ có dung lượng nhỏ
File có dung lương lớn hoặc rất lớn
Thường dùng cho chữ, logo, các hình Thường dùng cho hình ảnh có tơng màu
minh hoạ
liên tục như ảnh chụp hoặc tranh vẽ
Thường có đi dạng:
Thường có đi dạng:
.cdr
.psd
.ai
.tif
.fh
.jpg
Thơng tin về ảnh





Chiều rộng: số pixel / dịng (số byte/ số dịng)
Chiều cao: số dòng
Độ phân giải: số pixle/ inch
Số bit / pixel

Số bit <= 8 phải có pallete màu (bảng màu)
> 8 dùng màu trực tiếp
Pal: pallete
Pal[index].R, Pal[index].G, Pal[index].B
Nếu số bit/pixel > 1 ta có ảnh cấp xám, nếu = 1 ta có ảnh nhị phân với 2 cấp xám
16bit/pixel


5
R

6
G

5
B

24 bit/pixel, mỗi phần màu là một byte
5
R

6
G

5
B

Độ phân giải ảnh (ppi) là số điểm ảnh có trên một đơn chiều dài của ảnh đó (inch)

10


Ví dụ một ảnh có kích thước 1 inch x 1 inch với 72ppi thì sẽ có 72x72=5184
pixels, với 300 pixel thì có 90.000 pixels

Hình ảnh có độ phân giả cao thì ảnh càng sắc nét và màu sắc càng chính xác khi
đó dung lượng lưu trữ cũng sẽ tăng theo


2. Mơ hình màu RGB (RED, GREEN, BLUE)
3 màu cơ sở là: RGB từ 3 màu cơ bản có thể tạo ra hầu hết các màu
Mơ hình màu được biểu diễn bởi lập phương với trục R, G, B

Kỹ thuật xử lý ảnh: là quá trình biến đổi một hình ảnh thành một hình ảnh khác
bằng máy tính điện tử một cách tự động phụ thuộc vào mục đích của người sử dụng.
Quá trình xử lý ảnh được xem như là quá trình thao tác ảnh dầu vào nhằm cho ra
kết quả mong muốn. Kết quả đầu ra của một q trình xử lý ảnh có thể là một ảnh “tốt
hơn” hoặc một kết luận

11


Quá trình xử lý ảnh

-

-

Hệ thống xử lý ảnh trên máy tính là tập hợp các kỹ thuật xử lý ảnh phục vụ cho
một mục đích ứng dụng nào đó
Đồ hoạ máy tính thiên về tổng hợp hình ảnh, cịn xử lý ảnh thiên về phân tích
hình ảnh.
Đồ hoạ máy tính:
Đầu vào: là ảnh hoặc khơng là ảnh
Đầu ra: là một ảnh trên máy tính
Xử lý ảnh:
Đầu vào: là ảnh
Đầu ra: là ảnh ‘tốt hơn’(theo nghĩa mà người sử dụng muốn) hoặc một

điểm hoặc một dãy đặc điểm
Trong đồ hoạ máy tính, đối tượng xử lý là 2 chiều hoặc 3 chiều. Cịn xử lý ảnh
khơng chỉ làm việc với dữ liệu 2 chiều hay 3 chiều có khi nhiều hơn.
Thị giác máy: là một hệ xử lý ảnh hoàn chỉnh bao gồm thu nhận ảnh, tăng
cường chất lượng ảnh, nhận dạng.

12


CHƯƠNG 2: CÁC THUẬT TỐN XỬ LÝ ẢNH
2.1 Thuật tốn cân bằng histogram
Ý tưởng:
Cân bằng histogram () là điều chỉnh histogram về trạng thái cân bằng, làm
cho phân bố giá trị pixel khônng bị co cụm tại một khoảng mà ‘kéo giãn’ ra. Trong
thực tế, camera thường chịu tác động từ điều kiện sáng. Điều đó khiến cho nhiều
ảnh bị tối hoặc quá sáng. Cân bằng histogram là một phương pháp xử lý ảnh rất
mạnh mẽ. Đặc biệt trong nhiều bài tốn phương pháp này cho chất lượng dữ liệu
cao

Mơ tả thuật toán
Ảnh I được gọi là cân bằng "lý tưởng" nếu với mọi mức xám g, g’ ta có h(g) =
h(g’)
Giả sử, ta có ảnh

I ~ kích thước m × n

new_level ~ số mức xám của ảnh cân bằng
~ số điểm ảnh trung bình của mỗi mức xám của ảnh cân
bằng
~ số điểm ảnh có mức xám ≤ g

Xác định hàm f: g → f(g)
Sao cho: f(g) = max{0, round)

-1

}

Chú ý: Ảnh sau khi thực hiện cân bằng chưa chắc đã là cân bằng "lý tưởng "
-Input:Một ảnh có histogram không cân bằng
-Output: Ảnh đã được cân bằng histogram

Chương trình cài đặt:
import numpy as np
import cv2 as cv
import matplotlib.pyplot as plt
# Đường dẫn file ảnh
path = 'images/hist_img.jpg'
# Đọc ảnh
img = cv.imread(path, 0)

13


def compute_hist(img):
hist = np.zeros((256, ), np.uint8)
h, w = img.shape[:2]
for i in range(h):
for j in range(w):
hist[img[i][j]] +=1
return hist

def equal_hist(hist):
cumulator = np.zeros_like(hist, np.float64)
for i in range(len(cumulator)):
cumulator[i] = hist[:i].sum()
print(cumulator)
new_hist = (cumulator - cumulator.min())/(cumulator.max()-cumulator.min())*255
new_hist = np.uint8(new_hist)
return new_hist
hist = compute_hist(img).ravel()
new_hist = equal_hist(hist)
new_img = img.copy()
h, w = img.shape[:2]
for i in range(h):
for j in range(w):
new_img[i,j] = new_hist[img[i,j]]
plt.figure(figsize=(7,7))
plt.subplot(2,2,1)
plt.imshow(img, cmap = 'gray')
plt.title('Ảnh gốc')
plt.subplot(2,2,2)
plt.plot(hist)
plt.subplot(2,2,3)
plt.imshow(new_img, cmap = 'gray')
plt.title('Ảnh sau cân bằng histogram')
plt.subplot(2,2,4)
plt.plot(new_hist)
plt.suptitle('CÂN BẰNG HISTOGRAM')
plt.show()

Chạy thử chương trình:

14


2.2 Thuật toán âm bản
Ý tưởng:
ý tưởng của thuật toán âm bản là biến đổi trắng thành đen, đen thành trắng

Mơ tả thuật tốn:
Với ảnh I bất kì thì ảnh L là âm bản của I khi L[i][j] = 255– I[i][j]
-Input: Một ảnh bất kì
-Output: Một ảnh đã được biến đổi âm bản

Chương trình cài đặt:
# Ảnh âm bản
from cv2 import cv2 as cv
# Đường dẫn file ảnh
path = 'images/cat.jpg'
# Đọc ảnh
image = cv.imread(path)
cv.imshow('Anh goc', image)
cv.waitKey(4)

15


# Chuyển sang ảnh xám (1 kênh màu)
gray_image = cv.cvtColor(image, cv.COLOR_BGR2GRAY)
# Chuyển sang ảnh âm bản)
neg_img = 255 - gray_image
cv.imshow('Anh am ban', neg_img)

cv.waitKey()
cv.destroyAllWindows()

Chạy thử thuật toán

2.3 Thuật toán lọc trung vị
Ý tưởng:
Thiết lập các điểm ảnh thành các giá trị gần giống như các điểm ảnh lân cận
Lọc trung vị là một kĩ thuật lọc phi tuyến, nó khá hiệu quả đối với hai loại nhiễu :
+ Nhiễu đốm (speckle noise)
+ Nhiễu muối tiêu (salt-pepper noise)

Mơ tả thuật tốn:
Sử dụng kernel quét qua lần lượt từng điểm ảnh, lấy các vị trí tương ứng
với từng điểm ảnh sau đó sắp xếp các điểm ảnh này theo thứ tự, cuối cùng
lấy điểm chính giữa cho giá trị của điểm ảnh đang xét

16


Giả sử ta có ảnh I ngưìng θ cửa sổ W(P) và điểm ảnh P
Khi đó kỹ thuật lọc trung vị phụ thuộc không gian bao gồm các bước cơ
bản sau:
+ Bước 1: Tìm trung vị
{I(q)| q ∈ W(P)} → Med(P)
+ Bước 2: Gán giá trị
I(P) = I(P) khi |I(P) – Med(P)| <= θ
I(P) = Med(P) khi |I(P) – Med(P)| > θ
-Input: Ảnh bị nhiễu
-Output: Ảnh đã được giảm nhiễu


Chương trình cài đặt:
import cv2 as cv
import matplotlib.pyplot as plt
import numpy as np
def MedianFilter(image, filter_size):
# Tạo một ảnh trống có cùng kích thước với ảnh đầu vào
output = np.zeros(image.shape, np.uint8)
# Tạo mặt nạ kernel có cùng kích thước với filter_size
filter_array = [image[0][0]] * filter_size
# Thực hiện với filter_size = 3x3
if filter_size == 9:
for j in range(1, image.shape[0]-1):
for i in range(1, image.shape[1]-1):
filter_array[0] = image[j-1, i-1]
filter_array[1] = image[j, i-1]
filter_array[2] = image[j+1, i-1]
filter_array[3] = image[j-1, i]
filter_array[4] = image[j, i]
filter_array[5] = image[j+1, i]
filter_array[6] = image[j-1, i+1]
filter_array[7] = image[j, i+1]
filter_array[8] = image[j+1, i+1]
# Sắp xếp
filter_array.sort()

17


# Lấy ra điểm trung vị

output[j][i] = filter_array[4]
# Thực hiện filter_size = 5x5
elif filter_size == 25:
for j in range(2, image.shape[0]-2):
for i in range(2, image.shape[1]-2):
filter_array[0] = image[j-2, i-2]
filter_array[1] = image[j-1, i-2]
filter_array[2] = image[j, i-2]
filter_array[3] = image[j+1, i-2]
filter_array[4] = image[j+2, i-2]
filter_array[5] = image[j-2, i-1]
filter_array[6] = image[j-1, i-1]
filter_array[7] = image[j, i-1]
filter_array[8] = image[j+1, i-1]
filter_array[9] = image[j+2, i-1]
filter_array[10] = image[j-2, i]
filter_array[11] = image[j-1, i]
filter_array[12] = image[j, i]
filter_array[13] = image[j+1, i]
filter_array[14] = image[j+2, i]
filter_array[15] = image[j-2, i+1]
filter_array[16] = image[j-1, i+1]
filter_array[17] = image[j, i+1]
filter_array[18] = image[j+1, i+1]
filter_array[19] = image[j+2, i+1]
filter_array[20] = image[j-2, i+2]
filter_array[21] = image[j-1, i+2]
filter_array[22] = image[j, i+2]
filter_array[23] = image[j+1, i+2]
filter_array[24] = image[j+2, i+2]

# Sắp xếp
filter_array.sort()
# Lấy ra điểm trung vị
output[j][i] = filter_array[12]
return output
# Đường dẫn file ảnh
path = 'images/noise.png'
# Đọc ảnh
image = cv.imread(path, 0)

18


new_img = MedianFilter(image, 9)
plt.figure(figsize=(7,7))
plt.subplot(1,2,1)
plt.title('Ảnh gốc')
plt.imshow(image, cmap = 'gray')
plt.subplot(1,2,2)
plt.title('Ảnh lọc trung vị')
plt.imshow(new_img, cmap = 'gray')
plt.show()

Chạy thử chương trình

2.4 Thuật tốn lọc trung bình
Ý tưởng:
Thay thế giá trị tại mỗi điểm pixel bằng trung bình các giá trị pixel trong
mặt nạ (kernel) lân cận nhằm:
Loại bỏ những pixel biến đổi lớn so với lân cận (nhiễu)


Mơ tả thuật tốn:
Giả sử ta có ảnh I, điểm ảnh P, cửa sổ W(P) và ngưỡng θ. Khi đó kỹ thuật
lọc trung bình phụ thuộc khơng gian bao gồm các bước cơ bản sau:
19


+ Bước 1: Tìm trung bình

{I(q)| q ∈ W(P)} → AV(P)
+ Bước 2: Gán giá trị

I(P) = I(P) khi |I(P) – Med(P)| <= θ
I(P) = Med(P) khi |I(P) – Med(P)| > θ
-Input: Ảnh bất kì bị nhiễu
-Output: Ảnh đã được giảm nhiễu

Chương trình cài đặt:
import cv2 as cv
import matplotlib.pyplot as plt
import numpy as np
def MeanFilter(image, filter_size):
# create an empty array with same size as input image
output = np.zeros(image.shape, np.uint8)
result = 0
# thực hiện với filter_size = 3x3
if filter_size == 9:
for j in range(1, image.shape[0]-1):
for i in range(1, image.shape[1]-1):
for y in range(-1, 2):

for x in range(-1, 2):
result = result + image[j+y, i+x]
output[j][i] = int(result / filter_size)
result = 0
# thực hiện với filter_size = 5x5
elif filter_size == 25:
for j in range(2, image.shape[0]-2):
for i in range(2, image.shape[1]-2):
for y in range(-2, 3):
for x in range(-2, 3):
result = result + image[j+y, i+x]
output[j][i] = int(result / filter_size)
result = 0
return output

20


# Đường dẫn file ảnh
path = 'images/noise.png'
# Đọc ảnh
image = cv.imread(path, 0)
new_img = MeanFilter(image, 9)
plt.figure(figsize=(7,7))
plt.subplot(1,2,1)
plt.title('Ảnh gốc')
plt.imshow(image, cmap = 'gray')
plt.subplot(1,2,2)
plt.title('Ảnh lọc trung bình')
plt.imshow(new_img, cmap = 'gray')

plt.show()

Chạy thử thuật tốn

2.5 Thuật tốn làm mờ ảnh Gaussian
Ý tưởng:
Sử dụng một ma trận để giảm nhiễu và làm mờ hình ảnh

21


Mơ tả thuật tốn
-Input: Ảnh bất kì
-Output: Ảnh được giảm nhiễu và làm mờ

Chương trình cài đặt:
import cv2 as cv
import matplotlib.pyplot as plt
import numpy as np
def GaussFilter(image):
def kernel(a, b):
return a*b/12
# tạo một ảnh trống có cùng kích thước mới ảnh đầu vào
output = np.zeros(image.shape, np.uint8)
result = []
for j in range(1, image.shape[0]-1):
for i in range(1, image.shape[1]-1):
for y in range(-1, 2):
for x in range(-1, 2):
result.append(image[j+y, i+x])

output[j][i] = sum(list(map(kernel, result, [1,2,1,2,4,2,1,2,1])))
result.clear()
return output
# Đường dẫn file ảnh
path = 'noise.jpg'
# Đọc ảnh
image = cv.imread(path, 0)
#
test_img = GaussFilter(image)
plt.figure(figsize=(7,7))
plt.subplot(1,2,1)
plt.title('Ảnh gốc')
plt.imshow(image, cmap = 'gray')
plt.subplot(1,2,2)

22


plt.title('Ảnh gaussian')
plt.imshow(test_img, cmap = 'gray')
plt.show()

Chạy thử trương trình:

2.6 Thuật tốn phát hiện biên sobel
Ý tưởng:
Sử dụng kernel có kích thước 3x3 nhân chập với ảnh gốc đề tính đạo hàm
theo hướng ngang (Gx) hoặc dọc (Gy) sau đó tính trung bình độ lớn của gradient.
Tính đạo hàm là sự thay đổi của pixel theo hướng đó. Cuối cùng dựa vào cường độ
đã tính được làm nổi bật các đường biên


Mơ tả thuật toán:
Kỹ thuật sử dụng 2 mặt nạ nhập chập xấp xỉ đạo hàm theo 2 hướng x và y
là:

Hx =

-1

0

1

-2

0

2

-1

0

1

Hy =

Các bước tính tốn của kỹ thuật Sobel
23


-1

-2

-1

0

0

0

1

2

1


+ Bước 1: Tính I ⊗ Hx và I ⊗ Hy
+ Bước 2: Tính I ⊗ Hx + I ⊗ Hy
-Input: Ảnh bất kì
-Output: Ảnh đường biên

Chương trình cài đặt:
import numpy as np
import cv2 as cv
from matplotlib import pyplot as plt
def sobelOperator(img):
container = np.copy(img)

size = container.shape
for i in range(1, size[0] - 1):
for j in range(1, size[1] - 1):
gx = (img[i - 1][j - 1] + 2*img[i][j - 1] + img[i + 1][j - 1]) - (img[i - 1][j + 1] +
2*img[i][j + 1] + img[i + 1][j + 1])
gy = (img[i - 1][j - 1] + 2*img[i - 1][j] + img[i - 1][j + 1]) - (img[i + 1][j - 1] +
2*img[i + 1][j] + img[i + 1][j + 1])
container[i][j] = np.sqrt(gx**2 + gy**2)
return container
# Đường dẫn file ảnh
path = 'images/cat.jpg'
# Đọc ảnh
image = cv.imread(path, 0)
new_img = sobelOperator(image)
plt.figure(figsize=(7,7))
plt.subplot(1,2,1)
plt.title('Ảnh gốc')
plt.imshow(image, cmap = 'gray')
plt.subplot(1,2,2)
plt.title('Ảnh sobel')
plt.imshow(new_img, cmap = 'gray')
plt.show()

24


Chạy thử chương trình:

2.7 Thuật tốn phát hiện biên Prewitt
Ý tưởng:

Sử dụng kernel có kích thước 3x3 đặc trưng của phương pháp prewitt nhân
chập với ảnh gốc đề tính đạo hàm theo hướng ngang (Gx) hoặc dọc (Gy) sau đó
tính trung bình độ lớn của gradient. Tính đạo hàm là sự thay đổi của pixel theo
hướng đó. Cuối cùng dựa vào cường độ đã tính được làm nổi bật các đường biên

Mơ tả thuật tốn:
Kỹ thuật sử dụng 2 mặt nạ nhập chập xấp xỉ đạo hàm theo 2 hướng x và y
là:

Hx =

-1

0

1

-1

0

1

-1

0

1

Hy =


Các bước tính tốn của kỹ thuật Prewitt
+ Bước 1: Tính I ⊗ Hx và I ⊗ Hy
+ Bước 2: Tính I ⊗ Hx + I ⊗ Hy
-Input: Ảnh bất kì
25

-1

-1

-1

0

0

0

1

1

1


×