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

cải thiện ảnh bằng bộ lọc gauss

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 (468.21 KB, 15 trang )

TRƯỜNG ĐẠI HỌC MỎ ĐỊA CHẤT
KHOA CÔNG NGHỆ THÔNG TIN
o0o
Bài tập lớn môn học
XỬ LÝ ẢNH
Giảng viên hướng dẫn: Trần Mai Hương
Người thực hiện: 1. Dương Thị Thảo
2. Trần Xuân Đức
3. Nguyễn Đẩu Hoàng
Lớp: Tin học Trắc Địa K55
12/2011
ĐẶT VẤN ĐỀ
Xử lý ảnh đang là một lĩnh vực đươc quan tâm và đã trở thành một phần
rất quan trọng ,liên quan đến nhiều ngành khác như : hệ thống tin học , lý thuyết
thông tin , lý thuyết thống kê , trí tuệ nhân tạo , nhận dạng . Đây là một môn
khoa học tương đối mới mẻ so với nhiều ngành khoa học khác . Nó gồm nhiều
quá trình liên tục . Đầu tiên là thu nhận ảnh từ camera , vệ tinh hay các bộ cảm
ứng ,…Tín hiệu lấy vào sẽ được số hóa thành tín hiệu số và chuyển sang giai
đoạn xử lý , phân tích hay lưu trữ lại .
Mục tiêu của xử lý ảnh có thể chia theo 3 hướng:
1. Xử lý ảnh ban đầu để có được ảnh mới theo yêu cầu xác định (ví dụ
ảnh mờ cần xử lý để ảnh được rõ hơn)
2. Phân tích ảnh để thu được thông tin đặc trưng giúp cho việc phân loại
nhận biết ảnh (ví dụ phân tích vân tay để trích chọn các đặc trưng vân tay)
3. Hiểu ảnh đầu vào để có những mô tả về ảnh ở mức cao hơn, sâu hơn (ví
dụ từ ảnh một tai nạn giao thông phác họa hiện trường tai nạn)
Trong Công nghệ thông tin xử lý ảnh đặc biệt cần thiết và nó phù hợp với
tất cả mọi ứng dụng. Vì vậy, việc có một phần mềm xử lý ảnh chuyên biệt và có
thể sử dụng như một module gắn vào các ứng dụng là hết sức cần thiết.
Trong quá trình học , chúng em đặc biệt hứng thú với các phương pháp lọc số để
xử lý ảnh . Chính vì vậy nhóm em đã chọn đề tài : " Cải thiện ảnh bằng bộ lọc


Gauss "
Với khoảng thời gian không nhiều nhưng với sự nỗ lực của bản thân và
sự hướng dẫn tận tình của cô giáo, chúng em đã hoàn thành bài tập. Tuy nhiên
do thời gian còn hạn chế nên phạm vi nghiên cứu và chương trình còn nhiều vấn
đề chưa giải quyết được triệt để. Em mong được sự chỉ bảo của cô để em hoàn
thành tốt hơn bài tập của mình.
Em xin chân thành cám ơn cô giáoTrần Mai Hương đã tận tình giảng dạy
và giúp đỡ em hoàn thành bài tập này.
2
NỘI DUNG BÁO CÁO
Phần I: Tìm hiểu về bộ loc Gauss
Chương I: Giới thiệu tổng quan về hàm Gauss
1. Khái niệm
Gaussian Blur là cách làm mờ một ảnh bằng hàm Gaussian. Phương pháp này
được ứng dụng một cách rộng rãi và hiệu quả trong các phần mềm xử lý đồ họa.
Nó cũng là công cụ phổ biến để thực hiện quá trình tiền xử lý (preprocessing)
hình ảnh dùng làm dữ liệu đầu vào tốt cho các phân tích cao cấp hơn như trong
Computer Vision, hoặc cho các giải thuật được thực hiện trong một tỉ lệ khác
của hình được cho. Nó có thể giúp làm giảm nhiễu (Noise) và mức độ chi tiết
(không mong muốn) của hình ảnh.
Một cách trực quan, đây được xem như là phương pháp làm mờ mịn cũng
giống như hiệu ứng hình ảnh được đặt dưới một lớp màn trong suốt bị mờ. Nó
không giống với trường hợp hình ảnh bị mờ do hậu quả của ống kính bị mất tiêu
điểm (out of focus) hay do bóng của đối tượng dưới ánh sáng thường.
Trong toán học, việc ứng dụng Gaussian Blur cho một hình cũng chính là
tính tích chập (Convolution) hình đó với hàm Gaussian. Vì biến đổi Fourier của
một Gaussian sẽ tạo ra một Gaussian khác cho nên nếu xét trên miền tần số thì
phương pháp này sẽ làm giãm các thành phần có tần số cao trong hình. Hay nói
cách khác Gaussian Blur là một bộ lọc tần số cao (low pass filter : chỉ giữ lại các
thành phần tần số thấp).

