XỬ LÝ ẢNH TRONG MIỀN KHÔNG GIAN
NGÔ QUỐC VIỆT TPHCM-2012
1. Các xử lý logic và số học trên ảnh
Các thao tác logic Trừ ảnh , trung bình ảnh 2. Các bộ lọc không gian cơ bản 3. Các bộ lọc không gian làm trơn ảnh
Bộ lọc tuyến tính làm trơn Các bộ lọc Order-Statistics
4. Các bộ lọc không gian làm nét ảnh 5. 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 = a b 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ạ
OR
Bài giảng Xử lý ảnh-TS. Ngô Quốc Việt 4
Sử dụng các thao tác logic trên ma trận của OpenCV
int _tmain(int argc, _TCHAR* argv[]) {
//cvOr; cvNot; cvAdd; cvSub
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); 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 Định nghĩa
Thao tác
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
Thực
c = sin/cos/tan(a)
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
Ả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).
Phương sai
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
K càng tăng nhiễu sẽ giảm
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
K = 16 noisy images
Gần giống với ảnh gốc
Ảnh bị nhiễu
K = 64 noisy images
K = 128 noisy images
Bài giảng Xử lý ảnh-TS. Ngô Quốc Việt 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
12 Bài giảng Xử lý ảnh-TS. Ngô Quốc Việt
Liên tục: Tích chập của 2 hàm f(x) và h(x) được định
nghĩa bởi:
Rời rạc:
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:
Rời rạc
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
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
(full
(M1+M2-1)x(N1+N2-1)
convolution)
Giảm kích thước:
(valid
(M1-M2+1)x(N1-N2+1)
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
Khi đó, phép lọc có thể thực hiện theo cách sau
Độ 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ể
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
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
định bởi
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)
Dạng chóp
Dạng nón
Bài giảng Xử lý ảnh-TS. Ngô Quốc Việt 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
Có nhiều cách để tạo bộ lọc Gauss (tham khảo tài
liệu [1] trang 96-100).
Bộ lọc Gauss là mờ/trơn ảnh
Bài giảng Xử lý ảnh-TS. Ngô Quốc Việt 26
#include "highgui.h" #include "cv.h" void main() {
IplImage* src = cvLoadImage("lena.jpg", 1); IplImage* dst = cvCreateImage(cvGetSize(src),
src->depth, src->nChannels); cvSmooth(src, dst, CV_BLUR, 3, 3); cvNamedWindow("src", 1); cvShowImage("src", src); cvNamedWindow("dst", 1); cvShowImage("dst", dst); cvReleaseImage(&src); cvReleaseImage(&dst); cvWaitKey(0);
}
Bài giảng Xử lý ảnh-TS. Ngô Quốc Việt 27
Bộ lọc trung vị
Giá trị điểm ảnh output trong nhân chập đang xét bằng giá trị độ sáng thứ (J*K)/2 trong phần ảnh đang được chập
Một biến thể: thay vì lọc trung vị, có thể lọc phần trăm. Nghĩa là thay vì lấy 50% giá trị sáng mà bằng p% (từ 0% - lọc cực tiểu - đến 100% - lọc cực đại)
Bộ lọc Kuwahara
Cho phép giữ lại các “cạnh” trên ảnh trong quá
trình làm trơn.
Bài giảng Xử lý ảnh-TS. Ngô Quốc Việt 28
, trung vị của dãy
Trung vị: cho dãy {x1, x2, …, xn}
được xác định bởi
Nhận xét:
min tại Med({xi}).
Bài giảng Xử lý ảnh-TS. Ngô Quốc Việt 29
Tìm trung vị trong phần ảnh đang xét (cửa sổ quét
qua)
Gán giá trị cho pixel “tâm”.
Ví dụ:
Bài giảng Xử lý ảnh-TS. Ngô Quốc Việt 30
các xếp Sắp cường độ sáng trong lân cận của p.
p
median được gán cho pixel trí p vị tại trong ảnh output.
131 133 133 136 140 143 147 152 154 157 160 162 163 164 165 171
Bài giảng Xử lý ảnh-TS. Ngô Quốc Việt 31
median
blurred
noisy
Bài giảng Xử lý ảnh-TS. Ngô Quốc Việt 32
Ảnh nhiễu
3x3-blur x 1
3x3-median x 1 Lọc trung vị cho kết quả khử nhiễu tốt hơn so với
các bộ lọc làm trơn ảnh
Lọc trung vị duy trì cạnh tốt hơn so với blurring
filter.
Bài giảng Xử lý ảnh-TS. Ngô Quốc Việt 33
Chia nhân chập thành các vùng con. Tính độ sáng
trung bình của mỗi vùng con.
Chọn độ sáng trung bình nào có phương sai nhỏ nhất làm độ sáng của pixel trong nhân chập lớn đang xét
Bài giảng Xử lý ảnh-TS. Ngô Quốc Việt 34
Giá
Bộ lọc Đều
Kiểu Miền Không gian Tuyến tính Vuông
Tách được Có
Đều Tam giác Tam giác
Không Có Không
Gauss
Có
Trung vị Kuwahara
Không gian Tuyến tính Tròn Không gian Tuyến tính Vuông Không gian Tuyến tính Tròn Không gian Tuyến tính Không gian Phi tuyến Không gian Phi tuyến
Vuông Không
Không Không
Bài giảng Xử lý ảnh-TS. Ngô Quốc Việt 35
Sinh viên sử dụng các hàm sau để thực hiện yêu cầu
làm trơn ảnh với các nhân chập khác nhau.
cvFilter2D: để thực hiện lọc ảnh (đổi nhân chập để làm
trơn ảnh)
cvSmooth: làm trơn ảnh với các nhân chập được định
nghĩa sẵn trong OpenCV)
Bài giảng Xử lý ảnh-TS. Ngô Quốc Việt 36

