Chương trình PAINT-A có khả năng làm việc với các ảnh đen trắng và ảnh màu, với các khuôn dạng ảnh : BMP, GIF, JPG . Có khả năng đọc ảnh và xử lý nhưng chưa có khả năng ghi lại.
Các chức năng của chương trình được mô tả trên các hình vẽ sau :
a. Thanh Tool box có các chức năng
- Khoanh một vùng hình chữ nhật trong ảnh
- Khoanh một vùng bao quanh một điểm với độ sai lệch màu trong ô Tolerance
- Tô màu một vùng, vùng được xác định dựa vào giá trị trong Tolerance
- Bút chì
- Bóp méo ảnh
- Tẩy
- Vẽ đường thẳng
- Chọn màu trong ảnh
- Xác định toàn bộ biên của ảnh dựa vào giá trị trong Tolerance
b. Công cụ chọn màu cho phép chon một màu bất kì từ sự phối hợp của 3 màu cơ bản Red Green Blue
c. Đồ thị biến đổi mức xám LUT
d. Lọc với mặt nạ lọc là ma trận 3 x 3 có thể nhập vào
7 trang |
Chia sẻ: oanh_nt | Lượt xem: 1411 | Lượt tải: 0
Nội dung tài liệu Chương trình xử lý ảnh PAINT-A, để tải tài liệu về máy bạn click vào nút DOWNLOAD ở trên
Chương trình xử lý ảnh PAINT-A
I. GIỚI THIỆU VỀ CHƯƠNG TRÌNH XỬ LÝ ẢNH PAINT-A
Đồ án môn học lập trình JAVA được thực hiện dưới dạng một chương trình ứng dụng xử lý ảnh : PAINT-A. Chương trình PAINT-A được viết trên ngôn ngữ JAVA dưới dạng một JAVA APPLET.
Giao diện chương trình có dạng như sau :
1. Công dụng và các chức năng của chương trình
Chương trình PAINT-A có khả năng làm việc với các ảnh đen trắng và ảnh màu, với các khuôn dạng ảnh : BMP, GIF, JPG ... Có khả năng đọc ảnh và xử lý nhưng chưa có khả năng ghi lại.
Các chức năng của chương trình được mô tả trên các hình vẽ sau :
a. Thanh Tool box có các chức năng
- Khoanh một vùng hình chữ nhật trong ảnh
- Khoanh một vùng bao quanh một điểm với độ sai lệch màu trong ô Tolerance
- Tô màu một vùng, vùng được xác định dựa vào giá trị trong Tolerance
- Bút chì
- Bóp méo ảnh
- Tẩy
- Vẽ đường thẳng
- Chọn màu trong ảnh
- Xác định toàn bộ biên của ảnh dựa vào giá trị trong Tolerance
b. Công cụ chọn màu cho phép chon một màu bất kì từ sự phối hợp của 3 màu cơ bản Red Green Blue
c. Đồ thị biến đổi mức xám LUT
d. Lọc với mặt nạ lọc là ma trận 3 x 3 có thể nhập vào
2. Một số ví dụ xử lý ảnh với PAINT-A
a. Khoanh vùng với độ sai lệch trong Tolerance
Giả sử Tolerance = 32 khi click chuột vào điểm có tọa độ (178,41) trong ảnh đường biên bao là đường nét đứt sẽ hiện lên như sau
b. Dùng công cụ làm méo ảnh để xử lý ảnh
Sau khi chọn công cụ này ta có thể dùng chuột kéo để làm co, dãn, làm méo ảnh. Ảnh ở trang 1 sau khi bị làm méo có thể có dạng sau dạng sau
c. Dùng công cụ EDGE để hiện toàn bộ biên ảnh
Biên ảnh là các đường nét đứt. Ảnh ở trang 1 có biên như sau khi giá trị Tolerance = 40
d. Sử dụng bộ lọc
Với mặt nạ lọc là ma trận sau
-2 -1 0
-1 0 1
0 1 2
Ảnh ở trang 3 sau khi lọc sẽ có dạng
Trên đây là phần giới thiệu về chương trình. Tiếp theo sẽ giới thiệu một số thuật toán xử lý ảnh được xử dụng trong chương trình.
II. CÁC THUẬT TOÁN XỬ LÝ ẢNH ĐƯỢC SỬ DỤNG TRONG CHƯƠNG TRÌNH
Một số công cụ có thuật toán không liên quan nhiều đến nội dung môn học. Do đó trong phần này chỉ giới thiệu các thuật toán cho các công cụ sau :
- Xác định đường bao từ một điểm với độ sai lệch màu trong Tolerance
- Xác định toàn bộ biên trong ảnh với ngưỡng biên trong Tolerance
- Đồ thị biến đổi mức xám LUT
- Bộ lọc
( Các thuật toán khác được sử dụng trong chương trình có thể được trình bày trong khi bảo vệ chương trình )
1. Xác định đường bao từ một điểm với độ sai lệch màu trong Tolerance
Với ảnh đen trắng chỉ có 1 tập mức xám với 256 mức xám. Đối với ảnh màu R G B ta coi mỗi màu cơ bản R hoặc G hoặc B là một tập mức xám gồm 256 mức. 3 tập mức xám R G B được xử lý độc lập nhau.
Vậy số màu của ảnh R G B là :
256 = 16.777.216 màu 16 triệu màu.
Để đơn giản ta chỉ xét với 1 tập mức xám.
Khi nhấn chuột vào một điểm giả sử là (x,y). Từ điểm (x,y) ta tiến hành loang ra 4 hướng : trái, phải, trên, dưới. Khi loang tới điểm (x,y) ta làm công việc sau :
1. Kiểm tra hướng hiện thời là :
+ trái : d = abs(a[x-1,y] - a[x,y])
+ phải : d = abs(a[x+1,y] - a[x,y])
+ trên : d = abs(a[x,y-1] - a[x,y])
+ dưới : d = abs(a[x,y+1] - a[x,y])
( a là ma trận ảnh )
2. So sánh d với giá trị Tolerance
+ nếu d < Tolerance ta tiếp tục thực hiện quá trình loang với hướng hiện thời
+ ngược lại với d >= Tolerance thì (x,y) chính là một điểm trên đường bao. Ta lưu lại giá trị này. Kết thúc loang với hướng đang xét và chuyển sang hướng tiếp theo.
Quá trình sẽ kết thúc khi không còn khả năng tiếp tục loang. Tức đã xác định được đường bao.
Thực chất đây chính là quá trình tính đạo hàm bậc nhất và so sánh giá trị này với Tolerance. Nếu giá trị này lớn hơn thì đây chính là 1 điểm trên biên.
2. Xác định toàn bộ biên ảnh
Phần này sử dụng phương pháp Gradient để dò biên. Phương pháp này tính đạo hàm bậc nhất tại tất cả các điểm trên ảnh theo 2 hướng nằm ngang và thẳng đứng. Giả sử tại điểm (x,y) ký hiệu đạo hàm theo hướng x là x', đạo hàm theo hướng y là y'. Ta có :
x' = a[x+1,y] - a[x,y]
y' = a[x,y+1] - a[x,y]
Tiếp theo tính f' =
Ta so sánh f' với giá trị Tolerance nếu lớn hơn thì đây chính là biên ảnh.
3. Đồ thị biến đổi mức xám LUT
Một tập mức xám bao gồm 256 mức xám có giá trị từ 0 đến 255. Ta sẽ dùng một đồ thị hay ánh xạ để biến đổi tập mức xám này thành một tập mức xám khác, sau đó hiển thị tập mức xám mới. Đồ thị hay ánh xạ này được gọi là đồ thị biến đổi mức xám LUT.
Đồ thị LUT được sử dụng trong chương trình chỉ đơn giản là một đoạn thẳng mà ta có thể thay đổi các đầu nút của nó (nhiều chương trình khác còn sử dụng cả đường cong).
Đồ thị được xây dựng trên hệ trục tọa độ 2 chiều, 2 trục vuông góc nhau. Mỗi trục chia 256 vạch (từ 0 đến 255), mỗi vạch tương ứng một mức xám. Trục nằm ngang là tập các mức xám ban đầu con trục thẳng đứng là các mức xám được ánh xạ.
Với mỗi giá trị mức xám ban đầu sau khi ánh xạ qua đồ thị sẽ được một giá trị mức xám mới tương ứng.
Với lý thuyết đẵ trình bày như trên việc cài đặt thuật toán là hoàn toàn đơn giản.
4. Bộ lọc
Chương trình xử dụng bộ lọc có kích thước 3 x 3. Quá trình lọc chính là việc tính chập giữa ma trận điểm ảnh với bộ lọc.
Thuật toán thể hiện trong đoạn chương trình sau :
A là ma trận điểm ảnh ban đầu kích thước m n
B là ma trận điểm ảnh sau khi lọc
M là mặt nạ có kích thước 3 3
for ( i = 1; i <= m; i++ )
for ( j = 1; j <= n; j++ )
{
B[i,j] = 0;
for ( k = 1; k <= 3; k++)
for ( l = 1; l <= 3; l++)
B[i,j] = B[i,j] + A[i+k-2,j+l-2] * M[k,l]
}
coi A[i,0] = A[0,j] = A[i,n+1] = A[m+1,j] = 0
với i = 1..m
j = 1..n
Đoạn chương trình trên nhân chập ảnh A với mặt nạ M và kết quả là B.
Trên đây là một số thuật toán cơ bản dùng trong chương trình. Tất nhiên khi lập trình cụ thể các thuật toán này có thể có những biến đổi nhỏ cho phù hợp với cách khai báo trong chương trình và với ngôn ngữ lập trình.
III. CÁC THỦ TỤC CHÍNH XÂY DỰNG TRONG JAVA
Chương trình được xây dựng dưới dạng một APPLET gồm 1 lớp chính là painta mở rộng lớp Applet và implements Runnable, MouseListener, MouseMotionListener, ActionListener :
public class painta extends Applet implements Runnable, MouseListener, MouseMotionListener, ActionListener
{
}
Các thủ tục sẽ được trình bày rõ hơn khi bảo vệ.
Các file đính kèm theo tài liệu này:
- Xulyanh-7.doc