2. Ví dụ
Dưới đây là một ví dụ về hình ảnh sau khi đưa qua bộ lọc Gauss
3
Hình gốc
Hình bị Blur
Như vậy phát biểu một cách thực hành hơn Gaussian blurr là một loại bộ lọc
làm mờ ảnh, sử dụng lý thuyết hàm Gaussian (cũng được biết đến như là dạng
phân tán chuẩn (Normal Distribution) trong thống kê) để tính toán việc chuyển
đổi (Transformation) mỗi Pixel của hình.
3. Phương trình hàm Gaussian dùng trong không gian một chiều và hai
chiều
Một chiều
Hai chiều
Trong đó x và y là tọa độ theo hai trục đứng và ngang còn σ là phương sai
chuẩn của phân tán Gaussian hay là giá trị quyết định độ lệch giữa các điểm trên
4
bề mặt Gaussian. Trong không gian hai chiều, công thức này sản sinh ra những
đường viền là những đường tròn đồng tâm, tuân theo logic phân tán Gaussian từ
điểm trung tâm. Giá trị từ hệ thống phân tán này sẽ được sử dụng để xây dựng
một ma trận tích chập (Convolution) dùng tính tóan phép tích chập
(Convolution) với hình ảnh gốc.
Giá trị mới của mỗi Pixel sau khi tính tích chập với kernel đại diện cho hàm
Gaussian có thể coi là trung bình lượng giá của các pixel xung quanh nó. Ta
thấy rằng giá trị lượng giá của phần tử trung tâm kernel tương ứng với pixel
đang xét là lớn nhất, giá trị này sẽ nhỏ hơn đối với các phần tử tương ứng với
những pixel kế cận một cách đối xứng và tỉ lệ thuận với khoảng cách của phần
tử này với trung tâm. Tính chất này giúp giữ lại đường viền và biên cũng như
làm mờ một cách đồng bộ hơn so với các phương pháp khác.
Trong lý thuyết, hàm Gaussian tại mỗi điểm trên hình là khác 0. Điều này
có nghĩa là Gaussian Kernel nên có kích thước bằng với hình ảnh và giá trị tại

mỗi phần tử luôn khác 0. Tuy nhiên trong thực hành, do việc tính tóan dựa trên
xấp xỉ rời rạc (Discrete Approximation) cho nên giá trị của các phần tử trên bề
mặt Gaussian ở khỏang cách lớn hơn 3σ so với trung tâm gần như không đáng
kể (tiệm cận 0). Do vậy các phân tán Gaussian ngòai bán kính này sẽ bị bỏ qua,
đó cũng là lý do mà thông thường Gaussian kernel có kích thước giới hạn 3, 5,
7 (Cái này còn tùy vào giá trị phương sai chuẩn mà bạn chọn). Khoảng cách
giữa hai điểm gần nhau trong Gaussian Kernel là σ.
Do đặc tính có cấu trúc như những hình tròn đối xứng, với hình hai chiều,
Gaussian blur có thể được áp dụng như là hai phép tính toán một chiều độc lập
(Độc lập tuyến tính - Linearly Separable). Có nghĩa là hiệu quả thu được từ tính
toán trên ma trận hai chiều có thể tương đương với cách ứng dụng tính toán một
loạt các Gaussian 1 chiều theo hướng ngang và đứng. Điều này rất hữu ích trong
việc giảm chi phí tính toán thể hiện khá rỏ trong hai công thức tương ứng sau:


