CHUYỂN ĐỔI ẢNH XÁM SANG ẢNH MÀU VÀ ẢNH MÀU SANG ẢNH XÁM THEO MÔ HÌNH HSI Giảng viên hướng dẫn : Ths. Trịnh Thế Vinh Sinh viên thực hiện : Trương Hùng Anh Huỳnh Ngọc Tuân Lê Thị Thùy Liên Lê Phạm Thảo Quyên Đà nẵng, tháng 12/2012 MỤC LỤC LỜI MỞ ĐẦU 3 PHẨN I: CƠ SỞ LÝ THUYẾT 4 I.1 Khái niệm ảnh đen trắng và ảnh màu 4 I.1.1 Ảnh đen trắng 4 I.1.2 Ảnh màu 5 I.2 Mô hình màu HSI 5 PHẦN II: TỔNG QUAN VỀ CHƯƠNG TRÌNH 7 II.1 Giới thiệu về ngôn ngữ lập trình VB.NET 7 II.1.1 Sơ lược về Visual Basic.NET 7 II.1.2 .NET Framework 7 II.2 Các tính năng của chương trình 8 II.2.1 Chuyển đổi ảnh màu sang ảnh xám 8 II.2.2 Chuyển từ ảnh xám sang ảnh màu bằng mô hình màu HSI 10 II.3 Giao diện chương trình 13 PHẦN III: KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN 14 LỜI MỞ ĐẦU Xử lý ảnh là một trong những mảng quan trọng nhất trong kỹ thuật thị giác máy tính, là tiền đề cho nhiều nghiên cứu thuộc lĩnh vực này. Hai nhiệm vụ cơ bản của quá trình xử lý ảnh là nâng cao chất lượng thông tin hình ảnh và xử lý số liệu cung cấp cho các quá trình khác trong đó có việc ứng dụng thị giác vào điều khiển. Quá trình bắt đầu từ việc thu nhận ảnh nguồn (từ các thiết bị thu nhận ảnh dạng số hoặc tương tự) gửi đến máy tính. Dữ liệu ảnh được lưu trữ ở định dạng phù hợp với quá trình xử lý. Người lập trình sẽ tác động các thuật toán tương ứng lên dữ liệu ảnh nhằm thay đổi cấu trúc ảnh phù hơp với các ứng dụng khác nhau. Qua quá trình học tập và nghiên cứu cộng với sự mày mò của bản thân cũng như mọi người, nhóm em đã xây dựng một chương trình xử lý ảnh có một số chức năng như sau: • Chuyển ảnh màu sang ảnh xám. • Chuyển ảnh xám sang ảnh màu. • Mô hình màu HSI. Do thời gian và trình độ có hạn nên bài tập điều kiện 02 của nhóm em còn có nhiều thiếu sót. Em rất mong nhận đ¬ợc những lời nhận xét và chỉ bảo của Thầy. Chúng em xin chân thành cảm ơn !!!
Trang 1BỘ GIÁO DỤC VÀ ĐÀO TẠO Học Viện Công Nghê Bưu Chính Viễn Thông
KHOA CNTT
CHUYỂN ĐỔI ẢNH XÁM SANG ẢNH MÀU VÀ ẢNH MÀU SANG ẢNH XÁM
THEO MÔ HÌNH HSI
Giảng viên hướng dẫn : Ths Trịnh Thế Vinh
Sinh viên thực hiện : Trương Hùng Anh
Huỳnh Ngọc Tuân
Lê Thị Thùy Liên
Lê Phạm Thảo Quyên
Đà nẵng, tháng 12/2012
Nhóm thực hiện: Nhóm 1-L11CQCN12BTrang 1
Trang 2MỤC LỤC
Link download code vb nằm ở cuối trang (hình ảnh trong file)
Trang 3LỜI MỞ ĐẦU
Xử lý ảnh là một trong những mảng quan trọng nhất trong kỹ thuật thị giác máy tính, là tiền đề cho nhiều nghiên cứu thuộc lĩnh vực này Hai nhiệm vụ cơ bản của quá trình xử lý ảnh là nâng cao chất lượng thông tin hình ảnh và xử lý số liệu cung cấp cho các quá trình khác trong đó có việc ứng dụng thị giác vào điều khiển
Quá trình bắt đầu từ việc thu nhận ảnh nguồn (từ các thiết bị thu nhận ảnh dạng số hoặc tương tự) gửi đến máy tính Dữ liệu ảnh được lưu trữ ở định dạng phù hợp với quá trình xử lý Người lập trình sẽ tác động các thuật toán tương ứng lên dữ liệu ảnh nhằm thay đổi cấu trúc ảnh phù hơp với các ứng dụng khác nhau
Qua quá trình học tập và nghiên cứu cộng với sự mày mò của bản thân cũng như mọi người, nhóm em đã xây dựng một chương trình xử lý ảnh có một số chức năng như sau:
• Chuyển ảnh màu sang ảnh xám
• Chuyển ảnh xám sang ảnh màu
• Mô hình màu HSI
Do thời gian và trình độ có hạn nên bài tập điều kiện 02 của nhóm em còn có nhiều thiếu sót Em rất mong nhận đợc những lời nhận xét và chỉ bảo của Thầy
Chúng em xin chân thành cảm ơn !!!
Nhóm 01 – L11CQCN12-B
Nhóm thực hiện: Nhóm 1-L11CQCN12BTrang 3
Trang 4PHẨN I: CƠ SỞ LÝ THUYẾT I.1 Khái niệm ảnh đen trắng và ảnh màu
Ảnh có thể biểu diễn dưới dạng tín hiệu tương tự hoặc tín hiệu số Trong biểu diễn
số của các ảnh đa mức xám, một ảnh được biểu diễn dưới dạng một ma trận hai chiều
Mỗi phần tử của ma trận biểu diễn cho mức xám hay cường độ của ảnh tại vị trí đó
Hình 1.1 Biểu diễn mức xám của ảnh số
Trong hình 1.1, một lưới chia ô vuông tưởng tượng được đặt lên ảnh Độ lớn mỗi ô vuông của lưới xác định kích thước của một điểm ảnh Mức xám của một điểm được tính bằng cường độ sáng trung bình tại mỗi vuông này Mắt lưới càng nhỏ thì chất lượng ảnh càng cao
I.1.1 Ảnh đen trắng
Ảnh đen trắng chỉ bao gồm 2 màu: màu đen và màu trắng Người ta phân mức đen
trắng đó thành L mức Nếu sử dụng số bit B=8 bít để mã hóa mức đen tr ắng (hay mức xám) thì L được xác định: L=2 B (trong ví dụ của ta L=28= 256 mức).
Nếu L bằng 2, B=1, nghĩa là chỉ có 2 mức: mức 0 và mức 1, còn gọi là ảnh nhị phân.
Mức 1 ứng với màu sáng, còn mức 0 ứng với màu tối Nếu L lớn hơn 2 ta có ảnh đa cấp xám Nói cách khác, với ảnh nhị phân mỗi điểm ảnh được mã hóa trên 1 bit, còn với ảnh
256 mức, mỗi điểm ảnh được mã hóa trên 8 bit Như vậy, với ảnh đen trắng: nếu dùng 8 bit (1 byte) để biểu diễn mức xám, số các mức xám có thể biểu diễn được là 256 Mỗi mức xám được biểu diễn dưới dạng là một số nguyên nằm trong khoảng từ 0 đến 255, với mức
0 biểu diễn cho mức cường độ đen nhất và 255 biểu diễn cho mức cường độ sáng nhất
Trang 5Ảnh nhị phân khá đơn giản, các phần tử ảnh có thể coi như các phần tử logic Ứng dụng chính của nó được dùng theo tính logic để phân biệt đối tượng ảnh với nền hay để phân biệt điểm biên với điểm khác
I.1.2 Ảnh màu
Ảnh màu theo lý thuyết của Thomas là ảnh tổ hợp từ ba màu cơ bản: đỏ (Red), lục (Green), lơ (Blue) và thường thu nhận trên các dải băng tần khác nhau Với ảnh màu, cách biểu diễn cũng tương tự như với ảnh đen trắng, chỉ khác là các số tại mỗi phần tử của ma trận biểu diễn cho ba màu riêng rẽ gồm: đỏ (Red), lục (Green) và lơ (Blue).Để biểu diễn cho một điểm ảnh àu cần 24 bit 24 bit này được chia thành ba khoảng 8 bit Mỗi màu
cũng phân thành L cấp màu khác nhau (thường L=256) Mỗi khoảng này biểu diễn cho
cường độ sáng của một trong các màu chính Do đó, để lưu trữ ảnh màu người ta có thể lưu trữ từng màu riêng biệt, mỗi màu lưu trữ như một ảnh đa cấp xám
I.2 Mô hình màu HSI
Mô hình màu HSI hay HSV (Hue, Saturation, Value) Màu có thể được biểu diễn bởi 3 yếu tố H, S, I:
• Hue (Sắc lượng)
• Saturation (độ bão hòa)
• Intensity (độ chói còn gọi là Value)
Các mô hình màu RGB, CMY được định hướng cho phần cứng trái ngược với mô hình màu HSV của Smith hay còn được gọi là mẫu HSB với B là Brightness (độ sáng), được định hướng người sử dụng dựa trên cơ sở nền tảng về trực giác về tông màu, sắc
độ và sắc thái mỹ thuật Hệ thống tọa độ có dạng hình trụ và tập màu thành phần của không gian bên trong mô hình màu được xác định là hình nón hoặc hình chóp sáu cạnh như trong hình 1.7 Đỉnh hình chóp là sáu cạnh khi V= 1 chứa đựng mối quan hệ giữa các màu sáng và những màu trên mặt phẳng với V= 1 đều có màu sáng
Nhóm thực hiện: Nhóm 1-L11CQCN12B Trang 5
Trang 6Hình 1.2 Mô hình màu HSV Sắc màu (Hue) hoặc H được đo bởi góc quanh trục đứng với màu đỏ là 0o, màu lục là 20o, màu lam là 240o (xem hình 1.2) Các màu bổ sung trong hình chóp HSV
ở 180o đối diện với màu khác Giá trị của S là một tập các giá trị đi từ 0 trên đường trục tâm (trục V) đến 1 trên các mặt bên tại đỉnh của hình chóp sáu cạnh Sự bão hòa được đo tương đối cho gam màu tương ứng với mô hình màu này
Mô hình màu dạng hình chóp sáu cạnh này đường cao V với đỉnh là điểm gốc tọa độ (0,0) Điểm ở đỉnh là màu đen có giá trị tọa độ màu V= 0, tại các điểm này giá trị của H và S là không liên quan với nhau Khi điểm có S= 0 và V= 1 là điểm màu trắng, những giá trị trung gian của V đối với S= 0 (trên đường thẳng qua tâm) là các màu xám Khi S=0 giá trị của H phụ thuộc được gọi bởi các quy ước không xác định, ngược lại khi S khác 0 giá trị của H sẽ là phụ thuộc
Như vậy một màu nào đó V= 1, S= 1 là giống như màu thuần khiết trong mỹ thuật được sử dụng như điểm khởi đầu trong các màu pha trên.Thêm màu trắng phù hợp để giảm S (không có sự thay đổi V) tạo nên sự thay đổi sắc thái của gam màu Sự chuyển màu được tạo ra bởi việc giữ S=1 và giảm V tạo nên sự thay đổi về sắc độ và tông màu tạo thành bởi việc thay đổi cả hai S và V
Trang 7PHẦN II: TỔNG QUAN VỀ CHƯƠNG TRÌNH II.1 Giới thiệu về ngôn ngữ lập trình VB.NET
Là công cụ phát triển trong Visual Studio Net, Visual Basic Net (VB Net) được
sử dụng để xây dựng các ứng dụng Windows, Web cũng như những ứng dụng trên thiết
bị cầm tay (Pocket PC, điện thoại di động) cho một số môi trường
VB.Net đã được thiết kế nhằm tăng tính hiệu quả trong công việc của người lập trình, nhất là khi cần truy xuất thông tin trong cơ sơ dữ liệu cũng như xây dựng ứng
dụng Web Đặc biệt, một khi làm quen với môi trường phát triển trong Visual
Studio Net, bạn có thể dùng cùng những công cụ để viết các chương trình trên C+ +, C# hay J#
II.1.1 Sơ lược về Visual Basic.NET
Visual Basic.NET (VB.NET) là ngôn ngữ lập trình khuynh hướng đối tượng (Object Oriented Programming Language) do Microsoft thiết kế lại từ con số không Visual Basic.NET (VB.NET) không kế thừa VB6 hay bổ sung, phát triển từ VB6 mà là một ngôn ngữ lập trình hoàn toàn mới trên nền Microsoft ’s NET Framework Do đó,
nó cũng không phải là VB phiên bản 7 Thật sự, đây là ngôn ngữ lập trình mới và rất lợi hại, không những lập nền tảng vững chắc theo kiểu mẫu đối tượng như các ngôn ngữ lập trình hùng mạnh khác đã vang danh C++, Java mà còn dễ học, dễ phát triển và còn tạo mọi cơ hội hoàn hảo để giúp ta giải đáp những vấn đề khúc mắc khi lập trình
Hơn nữa, dù không khó khăn gì khi cần tham khảo, học hỏi hay đào sâu những gì xảy ra bên trong … hậu trường OS, Visual Basic.NET (VB.NET) giúp ta đối phó với các phức tạp khi lập trình trên nền Windows và do đó, ta chỉ tập trung công sức vào các vấn đề liên quan đến dự án, công việc hay doanh nghiệp mà thôi
II.1.2 NET Framework
Đối với Visual Basic.NET (VB.NET), tất cả mọi thứ đều thay đổi tận gốc rễ Một trong những thành phần quan trọng của NET là NET Framework Đây là nền tảng cho mọi công cụ phát triển các ứng dụng (application).NET NET Framework bao gồm:
• Môi trường vận hành nền (Base Runtime Environment)
• Bộ sưu tập nền các loại đối tượng (a set of foundation classes)
• Môi trường vận hành nền (Base Runtime Environment) hoạt động giống như hệ điều hành cung cấp các dịch vụ trung gian giữa ứng dụng (application) và các thành phần phức tạp của hệ thống Bộ sưu tập nền các loại đối tượng (a set of Nhóm thực hiện: Nhóm 1-L11CQCN12B Trang 7
Trang 8foundation classes) bao gồm 1 số lớn các công dụng đã soạn và kiểm tra trước, tỷ như: giao lưu với hệ thống tập tin (file system access) hay ngay cả các quy ước
về mạng (Internet protocols), … nhằm giảm thiểu gánh nặng lập trình cho các chuyên gia Tin Học Do đó, việc tìm hiểu NET Framework giúp ta lập trình dễ dàng hơn vì hầu như mọi công dụng đều đã được yểm trợ
Ta xem NET Framework như là một tầng công dụng trừu tượng cung cấp dịch vụ trên hệ điều hành (nhìn dưới khía cạnh cung cấp dịch vụ):
• User Applications
• NET Framework
• Hệ điều hành (OS)
• Device Drivers
• Harware Components (Cương liệu)
Để mọi ngôn ngữ lập trình sử dụng được các dịch vụ cung cấp bởi .NET Framework, Microsoft tạo ra 1 tiêu chuẩn chung cho ngôn ngữ lập trình gọi là Common Language Specifications (CLS) Tiêu chuẩn này giúp các chương trình biên dịch (compilers) làm việc hữu hiệu Microsoft sáng chế ra Visual Basic.NET (VB.NET), Visual C++.NET và C# (đọc là C Sharp) cho nền NET Framework và cũng không quên phổ biến rộng rãi CLS trong Công Nghệ Tin Học giúp các ngôn ngữ lập trình khác làm việc trong nền NET, tỷ như: COBOL.NET, Smalltalk.NET, …
Lưu ý ở đây, mặc dù Visual Basic.NET (VB.NET), Visual C++.NET hay C# khác nhau về syntax và các công dụng phụ thuộc nhưng tất cả đều biên dịch ra cùng 1 ngôn ngữ trung gian gọi là MSIL (Microsoft Intermediate Language) và do đó, không có ngôn ngữ lập trình NET nào hùng mạnh hơn ngôn ngữ lập trình NET nào Và việc chọn ngôn ngữ là tùy thuộc vào lập trình viên
II.2 Các tính năng của chương trình
II.2.1 Chuyển đổi ảnh màu sang ảnh xám
Public Function ExecuteRgb8( _ ByVal img As System.Drawing.Image)
As System.Drawing.Image
Dim result As Bitmap = New Bitmap(img)
Dim bmpData As BitmapData = result.LockBits( _
New Rectangle(0, 0, result.Width, result.Height), _
ImageLockMode.ReadWrite, img.PixelFormat) Dim pixelBytes As Integer =
_System.Drawing.Image.GetPixelFormatSize(img.PixelFormat) \ 8
'Get the address of the first line.
Dim ptr As IntPtr = bmpData.Scan0
Dim size As Integer = bmpData.Stride * result.Height
Dim pixels(size - 1) As Byte
Dim index As Integer
Trang 9Dim Y As Integer
Dim mulR As Double = _factorRed / 100
Dim mulG As Double = _factorGreen / 100
Dim mulB As Double = _factorBlue / 100
'Copy the RGB values into the array.
System.Runtime.InteropServices.Marshal.Copy(ptr, pixels, 0, size)
'Main loop.
For row As Integer = 0 To result.Height - 1
For col As Integer = 0 To result.Width - 1
index = (row * bmpData.Stride) + (col * pixelBytes)
Y = CInt (System.Math.Round( _
mulR * pixels(index + 2) + _
mulG * pixels(index + 1) + _
mulB * pixels(index + 0)))
If (Y > 255) Then Y = 255
'Save new values.
pixels(index + 2) = CByte (Y)
pixels(index + 1) = CByte (Y)
pixels(index + 0) = CByte (Y)
Next
Next
'Copy the RGB values back to the bitmap
System.Runtime.InteropServices.Marshal.Copy(pixels, 0, ptr, size)
'Unlock the bits.
result.UnlockBits(bmpData)
Return result
End Function
Dưới đây là hình ảnh ví dụ để minh họa
=>
Hình 2.1.Chuyển ảnh màu sang ảnh xám
II.2.2 Chuyển từ ảnh xám sang ảnh màu bằng mô hình màu HSI
Execute filter and return filtered image.
Public Overrides Function ExecuteFilter( ByVal img As
System.Drawing.Image) As System.Drawing.Image
Select Case img.PixelFormat
Case PixelFormat.Format16bppGrayScale
Return img
Case PixelFormat.Format24bppRgb, _
Nhóm thực hiện: Nhóm 1-L11CQCN12B Trang 9
Trang 10PixelFormat.Format32bppArgb,
PixelFormat.Format32bppRgb
Return ExecuteRgb8(img)
Case PixelFormat.Format48bppRgb
Return img
Case Else
Return img
End Select
End Function
Execute filter on (A)RGB image with 8 bits per color.
Private Function ExecuteRgb8( ByVal img As System.Drawing.Image)
As System.Drawing.Image
Const c1o60 As Double = 1 / 60
Const c1o255 As Double = 1 / 255
Dim result As Bitmap = New Bitmap(img)
result.SetResolution(img.HorizontalResolution,
img.VerticalResolution)
Dim bmpData As BitmapData = result.LockBits( _
New Rectangle(0, 0, result.Width,
result.Height), _
ImageLockMode.ReadWrite, img.PixelFormat) Dim pixelBytes As Integer = _
System.Drawing.Image.GetPixelFormatSize(img.PixelFormat) \ 8
'Get the address of the first line.
Dim ptr As IntPtr = bmpData.Scan0
Dim size As Integer = bmpData.Stride * result.Height
Dim pixels(size - 1) As Byte
Dim index As Integer
Dim R, G, B As Double
Dim H, S, L, H1 As Double
Dim min, max, dif, sum As Double
Dim f1, f2 As Double
Dim v1, v2, v3 As Double
Dim sat As Double = 127 * _saturation / 100
Dim lum As Double = 127 * _intensity / 100
'Copy the RGB values into the array.
System.Runtime.InteropServices.Marshal.Copy(ptr, pixels, 0, size)
'Main loop.
For row As Integer = 0 To result.Height - 1
For col As Integer = 0 To result.Width - 1
index = (row * bmpData.Stride) + (col * pixelBytes)
R = pixels(index + 2)
G = pixels(index + 1)
B = pixels(index + 0)
'Conversion to HSL space.
min = R
If (G < min) Then min = G
If (B < min) Then min = B
max = R : f1 = 0.0 : f2 = G - B
If (G > max) Then
max = G : f1 = 120.0 : f2 = B - R
End If
If (B > max) Then
max = B : f1 = 240.0 : f2 = R - G
End If
Trang 11dif = max - min
sum = max + min
L = 0.5 * sum
If (dif = 0) Then
H = 0.0 : S = 0.0
Else
If (L < 127.5) Then
S = 255.0 * dif / sum
Else
S = 255.0 * dif / (510.0 - sum)
End If
H = (f1 + 60.0 * f2 / dif)
If H < 0.0 Then H += 360.0
If H >= 360.0 Then H -= 360.0
End If
'Apply transformation.
H = H + _hue
If H >= 360.0 Then H = H - 360.0
S = S + sat
If S < 0.0 Then S = 0.0
If S > 255.0 Then S = 255.0
L = L + lum
If L < 0.0 Then L = 0.0
If L > 255.0 Then L = 255.0
'Conversion back to RGB space.
If (S = 0) Then
R = L : G = L : B = L
Else
If (L < 127.5) Then
v2 = c1o255 * L * (255 + S)
Else
v2 = L + S - c1o255 * S * L
End If
v1 = 2 * L - v2
v3 = v2 - v1
H1 = H + 120.0
If (H1 >= 360.0) Then H1 -= 360.0
If (H1 < 60.0) Then
R = v1 + v3 * H1 * c1o60
ElseIf (H1 < 180.0) Then
R = v2
ElseIf (H1 < 240.0) Then
R = v1 + v3 * (4 - H1 * c1o60)
Else
R = v1
End If
H1 = H
If (H1 < 60.0) Then
G = v1 + v3 * H1 * c1o60
ElseIf (H1 < 180.0) Then
G = v2
ElseIf (H1 < 240.0) Then
G = v1 + v3 * (4 - H1 * c1o60)
Else
G = v1
End If
H1 = H - 120.0
Nhóm thực hiện: Nhóm 1-L11CQCN12BTrang 11