Bài trước: Bài 2: THU NHẬN ẢNH
XỬ LÝ VÀ NÂNG CAO CHẤT LƯỢNG ẢNH
Cải thiện ảnh sử dụng các toán tử điểm
Các phép toán không phụ thuộc không gian là các phép toán không phục
thuộc vị trí của điểm ảnh.
Ví dụ: Phép tăng giảm độ sáng, phép thống
kê tần suất, biến đổi tần suất v.v..
Một trong những khái niệm quan trọng trong xử lý ảnh là biểu đồ tần suất (Histogram)
Biểu đồ tần suất
Biểu đồ tần suất mức xám g của ảnh I là số điểm ảnh có
giá trị g của ảnh I. Ký hiệu là h(g).
Ví dụ:
Tách ngưỡng
Giả sử ta có ảnh I ~ kích thước m ´ n, hai số Min, Max và ngưỡng q
khi đó: Kỹ thuật tách ngưỡng được thể hiện
for (i = 0; i < m; i + +)
for (j = 0; j
< n; j + +)
I [i,
j] = I [i,
j] > = q? Max : Min;
|
* Ứng dụng:
Nếu Min = 0, Max = 1 kỹ thuật chuyển ảnh thành ảnh đen trắng
được ứng dụng khi quét và nhận dạng văn bản có thể xảy ra sai sót nền thành ảnh
hoặc ảnh thành nền dẫn đến ảnh bị đứt nét hoặc dính.
Bó cụm
Kỹ thuật nhằm giảm bớt số mức xám của ảnh bằng cách nhóm lại
số mức xám gần nhau thành 1 nhóm
Nếu chỉ có 2 nhóm thì chính là kỹ thuật tách ngưỡng. Thông
thường có nhiều nhóm với kích thước khác nhau.
Để tổng quát khi biến đổi người ta sẽ lấy cùng 1 kích thước bunch_size
![]() |
Bó cụm ảnh |
I [i,j] =[ I [i,j]/ bunch _size ]* bunch_size "(i,j)
Ví dụ: Bó cụm ảnh sau với bunch_size= 3
|
|
Ả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
Ví dụ: Cân bằng ảnh
sau với new_level= 4
![]() |
Ma trận ảnh |
Lần lượt tính h(g), t(g) và f(g).
![]() |
Kết quả sau cân bằng Histogram của ảnh I |
Chú ý: Ảnh sau khi thực hiện cân bằng chưa chắc đã là cân bằng
"lý tưởng"
Kỹ thuật tách ngưỡng tự động
Ngưỡng q trong kỹ
thuật tách ngưỡng thường được cho bởi người sử dụng. Kỹ thuật tách ngưỡng tự động
nhằm tìm ra ngưỡng q một cách tự động dựa
vào histogram theo nguyên lý trong vật lý là vật thể tách làm 2 phần nếu tổng độ
lệnh trong từng phần là tối thiểu.
Giả sử, ta có ảnh I
~ kích thước m ´ n
G ~ là số mức xám của ảnh kể cả khuyết thiếu t(g) ~ số điểm ảnh
có mức xám £ g
Ví dụ: Tìm ngưỡng tự động của ảnh sau:
0
|
1
|
2
|
3
|
4
|
5
|
|
0
|
0
|
1
|
2
|
3
|
4
|
|
I =
|
0
|
0
|
0
|
1
|
2
|
3
|
0
|
0
|
0
|
0
|
1
|
2
|
|
0
|
0
|
0
|
0
|
0
|
1
|
Biến đổi cấp xám tổng thể
Nếu biết ảnh và hàm biến đổi thì ta có thể tính được ảnh kết
quả và do đó ta sẽ có được histogram của ảnh biến đổi. Nhưng thực tế nhiều khi
ta chỉ biết histogram của ảnh gốc và hàm biến đổi, câu hỏi đặt ra là liệu ta có
thể có được histogram của ảnh biến đổi. Nếu có như vậy ta có thể hiệu chỉnh hàm
biến đổi để thu được ảnh kết quả có
phân bố histogram
như mong muốn.
Bài toán đặt ra là biết histogram của ảnh, biết hàm biến đổi
hãy vẽ histogram của ảnh mới.
g
|
1
|
2
|
3
|
4
|
h(g)
|
4
|
2
|
1
|
2
|
Bước 1: Vẽ Histogram của ảnh cũ
![]() |
Histogram của ảnh cũ |
Bước 2: Vẽ đồ thị hàm f(g)
![]() |
Đồ thị hàm f(g) |
Bước 3: Vẽ Histogram của ảnh mới
|
Histogram của ảnh mới thua được bằng cách chồng hình và tính
giá trị theo các q (= f(g)) theo công thức tính trên. Kết quả cuối thu được sau
phép quay góc 90 thuận chiều kim đồng hồ.
Cải thiện ảnh sử dụng các toán tử không gian
Phép cuộn và mẫu
Giả sử ta có ảnh I kích thước M ´ N, mẫu T có kích thước m ´
n khi đó, ảnh I cuộn theo mẫu T được xác định bởi công thức.
Ví dụ:
![]() |
Công thức cuộn mẫu với mẫu T |
Ví dụ cuộn ảnh I sau đây theo mẫu T
![]() |
Ảnh I và mẫu T |
Áp dụng công thức (3.1) , ta có:
Và được kết quả:
![]() |
Kết quả tính theo công thức cuộn mẫu (3.1) |
Tương tự, tính theo công thức cuộn mẫu (3.2)
![]() |
Kết quả tính theo công thức cuộn mẫu (3.2) |
Cuộn mẫu T, code bằng C#
public Image PhepCuon(Image imageInput, int
Option)
{
//Option=0,1,2 tuong duong voi mau T,T1,T2
switch
(Option)
{
case 0:
//Nap anh vao bitmap
BitmapData bmData =
imageRoot.LockBits(new Rectangle(0, 0, imageRoot.Width,
imageRoot.Height), ImageLockMode.ReadWrite, imageRoot.PixelFormat);
int stride = bmData.Stride;
System.IntPtr Scan0 = bmData.Scan0;
unsafe
{
byte* p = (byte*)(void*)Scan0;
int nOffset = stride - imageRoot.Width * 3;
byte red, green, blue;
for (int y = 0; y < imageRoot.Height-1; y++)
{
for (int x = 0; x < imageRoot.Width; x++)
{
blue = p[0];
green = p[1];
red =
p[2];
byte* pi = p ;
//pi la dong tiep theo cua ma tran
pi += nOffset;
p[0] = (byte)(p[0] + pi[3]);
//if (p[0]>255)
//{
//
p[0] = 255;
//}
p[1] = (byte)(p[1] + pi[4]);
//if (p[1]>255)
//{
//
p[1] = 255;
//}
p[2] = (byte)(p[2]+pi[5]);
//if (p[2]>255)
//{
//
p[2] = 255;
//}
p += 3;
}
//p += imageRoot.Width;
p += nOffset;
}
}
imageRoot.UnlockBits(bmData);
return imageRoot;
}}
|
![]() |
Ảnh cuộn theo mẫu T sau khi chuyển sang ảnh Xám |
Một số mẫu thông dụng
1
|
1
|
1
|
|
T1 =
|
1
|
1
|
1
|
1
|
1
|
1
|
~ Dùng để khử nhiễu -> Các điểm có tần số cao
1
|
2
|
4
|
5
|
8
|
7
|
2
|
31
|
1
|
4
|
2
|
2
|
I = 4
|
5
|
5
|
8
|
8
|
2
|
1
|
2
|
1
|
1
|
4
|
4
|
7
|
2
|
2
|
1
|
5
|
2
|
55
|
65
|
45
|
46
|
*
|
*
|
52
|
58
|
34
|
35
|
*
|
*
|
I Ä T1 = 29
|
27
|
35
|
35
|
*
|
*
|
*
|
*
|
*
|
*
|
*
|
*
|
*
|
*
|
*
|
*
|
*
|
*
|
Áp dụng kỹ thuật cộng hằng số với c = -27, ta có:
28
|
38
|
18
|
19
|
* *
|
25
|
31
|
7
|
8
|
* *
|
Ikq = 2
|
0
|
8
|
8
|
* *
|
*
|
*
|
*
|
*
|
* *
|
*
|
*
|
*
|
*
|
* *
|