5
Một vấn đề cần được quan tâm nữa của Gaussian blur là nếu bạn sử dụng
lần lượt nhiều Gaussian cho một ảnh thì kết quả cũng tương đương với khi bạn
dùng một Gaussian lớn hơn có bán kính bằng căn bậc hai tổng bình phương các
bán kính của các Gaussian đã dùng, ví dụ: Cũng vì mối quan hệ này
mà thời gian tính toán sẽ không thể được tiết kiệm khi bạn chia nhỏ các
Gaussian. Do đó khuyến cáo nên sử dụng Gaussian đơn trong tính toán nếu có
thể.
Ngoài ra Gaussian blur cũng được sử dụng để giảm kích thước của hình
ảnh. Khi tiến hành xử lý giảm tỉ lệ lấy mẩu tín hiệu cho ảnh (Downsampling)
người ta thường áp dụng bộ lọc tần số cao (Low pass filter) trước khi tái lấy
mẫu. Điều này là để chắc chắn những thông tin không mong muốn, tần số cao sẽ
không xuất hiện trong hình đã được Downsampling (loại bỏ răng cưa
Aliasing).
Với những gì đã trình bày ở trên, chúng ta cũng đã nhắc tới bề mặt, ma trận

Gaussian, đó chính là hiện thực hóa của hàm Gaussian trong thực hành. Hàm
Gaussian được áp dụng vào ảnh thông qua phép Convolution giữa ma trận
Gaussian và ma trận điểm ảnh 2 chiều. Dưới đây là một ví dụ của ma trận
Gaussian được tạo ra bằng công thức Gaussian ở trên với σ = 0.84089642 và sau
đó chuẩn hóa lại. Lưu ý quan sát và so sánh với các đặc tính nêu trên nhằm làm
rỏ thêm các vấn đề đã được trình bày.
6
Chương II: Tính chất
Hàm Gauss phát sinh từ việc gán hàm mũ phức vào một hàm bậc hai thông
thường. Do đó hàm Gauss có logarit là một hàm bậc hai.
Đường cong Gauss chuẩn hóa với giá trị kỳ vọng μ và phương sai σ
2
.
Những tham số tương ứng là a = 1/(σ√(2π)), b = μ, c = σ
Biểu đồ của một hàm Gauss là một đường cong đối xứng đặc trưng "hình
quả chuông". Đường cong này rớt xuống rất nhanh khi tiến tới cộng/trừ vô cùng.
Tham số a là chiều cao tối đa đường cong, b là vị trí tâm của đỉnh và c quyết
định chiều rộng của "chuông".
Hàm Gauss được sử dụng rộng rãi. Trong thống kê chúng miêu tả phân bố
chuẩn, trong xử lý tín hiệu chúng giúp định nghĩa bộ lọc Gauss, trong xử lý hình
ảnh hàm Gauss hai chiều được dùng để tạo hiệu ứng mờ Gauss, và trong toán
học chúng được dùng để giải phương trình nhiệt và phương trình khuyếch tánvà
định nghĩa phép biến đổi Weierstrass.
7
Phần II: Khảo sát và xây dựng ứng dụng cải thiện ảnh bằng bộ lọc Gauss
I. Chức năng của chương trình
Xuất phát từ ý tưởng xây dựng một chương trình xử lý ảnh. Chương trình
này chỉ là bước khởi đầu cho một sự tích hợp tất cả các ứng dụng xử lý ảnh vào
trong một chương trình, đây sẽ là một trong những chương trình giúp người sử
dụng hiểu rõ hơn về phép cải thiện ảnh trong xử lý ảnh.

