XỬ LÝ ẢNH TRONG
MIỀN KHÔNG GIAN
NGÔ QUỐC VIỆT
TPHCM-2012
Các xử lý logic và số học trên ảnh
1.
Các bộ lọc không gian cơ bản
Các bộ lọc không gian làm trơn ảnh
2.
3.
4.
5.
Các thao tác logic
Trừ ảnh , trung bình ảnh
Bộ lọc tuyến tính làm trơn
Các bộ lọc Order-Statistics
Các bộ lọc không gian làm nét ảnh
Các giải thuật khử nhiễu
Bài giảng Xử lý ảnh-TS. Ngô Quốc Việt
2
Thực hiện các phép logic giữa hai hoặc nhiều ảnh.
Cụ thể
NOT
OR
AND
XOR
SUB
c = a
c=a+b
c=ab
c = a b = a (b) + (a b)
c = a \ b = a – b = a (b)
Chỉ cần 3 toán tử: AND, OR, NOT
Mỗi thao tác thực hiện trên từng điểm ảnh
Bài giảng Xử lý ảnh-TS. Ngô Quốc Việt
3
Gốc
Mặt nạ
AND
Gốc
Mặt nạ
Bài giảng Xử lý ảnh-TS. Ngô Quốc Việt
OR
4
Sử dụng các thao tác logic trên ma trận của OpenCV
int _tmain(int argc, _TCHAR* argv[])
{
IplImage *img1 = cvLoadImage(“..\\..\\images\\building.jpg");
IplImage *img2 = cvLoadImage(".\\..\\images\\black.jpg");
IplImage *img3, iplhdr;
CvMat * mat1, * mat2, mat3, mathdr1, mathdr2;
mat1 = cvGetMat(img1, &mathdr1);
mat2 = cvGetMat(img2, &mathdr2);
mat3 = *mat1;
cvAnd(mat1, mat2, &mat3);
//cvOr; cvNot; cvAdd; cvSub
img3 = cvGetImage(&mat3, &iplhdr);
cvNamedWindow("Logics", CV_WINDOW_AUTOSIZE);
cvShowImage("Logics", img3);
cvWaitKey(0);
cvDestroyWindow("Logics:");
cvReleaseImage(&img1);
cvReleaseImage(&img2);
return 0;
}
Bài giảng Xử lý ảnh-TS. Ngô Quốc Việt
5
Thực hiện trên các pixel của ảnh xám
Thao tác
Định nghĩa
Kiểu dữ liệu Output
ADD
c=a+b
Nguyên
SUB
c=a–b
Nguyên
MUL
c=a*b
Nguyên hoặc thực
DIV
c=a/b
Thực
LOG
c = log (a)
Thực
EXP
c = exp(a)
Thực
SQRT
c = sqrt(a)
Thực
TRIG
c = sin/cos/tan(a)
Thực
INVERT
c = (2b -1 ) - a
Nguyên
Thường sử dụng toán tử SUB nhằm tách phần nổi
và nền
Bài giảng Xử lý ảnh-TS. Ngô Quốc Việt
6
Nhằm loại bớt phần “nền” ra khỏi ảnh cần phân tích
(y khoa, thiên văn, …)
Nguồn: R. F. Gonzalez & R.Wood
Bài giảng Xử lý ảnh-TS. Ngô Quốc Việt
7
Có thể ứng dụng để làm giảm nhiễu trong ảnh. Bằng
cách lấy trung bình pixel từ các ảnh nhiễu (ngẫu
nhiên, nhiệt, v.v) để tạo ra pixel cùng tọa độ trong
ảnh output.
Cho K ảnh nhiễu khác nhau, ảnh trung bình được
Hàm noise
xác định bởi
gi ( x, y) f ( x, y) ni ( x, y)
1
g ( x, y )
K
K
g ( x, y )
i 1
i
Ảnh được làm rõ hơn bằng tạo ra K ảnh nhiễu
(ngẫu nhiên, muối tiêu – thảo luận sau), và lấy
trung bình các ảnh này.
Bài giảng Xử lý ảnh-TS. Ngô Quốc Việt
8
Trung bình của ảnh nhiễu tiến gần đến ảnh tốt f(x,y).
E( g ( x, y)) f ( x, y)
Phương sai
g ( x, y )
1
gi ( x, y )
K
K càng tăng nhiễu sẽ giảm
Dùng các hàm
rand(): (rand()/(float)0x7fff)-0.5;
cvGetSize: lấy kích thước ảnh
cvCloneImage: tạo ảnh mới
cvGetReal2D: get pixel value
cvSetReal2D: set pixel value
Sinh viên hãy viết chương trình giảm nhiễu bằng kỹ
thuật “trung bình ảnh”
Bài giảng Xử lý ảnh-TS. Ngô Quốc Việt
9
K = 8 noisy images
Ảnh bị nhiễu
K = 16 noisy images
Gần giống với ảnh gốc
K = 64 noisy images
Bài giảng Xử lý ảnh-TS. Ngô Quốc Việt
K = 128 noisy images
10
Dựa trên cáp phép toán về tích chập (convolution) trên
lân cận của từng pixel.
Phép toán chập là
trung tâm của hầu
hết xử lý trên ảnh
Lân cận vuông của một pixel sẽ được thực hiện chập với
subimage cùng kích thước để tạo ra giá trị mới của pixel
đang xét.
Subimage gọi là: filter (bộ lọc), mask (mặt nạ), kernel
(nhân chập), template (mẫu chập), hay window (cửa
sổ chập).
Bài giảng Xử lý ảnh-TS. Ngô Quốc Việt
11
Filter/Mask được di
chuyển từng pixel
trên ảnh và thực
hiện chập để tạo ra
giá trị điểm ảnh mới
Hình ảnh thể hiện
cơ chế lọc
Bài giảng Xử lý ảnh-TS. Ngô Quốc Việt
12
Liên tục: Tích chập của 2 hàm f(x) và h(x) được định
nghĩa bởi:
g ( x ) f ( x ) h( x )
f (m)h( x m)dm
Rời rạc:
g (n) f (n) h(n) k f (k )h(n k )
Bài giảng Xử lý ảnh-TS. Ngô Quốc Việt
13
Liên tục: Tích chập của 2 hàm f(x) và h(x) hai chiều
được định nghĩa bởi:
g ( x, y ) f ( x, y ) h ( x, y )
f (m, n)h( x m, y n)dmdn
Rời rạc
g (m, n)
f (m, n) h(m, n)
f ( k , l ) h( m k , n l )
l k
Bài giảng Xử lý ảnh-TS. Ngô Quốc Việt
14
Kích thước kernel mxn, ảnh kích thước MxN, tích
chập được định nghĩa bởi
g ( x, y )
a
b
f ( x k , y l ) h( k , l )
l a k b
a (m 1) / 2
b (n 1) / 2
Thông thường, nhân chập có dạng vuông (m=n),
với m và n là số lẻ.
Chú ý: tâm của nhân chập thường ở giữa cửa cổ
chập.
Tại một vị trí bất kỳ, pixel đích sẽ bằng tổng các
tích giữa pixel nguồn với các phần tử tương ứng
trong nhân
Bài giảng Xử lý ảnh-TS. Ngô Quốc Việt
15
Tích chập giữa f(M1xN1) và nhân h(M2xN2) có thể tạo
ra các ma trận có kích thước như sau, tùy thuộc vào
kiểu chập.
Giữ nguyên kích thước: M1xN1 (same convolution)
Tăng kích thước : (M1+M2-1)x(N1+N2-1) (full
convolution)
Giảm kích thước: (M1-M2+1)x(N1-N2+1) (valid
convolution)
Bài giảng Xử lý ảnh-TS. Ngô Quốc Việt
16
Nhân chập h(j,k) là tách được nếu
h( j, k ) hrow(k ) hcol ( j )
Khi đó, phép lọc có thể thực hiện theo cách sau
K 1
c(m, n) hrow(k )a(m j, n k )hcol ( j )
j 0 k 0
J 1
Độ phức tạp khi tính toán trên mỗi điểm ảnh từ
O(J*K) giảm xuống O(J+K).
Bài giảng Xử lý ảnh-TS. Ngô Quốc Việt
17
Giữ nguyên kích thước
Bài giảng Xử lý ảnh-TS. Ngô Quốc Việt
18
Tăng kích thước
Tâm ma trận chập
nằm ngoài ảnh
Giảm kích thước
Ma trận chập nằm
gọn trong ảnh
Bài giảng Xử lý ảnh-TS. Ngô Quốc Việt
19
for(int y = 0; y < height; ++y)
{
for(int x = 0; x < width; ++x)
{
sum = 0;
for(int i = 0; i < kHeight-1; i++) {
for(int j = 0; j < kWidth-1; j++) {
if((y+(i-kMiddleHeight)) < 0 || (y+(i-kMiddleHeight)) >= height
|| (x+(j-kMiddleWidth)) < 0 || (x+(j-kMiddleWidth)) >= width) {
result = 0;
}
else {
result = input[y+(i-kMiddleHeight), x+(j-kMiddleWidth)] * kernel[I, j];
}
sum += result;
}
}
result[y, x] = sum;
}
}
Bài giảng Xử lý ảnh-TS. Ngô Quốc Việt
20
Sử dụng các nhân chập với các hệ số thay đổi có thể
tạo ra các hiệu ứng khác nhau trên ảnh output. Một
số hiệu ứng của lọc không gian
Làm trơn hoặc mờ ảnh: giảm nhiễu, giảm chi tiết nhỏ.
Làm nét ảnh
Phát hiện biên (trình bày chi tiết trong bài giảng sau)
Các bộ lọc không gian thường có kích thước 3x3
hoặc 5x5. Một số trường hợp dùng ma trận 7x7
Ngoài ra có thể sử dụng các lọc phi tuyến (thảo luận
trong “Xla_BaiGiang04”)
Bài giảng Xử lý ảnh-TS. Ngô Quốc Việt
21
Sử dụng bộ lọc không gian tuyến tính để tính giá trị
pixel output là trung bình của các pixel trong nhân
chập.
Còn được gọi là bộ lọc trung bình hay lowpass filter.
Các bộ lọc “đều” có dạng chữ nhật hay tròn. Cụ thể
1
1
1
hrect ( j , k ) 1
25
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
0
1
1
hcirc ( j , k ) 1
21
1
0
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
0
1
1
1
0
Kết quả các cụm pixel nhỏ (nhỏ hơn kích thước nhân
chập) sẽ bị “hòa” vào các vùng pixel lớn hơn.
Bài giảng Xử lý ảnh-TS. Ngô Quốc Việt
22
Có thể dùng các bộ lọc biến thể khác để làm trơn
ảnh
1 2 1
1
h( j , k ) 2 4 2
16
1 2 1
1 1 1
1
hrect ( j , k ) 1 1 1
9
1 1 1
Mặt nạ thứ hai được gọi là lấy trung bình có trọng
số. Nghĩa là các pixel sẽ được nhân với các hệ số
khác nhau.
Với trung bình có trọng số, pixel output được xác
a
b
định bởi
w(s, t ) f ( x s, y t )
g ( x, y )
s at b
a
b
w(s, t )
s at b
Bài giảng Xử lý ảnh-TS. Ngô Quốc Việt
23
Một số bộ lọc làm trơn ảnh khác: tam giác, Gauss,
bộ lọc trên miền Fourier (thảo luận sau), các bộ lọc
phi tuyến (trung vị, Kuwahara)
Tam giác: là phép chập của hai bộ lọc đều đồng
nhất (đều chữ nhật hoặc đều tròn)
1
2
1
hrect ( j , k ) 3
81
2
1
2
4
6
4
2
3
6
9
6
3
2
4
6
4
2
1
2
3
2
1
0
0
1
hcirc ( j , k ) 1
25
0
0
Dạng chóp
Bài giảng Xử lý ảnh-TS. Ngô Quốc Việt
0
2
2
2
0
1
2
5
2
1
0
2
2
2
0
0
0
1
0
0
Dạng nón
24
Kết quả làm trơn ảnh với bộ lọc trung bình có kích
thước 3, 5, 9, 15, 35
Ảnh gốc
Bài giảng Xử lý ảnh-TS. Ngô Quốc Việt
25