Khử nhiễu là một bước trong việc cải tiến, nâng cao chất lượng ảnh. Kỹ thuật này giảm bớt tác động của nhiễu và có thể làm mờ các đường biên. Có nhiều loại nhiễu có nhiều bộ lọc thích hợp. Nạp ảnh vào chương trình. Đọc dữ liệu ảnh ra ma trận. Xử lý ma trận dữ liệu. Ghi dữ liệu đã xử lý vào ảnh mới.
Trang 1BÁO CÁO ĐỀ TÀI
MÔN XỬ LÝ ẢNH SỐ
Đề tài: Khử nhiễu ảnh sử dụng kỹ
thuật lọc thông thấp (low pass filtering) NHÓM 3:
1.Hồ Chí Sĩ
2.Huỳnh Quốc Sư
3.Lê Thị Thúy An
4.Vương Nữ Vi Linh
Trang 2Khử nhiễu ảnh
• Khử nhiễu là một bước trong việc cải tiến, nâng cao chất lượng ảnh
• Kỹ thuật này giảm bớt tác động của nhiễu và
có thể làm mờ các đường biên
• Có nhiều loại nhiễu có nhiều bộ lọc thích hợp
Trang 3Khử nhiễu ảnh với Photoshop
Trang 4Quy trình thực hiện
1 Nạp ảnh vào chương trình.
2 Đọc dữ liệu ảnh ra ma trận.
3 Xử lý ma trận dữ liệu.
4 Ghi dữ liệu đã xử lý vào ảnh mới.
Trang 5Nạp ảnh vào chương trình.
• Tạo đối tượng chứa file ảnh để xử lý
• Trong Java hỗ trợ đối tượng BufferedImage
(trong thư viện java.awt.image)
• Khai báo:
File f = new File(<tên file ảnh>);
BufferedImage anh = ImageIO.read(f);
Trang 6Đọc dữ liệu ảnh ra ma trận.
• Lớp BufferedImage gồm có lớp ColorModel
và lớp Raster.
• Lớp Raster chứa đựng thông tin về vị trí của
các pixel trong một ô chữ nhật của ảnh và các thao tác trên dữ liệu ảnh
• Lớp ColorModel hỗ trợ các thao tác liên quan
đến xử lý từng Pixel Để đơn giản, đối với ảnh
trắng đen, ta thay thế bằng lớp Pixel.
Trang 7Đọc dữ liệu ảnh ra ma trận
class Pixel
{
public Pixel(int r, int g, int b)
{ red = r; green = g; blue = b; }
public int getRed() { return red; }
public int getGreen() { return green; }
public int getBlue() { return blue; }
}
Trang 8Đọc dữ liệu ảnh ra ma trận
• Khai báo Raster:
Raster dulieu = BufferedImage.getRaster();
• Đọc dữ liệu vào ma trận sử dụng lớp Raster:
– phương thức getPixel(Width, Height,int []);
– lưu ý: khi đọc dữ liệu ra ma trận, cách xác định
chỉ số của pt getPixel() ngược với cách xác định
chỉ số của mảng 2 chiều.
Trang 9Red Green
Width
• getPixel(Width, Height, int[]);
• setPixel(Width, Height, int[]);
Column
Matran[Row][Column];
Trang 10Xử lý ma trận dữ liệu.
• Dùng phép biến đổi Fourier:
– Biến đổi DFT.
– Nhân kết quả với bộ lọc.
– Biến đổi ngược (Invert DFT)
Invert DFT
Trang 11Xử lý ma trận dữ liệu
• Biến đổi DFT: dùng công thức
∑∑−
=
−
=
+
−
0
1 0
)] (
2 exp[
* ) ,
(
1 )
,
x
N
vy M
ux i
y x
f MN
v u
Trang 12Xử lý ma trận dữ liệu
• Nhân kết quả với bộ lọc:
F(u,v) * T(u,v)
o Trong đó: T(u,v) là bộ lọc:
o Lọc thông thấp lý tưởng:
T(u,v) = 1 nếu D(u,v) <= D0 T(u,v) = 0 nếu D(u,v) >D0
o Lọc Butterworth:
D
v u
0
) , ( 1
1
+
Trang 13Xử lý ma trận dữ liệu
o Trong đó: D(u,v) là khoảng cách từ (u,v)
đến tâm được tính theo công thức:
oD(u,v) =
oD0 và n là hằng số dương cho trước
2
2 v
Trang 14Xử lý ma trận dữ liệu
• Biến đổi ngược (Invert DFT): dùng công thức
∑∑−
=
−
=
+
= 1
0
1 0
)] (
2 exp[
* ) , ( )
,
u
N
vy M
ux i
v u F y
x
Trang 15Ghi dữ liệu đã xử lý vào ảnh mới.
• Trong BufferedImage có lớp WritetableRaster
có các thao tác dùng để ghi dữ liệu vào ma trận
dữ liệu của ảnh
• Khởi tạo:
WritableRaster wr =BufferedImage.getRaster();
• Phương thức:
setPixel (width, height, int[]);
Trang 16Lưu ảnh đã xử lý vào file mới
ImageIO.write (<BufferedImage Object>,
<formatName>, <file output>);
• BufferedImage Object: đối tượng chứa ảnh đã
xử lý
• formatName: tên định dạng của ảnh mới, có
các định dạng là GIF, JPG, BMP, PNG
• file output: file ảnh mới
Trang 17Tạo giao diện
• Tạo đối tượng lấy tệp từ hệ thống
• Java hỗ trợ lớp JFileChooser (trong thư viện
javax.swing)
• Sử dụng thư viện java.awt, javax.swing,
java.awt.event để tạo các thành phần trong
giao diện, đưa các sự kiện vào các thành phần
và chạy chế độ đồ họa