Trong khuôn khổ của một bài tập thực hành, ở đây chúng em xin được trình bày
phép cải thiện ảnh bằng bộ lọc Gauss (chương trình được viết bằng ngôn ngữ
VB)
Dưới đây là giao diện chính của chương trình:
II. Load ảnh và lưu ảnh sau khi xử lý:
Load ảnh: Đây là chức năng đầu tiên của chương trình cho phép load một
ảnh bitmap 256 mầu để xử lý.
Thủ tục load ảnh lên from giao diện người dùng
Private Sub mmsave_Click()
On Error Resume Next
CM.Filter = _
8
"Bitmap|*.bmp;|JPEG|*.jpg;*.jpeg;|GIF|*.gif;"
CM.ShowSave
FileName = CM.FileName
SavePicture Pic7.Image, FileName
End Sub
Lưu ảnh: Là chức năng cho phép lưu trữ ảnh sau khi xử lý
Thủ tục lưu ảnh
Private Sub mnuload_Click()
Dim Token As Long
CM.Filter = "Image|*.bmp;*.jpg"
CM.ShowOpen
If CM.FileName <> "" Then
Token = InitGDIPlus
Pic1.Picture = LoadPictureGDIPlus(CM.FileName, Pic1.Width, Pic1.Height, ,
False)
FreeGDIPlus Token
End If
Text1.Text = ""

