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
Trang 1TRƯỜ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
Trang 2ĐẶ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
Trang 3NỘ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
Trang 4Hì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
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
Trang 5bề 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: Và
Trang 6
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
Trang 7Chươ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
Trang 8Phầ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 = _
Trang 9"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
Trang 10Dim 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)
Trang 11Sum = 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
Trang 12ReDim 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
Trang 13For 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
Trang 14IV 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
Trang 15Phầ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 http://planet-source-code.com
- HẾT