T2 = -1 4 -1
0 -1 0
~ Dùng để phát hiện các điểm có tần số cao.
Ví dụ 2:
114
|
-40
|
0
|
-14 * *
|
-22
|
5
|
14
|
16 * *
|
I Ä T2 =-1 -6
|
-10
|
-2
|
* *
|
*
|
*
|
*
|
* * *
|
*
|
*
|
*
|
* * *
|
Lọc trung vị
* Định nghĩa (Trung vị)
Cho dãy x1; x2...; xn đơn
điệu tăng (giảm). Khi đó trung vị của dãy ký hiệu là Med({xn}),
được định nghĩa:
Kỹ thuật lọc trung
vị:
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:
Ví dụ:
Giá trị 16, sau phép lọc có giá trị 2, các giá trị còn lại
không thay đổi giá trị.
Lọc trung bình
Định nghĩa (Trung bình)
Cho dãy x1, x2…, xn khi đó
trung bình của dãy ký hiệu AV({xn}) được
định nghĩa:
Mệnh đề
Kỹ thuật lọc trung
bình
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:
+ Bước 1: Tìm trung bình {I(q)| q Î
W(P)} ®
AV(P)
+ Bước 2: Gán giá trị
Ví dụ:
|
|||||
1
|
2
|
3
|
2
|
||
4
|
16
|
2
|
1
|
||
I =
|
4
|
2
|
1
|
1
|
|
2
|
1
|
2
|
1
|
||
W(3 ´ 3); q = 2
|
|||||
1
|
2
|
3
|
2
|
||
4
|
3
|
2
|
1
|
||
Ikq =
|
4
|
2
|
1
|
1
|
|
2
|
1
|
2
|
1
|
Giá trị 16 sau phép lọc trung bình có giá trị 3, các giá trị
còn lại giữ nguyên sau phép lọc.
Lọc trung bình theo k giá trị gần nhất
Giả sử ta có ảnh I, điểm ảnh P, cửa sổ W(P), ngưỡng q và số k. Khi đó, lọc trung bình theo k giá
trị gần nhất bao gồm các bước sau:
Ví dụ, cho ảnh I và các thông số như dưới, ta sẽ có ảnh kết quả như sau:
Nhận xét:
Nếu k lớn hơn kích thước cửa sổ thì kỹ thuật chính là kỹ thuật
lọc trung bình
Nếu k= 1 thì ảnh kết quả không thay đổi Þ Chất lượng của kỹ
thuật phụ thuộc vào số phân tử lựa chọn k.
Khôi phục ảnh
Nội dung khôi phục ảnh sẽ bàn tới trong bài viết khác.
Bài tập cuối bài.
- Viết chương trình đọc vào 1 ảnh và tăng, giảm độ sáng của ảnh.
- Viết chương trình đọc vào 1 ảnh và tách ngưỡng ảnh đó, sau đó hiển thị ảnh đã tách ngưỡng.
- Viết chương trình đọc vào 1 ảnh và bó cụm ảnh đó, sau đó hiển thị ảnh đã bó cụm.
- Viết chương trình đọc vào 1 ảnh và cân bằng histogram của ảnh đó, sau đó hiển thị ảnh đã cân bằng.
- Viết chương trình đọc vào 1 ảnh và tách ngưỡng tự động cho ảnh đó, hiển thị ảnh sau khi tách ngưỡng tự động.
- Viết chương trình đọc vào 1 ảnh và biến đổi mức xám tổng thể của ảnh đó, sau đó hiển thị ảnh sau khi đã biến đổi.
- Viết chương trình đọc vào 1 ảnh và cuộn mẫu theo mẫu (T1, T2…)
- Viết chương trình đọc vào 1 ảnh, lọc trung bình ảnh đó, sau đó hiển thị ảnh đã lọc.
- Viết chương trình đọc vào 1 ảnh, lọc trung vị ảnh đó, sau đó hiển thị ảnh đã lọc.
- Viết chương trình đọc vào 1 ảnh, lọc trung bình theo k giá trị gần nhất cho ảnh đó, sau đó hiển thị ảnh đã lọc.