End Sub
III. Lọc ảnh bằng bộ lọc Gauss
Thủ tục lọc ảnh
Private Sub mnugaussian_Click()
On Error GoTo ErrHandle
Const MaxData = 255
Const DataGranularity = 1
Const Delta = DataGranularity / (2 * MaxData)
Dim X As Integer, Y As Integer
Dim fBias As Integer, fScaleFactor As Single
Dim fRadius As Single, Sum As Single, RR2 As Single
Dim MaxGaussianSize As Integer, GaussianSize As Integer
9
Dim GaussianKernel() As Double, Kernel() As Single
Dim KernelSize As Long
Dim fKernel As Long, fWidth As Long, fHeight As Long, fCount As Long
Dim SF As Single, Rad As Single, W As Single, C As Single
Dim KWH As Long, KWL As Long, KHH As Long, KHL As Long
MaxGaussianSize = 50
fBias = 0: fScaleFactor = 1: fCount = 1
fRadius = InputBox("Chon Muc Do Loc voi gia tri nam trong khoang[0.5 - 2] :
", "nhap gia tri")
If fRadius < 0 Then fRadius = 0
If fRadius > 10 Then MsgBox "Chon Muc Do Loc voi gia tri nam trong
khoang[0.5 - 2]", vbInformation, "Angka Kelebihan": Exit Sub
ReDim GaussianKernel(-MaxGaussianSize To MaxGaussianSize,
-MaxGaussianSize To MaxGaussianSize)
Sum = 0
RR2 = -2 * fRadius * fRadius
For Y = -MaxGaussianSize To MaxGaussianSize

For X = -MaxGaussianSize To MaxGaussianSize
GaussianKernel(Y, X) = Exp((X * X + Y * Y) / RR2)
Sum = Sum + GaussianKernel(Y, X)
Next X
Next Y
For Y = -MaxGaussianSize To MaxGaussianSize
For X = -MaxGaussianSize To MaxGaussianSize
GaussianKernel(Y, X) = GaussianKernel(Y, X) / Sum
Next X
Next Y
Sum = 0
GaussianSize = MaxGaussianSize
Do While (GaussianSize > 1) And (Sum < Delta)
10
Sum = Sum + 4 * GaussianKernel(0, GaussianSize)
GaussianSize = GaussianSize - 1
Loop
For Y = -GaussianSize To GaussianSize
For X = -GaussianSize To GaussianSize
Sum = Sum + GaussianKernel(Y, X)
Next X
Next Y
For Y = -GaussianSize To GaussianSize
For X = -GaussianSize To GaussianSize
GaussianKernel(Y, X) = GaussianKernel(Y, X) / Sum
Next X
Next Y
KernelSize = (2 * GaussianSize) + 1
SF = 0: Rad = 1
Dim RKernel(99999) As Single, cnt As Integer

cnt = 0
For Y = -GaussianSize To GaussianSize
C = 0
For X = -GaussianSize To GaussianSize
W = Round((1 / GaussianKernel(GaussianSize, GaussianSize)) *
GaussianKernel(Y, X))
RKernel(cnt) = W
SF = SF + W
C = C + 1
cnt = cnt + 1
Next X
Rad = Rad + 1
Next Y
fScaleFactor = SF
11
Me.Cls
ReDim Kernel(1, Rad, C)
cnt = 0
Dim tmps As String
Text1.Text = Text1.Text & vbCrLf
Text1.Text = Text1.Text + "Ma Tran loc" & vbCrLf
Text1.SelStart = Len(Text1.Text)
ReDim Kernel(0 To 1, -GaussianSize To GaussianSize, -GaussianSize To
GaussianSize)
For I = -GaussianSize To GaussianSize
For J = -GaussianSize To GaussianSize
Kernel(1, I, J) = RKernel(cnt)
tmps = tmps & Format(Kernel(1, I, J), "000") & " "
cnt = cnt + 1
Next J

Text1.Text = Text1.Text + tmps & vbCrLf
tmps = ""
Next I
Text1.Text = Text1.Text + "nhap gia tri =" & fRadius & " kich thuoc ma tran la
" & KernelSize & " x " & KernelSize & " " & vbCrLf
Text1.SelStart = Len(Text1.Text)
Pic7.Cls
Dim tmpIntR As Double, tmpIntG As Double, tmpIntB As Double
Dim CTotal As Single
Dim CDataR As Single, CDataG As Single, CDataB As Single
CTotal = (((GaussianSize * GaussianSize) + GaussianSize) * 4) + 1
Dim tmpC As Long
Dim CountClr As Long
12
For Y = 0 To Pic1.Height - 1
For X = 0 To Pic1.Width
For J = -GaussianSize To GaussianSize
For I = -GaussianSize To GaussianSize
PixelValue = GetPixel(Pic1.hdc, X + I, Y + J)
DecTORGB PixelValue, R, G, B
CDataR = CDataR + (Kernel(1, J, I) * R)
CDataG = CDataG + (Kernel(1, J, I) * G)
CDataB = CDataB + (Kernel(1, J, I) * B)
If mX < C Then mX = mX + 1
Next I
Next J
CDataR = CDataR / (fScaleFactor + fBias)
CDataG = CDataG / (fScaleFactor + fBias)
CDataB = CDataB / (fScaleFactor + fBias)
SetPixel Pic7.hdc, X, Y, RGB(CDataR, CDataG, CDataB)

Pic7.Refresh
DoEvents
Next X
Pic7.Refresh
Next Y
Pic7.Refresh
Exit Sub
ErrHandle:
Exit Sub
End Sub
13
IV. Ví dụ về ảnh đã lọc bằng bộ lọc Gauss
Dưới đây là ví dụ về ảnh đưa qua bộ lọc Gauss với những thông số khác
nhau cho một ảnh gốc
Hình gốc
Hình sau khi đưa qua bộ lọc Gauss
14
Phần III: Kết luận
Trong phần mà chúng em đã trình bày ở trên thì, một bước quan trọng khi
phát triển một hệ xử lý ảnh trong một môi trường ứng dụng thực tế là xác định
được mục tiêu tổng quát thật rõ ràng. Thứ hai là xác định những hạn chế do môi
trường ứng dụng đặt ra. Thứ ba là thu lượm thông tin về ảnh cần xử lý.
Khi đã cho mục tiêu tổng thể, các điều hạn chế và thông tin về lớp ảnh
cần phải xử lý thì sẽ có nhiều phương pháp khác nhau để giải được bài toán.
Chúng em hy vọng rằng qua phần chúng em đã trình bày ở trên, độc giả
có thể đọc thêm nhiều tài liệu về các chuyên mục, và các ứng dụng nghiên cứu
lý thuyết vào những vấn đề thực tiễn, cũng như về các tiến bộ mới trong nghiên
cứu và triển khai thuộc lĩnh vực này.
Cuối cùng chúng em xin chân thành cảm ơn cô đã hướng dẫn chúng em
hoàn thành bài tập lớn này

Phần V: Tư liệu tham khảo
1. Nhập môn xử lý ảnh………………………Nguyễn Thanh Thủy
2. Giáo trình xử lý ảnh……………………….ĐH Bách Khoa
3.
HẾT
15

×