1. Trang chủ
  2. » Luận Văn - Báo Cáo

Đồ án xử lý ảnh trong Java

120 6,9K 15

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 120
Dung lượng 7,93 MB

Nội dung

Đồ án xử lý ảnh trong JavaNội dung đồ án1. Giới thiệu về Java, chương trình này trình bầy một cách khái quát về sự ra đời và một số đặc trưng của Java2. Giới thiệu về mạng máy tính trong Java3. Xử lý tín hiệu số4. Nguyên tắc chuyển đổi âm thanh số

Trang 1

Mục lục

.5

Lời giới thiệu 5

Chơng 1 7

Java và những hứa hẹn 7

1.1 Java là gì và nó bắt nguồn từ đâu ? 7

1.2 Java: u điểm và nhợc điểm 8

Ưu điểm 8

Nhợc điểm 10

1.3 Mô hình HTML và mô hình Java 11

Mô hình HTML 11

Mô hình Java 12

1.4 Môi trờng phát triển Java 12

Tạo một file nguồn 13

Biên dịch file nguồn 13

Chạy ứng dụng 13

Phân tích một ứng dụng Java 13

Lời giải thích trong Java 14

Định nghĩa một lớp 14

Phơng thức main (Main Method) 14

Tạo một file Java nguồn 15

Biên dịch file nguồn 15

Tạo file nguồn gồm cả Applet, tạo ra file HTML 15

Chạy Applet (Running Applet) 15

Import Classes and Packages 16

Định nghĩa một phân lớp Applet 16

Chơng 2 .17

Tổng quan về mạng máy tính 17

2.1 Bạn đã biết những gì về mạng Internet trong Java 17

Nạp Applet từ mạng 17

1

Trang 2

Nạp một ảnh từ mạng 17

Cơ sở về mạng 17

TCP 18

UDP 18

PORTS 18

2.2 Lớp mạng trong JDK 19

2.2.1 - Thao tác với URL .19

Đọc và ghi một đối tợng URLConnection 24

2.2.2 Socket .25

Socket là gì ? 25

Đọc và ghi một socket 26

Chơng 3 28

Xử lý tín hiệu số 28

3.1 Mở đầu và phân loại 28

3.2 Tín hiệu rời rạc 30

Một số dãy tín hiệu rời rạc đặc biệt: 30

Các phép toán với tín hiệu rời rạc: 31

Các hệ thống xử lý tín hiệu rời rạc: 31

3.3 Phép biến đổi Fourier của tín hiệu rời rạc 33

Phổ biên độ, phổ pha, phổ năng lợng: 35

Lấy mẫu và khôi phục tín hiệu liên tục theo thời gian 35

Khôi phục tín hiệu tơng tự từ tín hiệu lấy mẫu: 37

Chơng 4 39

xử lý âm thanh số 39

4.1 - Tại sao chúng ta cần xử lý tín hiệu số 40

Phổ của tín hiệu là gì 40

Lấy mẫu tín hiệu 43

4.2 - Các file Audio 44

Gói Sun.audio 44

Lớp AudioStream 45

2

Trang 3

Lớp AudioData 46

Lớp AudioDataStream 46

Lớp AudioStreamSequence 47

Lớp AudioPlayer 48

Cơ sở luật mã hoá à 48

Giới thiệu chơng trình 51

Lớp UlawCodec 52

Lớp Oscillator 54

Lớp OscopeFrame 57

Lớp DoubleGraph 60

Chơng 5 61

Nguyên tắc chuyển đổi 61

âm Thanh số 61

5.1 - DFt 61

Tính số lợng bit cần thiết để lấy mẫu 63

Lớp futils Timer : làm chuẩn DFT 64

Benchmarking 65

IDFT 65

5.2 FFT 67

Lớp FFT .69

Tính log của số nguyên 70

Kiểm tra FFT và IFFT 71

Tính PSD 72

Thực hiện chuyển đổi bằng chơng trình 73

Lọc tạp âm bằng FFT 77

Khe hở phổ 78

Bộ lọc thông cao (the Hight-Pass Filter) .80

Chơng 6 82

Giới thiệu về xử lý ảnh 82

3

Trang 4

6.1 máy quét và Video Camera 82

6.2 Giao diện Observer 84

6.3 - ảnh số và Các dạng file ảnh 90

DATABAHN 90

Một số các dạng ảnh cơ bản 90

Chuyển đổi giữa hai dạng Vector và Bipmap 91

Một số dạng ảnh khác 92

Độ sâu màu, bảng màu, sự trong suốt 92

Phơng thức nén 94

Một số các dạng ảnh thông dụng 97

Chơng 7 104

xử lý ảnh trong Java 104

7.1 HISTOGRAM 104

7.2 Biến đổi DFT trong không gian hai chiều .105

Lớp FFTPlane 107

ProcessPlane 108

Lớp Slope 111

Lớp Points 112

7.3 các mô hình màu 113

Hệ màu HLS 115

Hệ màu IYQ 115

7.4 Hình ảnh 116

Tài liệu tham khảo 120

4

Trang 5

Lời giới thiệu

Ngày nay việc ứng dụng máy tính không chỉ dừng lại ở mức độ trong các phòng thí nghiệm, các trung tâm máy tính hay các văn phòng nữa mà nó đã mở rộng ra và trở thành một phơng tiện giải trí trong gia đình hay thậm trí trở thành một phơng tiện dạy học Hơn nữa các dữ liệu của ngời sử dụng cũng không đơn thuần chỉ là những tập văn bản, hồ sơ hay các tài liệu nghiên cứu mà nó còn bao gồm cả những dữ liệu âm thanh và hình ảnh Hiện nay, trên thế giới và tại Việt Nam chúng ta đã quen thuộc với khái niệm xử lý tín hiệu số, là một bộ phận rất quan trọng trong lĩnh vực máy tính; nhng để có đợc các thuật toán đòi hỏi chúng ta phải có một số các kỹ thuật đi kèm Vấn đề truyền dữ liệu trên mạng

mà điển hình là âm thanh và hình ảnh số cũng là một nhu cầu cần phải đợc đáp ứng Vì vậy các đáp ứng về mạng không ngừng đợc cải tiến để đảm bảo việc truyền dữ liệu có hiệu quả Mặt khác trong thời đại multimedia, xử lý tín hiệu là

sự giao nhau của các lĩnh vực toán học, kĩ thuật tính toán, và khoa học máy tính Trong thời gian làm đồ án tốt nghiệp em tập trung tìm hiểu về các thuật toán và các ứng dụng của xử lý tín hiệu âm thanh và hình ảnh bằng ngôn ngữ lập trình Java, các modul đợc đặt trong chơng trình Diffcad.java Đồ án gồm có 7 chơng:

• Chơng 1: Giới thiệu về java Chơng này trình bày một cách khái quát về sự

ra đời và một số đặc trng của Java

• Chơng 2: Giới thiệu về mạng máy tính trong Java

5

Trang 6

• Chơng 3: Xử lý tín hiệu số; trình bày các khái niệm cơ bản và tập trung một

phần vào phép biến đổi Fourier của tín hiệu rời rạc

• Chơng 4: Âm thanh số; trình bày các kỹ thuật và các nguyên tắc cơ bản của

việc lấy mẫu, mã hoá của các file âm thanh trên mạng Đa ra các chơng trình thực hiện các thuật toán trên

• Chơng 5: Nguyên tắc chuyển đổi âm thanh số Chơng này đi sâu vào các phép

biến đổi DFT và FFT cùng với một số các phép xử lý khác đợc thực hiện bằng chơng trình

• Chơng 6: Giới thiệu về xử lý ảnh

• Chơng 7: Xử lý ảnh trong Java

Em xin chân thành cảm ơn TS Quách Tuấn Ngọc, các anh chị và các bạn công tác tại trung tâm Công nghệ thông tin, bộ Giáo Dục và Đào tạo đã nhiệt tình giúp đỡ trong thời gian làm đồ án tốt nghiệp vừa qua Do thời gian và khả năng

có hạn nên bản báo cáo này không tránh khỏi các thiếu sót, rất mong sự góp ý, giúp đỡ của các thầy cô và các bạn

Hà Nội 5/1999

Lê Quang Trung

6

Trang 7

Chơng 1

Java và những hứa hẹn

Trong chơng này chúng ta bắt đầu tìm hiểu ngôn ngữ lập trình java, những u

điểm và những nhợc điểm của nó Cách nhìn nhận tổng quát về ngôn ngữ Java

đã đợc biết tới nh cách nhìn về một ngôn ngữ lập trình đặc biệt cùng với các môi trờng lập trình Khi nói tới cụm từ kĩ thuật java (Java Technology) có nghĩa là ta muốn nói đến cả phần cứng cũng nh phần mềm

1.1 Java là gì và nó bắt nguồn từ đâu ?

Thuật ngữ Java bao hàm cả hai mặt ngôn ngữ và các kĩ thuật cung cấp cho ngôn ngữ Khi nói tới Java programming language, nghĩa là đang nói về một ngôn ngữ lập trình hớng đối tợng phát triển bởi hãng Sun Microsystem Về mặt

cú pháp nó cũng giống nh các ngôn ngữ thông thờng khác, đợc phát triển từ C, C++ và Objective C Java chấp nhận mô hình của ZetaLisp, một phần mở rộng của LISP và chạy nhanh hơn các máyLISP

Khi chúng ta nói tới Java techonology, cũng có nghĩa chúng ta nói về ngôn ngữ lập trình java và hệ thống mà nó cung cấp Hệ thống bao gồm một th viện lớn các lớp đợc gọi là Java class libraries Java techonology cũng bao hàm cả cách chạy chơng trình, hoạt động dựa trên một machine Java Java techonology cho phép thực thi các machine Java bằng cách sử dụng mọi nối kết phần cứng và phần mềm Khi machine java đợc thực thi trên phần mềm thì nó đ-

ợc gọi là máy ảo Java (Java virtual machine)

Một trong những mục tiêu khi thiết kế java là nhằm đạt đợc hiệu quả khi thực hiện các tính toán độc lập Trong mô hình tính toán độc lập, mã (code) đợc nạp

để thực thi các đòi hỏi có tính chất bảo mật Nếu mã nguồn (source code) là không đáng tin cậy thì source code đợc xử lí thiếu chính xác đối với dữ liệu của ngời dùng và phần cứng máy tính Sự nguy hại của dữ liệu ngời dùng có thể bao hàm cả phép truy cập và phép phân bố các thông tin dễ bị tác động nh số thẻ tín dụng, số tài khoản và các dữ liệu có tính chất sở hữu khác

Nếu chúng ta xem xét tất cả các Web server nh một phần của hệ thống máy tính lớn, thì Web là một hệ điều hành lớn nhất trên thế giới Trên thực tế, ngôn ngữ lập trình của Web là java, và nữa, với cách nhìn này thì Java là một ngôn ngữ lập trình hệ điều hành Sun có kế hoạch đa ra Java machine không ảo tức là các Java machine thực hiện trên phần cứng Hệ điều hành cho các máy nh vậy sẽ

đựoc viết bằng Java Mọi ngời sẽ không phải viết mã cryptic C cho phần Kernel của hệ điều hành mà nó sẽ đợc viết bằng Java

Các chip Java sẽ đợc giảm giá mạnh, một số các thiết bị đợc nhắm tới nh TV set-top box, cellular telephone, paper, digital TV, smart VRC, PDA, máy in, máy

7

Trang 8

copy v v sẽ đợc máy tính trợ giúp, tức là Sun muốn tất cả các máy tính đều chạy Java Bởi vì các chip đợc chạy trên mã byte code, nên nó không cần biên dịch just- in -time Các thiết bị sẽ không cần màn hiển thị, bộ nhớ lớn và nối kết mạng Internet

Sun Microelectronics gọi kiến trúc chip đầu tiên là Java One Hiện nay Sun

đã có hai họ chip là microJava và ultraJava MicroJava đợc sử dụng với mục đích cung cấp cho các thị trờng trong lĩnh vực điều khiển UltraJava có mục đích cung cấp cho các workstation Cơ sở của kĩ thuật này là một ngăn xếp super-scalar dựa vào tập chỉ dẫn rút gọn của máy tính (RISC) gọi là picoJava Đợc gọi là super-scalar bởi vì nó thi hành kênh bốn trạng thái cho phép các phần khác nhau của

bộ xử lí làm bốn nhiệm vụ khác nhau cùng một lúc Gọi là RISC bởi vì nó thực thi hầu hết các chỉ dẫn trong một chu kì đồng hồ Tính toán trong một kênh của super-scalar giống nh các dòng assembly Dữ liệu đợc xử lí dòng nọ tiếp dòng kia Trên hình 1.1 chỉ ra các kênh, khi đợc điền, sẽ cho phép picoJava tìm thấy, giải mã, thi hành, và lu giữ sau đó trả lại kết quả Trong quá trình tìm, picoJava

sử dụng bốn byte cache đa vào ngăn xếp Ngăn xếp là tập hợp 64 thanh ghi 32 bits trên một chip Sau khi lu trên chip, RAM đợc sử dụng để thực hiện cùng với ngăn xếp

Hình 1.1 Kênh picoJava bốn trạng thái

1.2 Java: u điểm và nhợc điểm

Ưu điểm

• Java là một ngôn ngữ định kiểu mạnh Tất cả các tên của lớp đều đợc xác

định kiểu và sử dụng để kiểm tra mọi sự tham chiếu tới lớp khi đợc thông qua nh một đối số của phơng thức Hầu hết các ngôn ngữ bậc cao hiện nay

đều có đặc điểm này, mặc dù kiểu C cũ thì lại tránh điều đó

• Java thì nhỏ: Java dựa trên kiểu biên dịch mã byte (byte code) Chứa cả microkernel của chính nó, biên dịch mã byte cộng thêm lớp phụ là 215KB

Điều này là một hoạt động có hiệu quả Có nghĩa là biên dịch mã byte có thể nằm gọn trong ROM và đa ra các microcontroller để chạy chơng trình java

8

Trang 9

• Java là dễ dàng dịch chuyển: Java là một ngôn ngữ đa nền (multi-platform) Khẩu hiệu của Java là viết một lần chạy mọi nơi (Write Once, Run Anywhere) Bởi vì ở đây chỉ xác định có một máy ảo, Java đa ra một giao diện lập trình không chuẩn tắc tới các applet và các ứng dụng trên mọi phần cứng Nền Java là lí tởng cho Internet, ở đó chơng trình có thể đợc chạy trên mọi máy tính trong mạng Khi ta biên dịch mã nguồn của Java, ta phải thực thi trên các mã byte (byte code) Mã byte đợc tạo thành bởi trình biên dịch của Java và cấu trúc nên các chỉ dẫn tới Java virtual machine Java là một ngôn ngữ dễ dịch chuyển cho phép chạy trên mọi phần cứng mà máy ảo Java có thể chạy Mã byte lu trong file class, đợc nạp tới máy ảo Java và chứa cả biên dịch mã byte Trên hình 1.2 là mối quan hệ giữa chơng trình Java và phần cứng.

Hình 1.2

• Java là hớng đối tợng: Java là ngôn ngữ lập trình hớng đối tợng Trong mô hình hớng đối tợng, một biến kiểu đối tợng chứa các dữ liệu cũng nh các thuật toán cần thiết để thao tác với dữ liệu Ngợc lại một ngôn ngữ lập trình không hớng đối tợng là ngôn ngữ lập trình coi các biến nh một đối số tham chiếu tới thủ tục Không giống nh Pascal, C, Fortran, C++, Java không có hàm (function) Trong Java tất cả các phơng thức (method) đều nằm trong các lớp (classes) C++ là một ngôn ngữ có mở rộng về hớng đối tợng Điều này có nghĩa là ngời lập trình không hớng đối tợng có thể viết đợc trong C++, nhng một điều nh vậy không đợc cho phép trong Java

• Java không có con trỏ: Java thì crash-proof hơn C, C++ và Pascal - một đặc

điểm tốt hơn Lí do là Java không cung cấp một kĩ thuật nào cho phép thao tác với con trỏ một cách trực tiếp Do đó không có cách cho ngời lập trình thao tác với địa chỉ bộ nhớ Theo nhiều cách khác nhau một con trỏ không

đúng có thể gây lỗi cho bộ nhớ hay chơng trình Chúng ta không đủ không gian nhớ để liệt kê tất cả chúng Chúng ta có thể cảm ơn rằng java không có con trỏ

• Java không có Multiple Inheritance: đa kế thừa đã đợc biết tới trong C++, nhng đợc loại bỏ trong Java Đa kế thừa là tính chất có hai hay nhiều lớp cơ

sở trực tiếp bên dới một lớp Vấn đề đặt ra đối với đa kế thừa là sự chồng chéo các tên phơng thức cũng nh các biến, chúng phải trùng tên nhau dựa

9

Trang 10

theo một quy tắc của ngôn ngữ và dờng nh thờng xuyên bị quên bởi các ngời lập trình ở đây chỉ có một kiểu kế thừa đợc cho phép là kiểu a-kind-of

(AKO) Trên hình 1.3 là một ví dụ kiểu kế thừa AKO

• Java có Garbage Collection: Java có phép lu trữ tự động bao gồm cả kĩ thuật thu rác (rác đợc xem là các dữ liệu không còn giá trị sử dụng) Thu rác cho phép máy ảo Java giành lại bộ nhớ đợc sử dụng bởi các biến bị loại bỏ Để thực hiện thu rác trong chơng trình ta sử dụng phơng thức gc() thuộc lớp System và viết nh sau System.gc() Nh vậy bạn không phải lo lắng về việc giữ lại các dấu vết của bộ nhớ

Hình 1.3

• Java có các th viện lớp nền tảng: Java có các th viện nền tảng chứa

Abstract Window Toolkit (AWT) AWT cho phép giao diện ngời dùng

đồ hoạ kiểu hớng đối tợng đợc thay đổi trong các chơng trình Th viện gồm

có tám gói chính và số lợng ngày càng tăng Gói input/output java.io cho phép thao tác với dữ liệu vào và ra Gói mạng java.net, cho phép thao tác với các socket và URL Gói tiện ích java.util cho phép tthực hiện một số thao tác với hệ điều hành nh xem ngày tháng, thời gian,

• Java không phải là một ngôn ngữ hớng đối tợng thuần tuý Chúng ta không

có khả năng tạo ra các instance của kiểu dữ liệu primative Các kiểu dữ liệu cơ bản trong Java là boolean, int, long, float, double, char

và byte Ngợc lại trong Smalltalk thì tất cả các kiểu dữ liệu đều là các lớp

• API thiếu nhiều đặc trng: java thiếu các đặc trng có tính chất chìa khóa cho một vấn đề Ví dụ nó không cho phép chúng ta lập trình với các cổng nối tiếp (cho dù hầu hết các máy tính đều có ít nhất một cổng) cũng nh không cho phép đa ra máy in nếu đang ở trong một chơng trình Java Java là một ngôn ngữ mới, và bởi vì các đặc trng còn thiếu trong API, Java có thể không

dễ dàng sử dụng cho một số các ứng dụng nào đó

10

Bird ReptileMamal

HumanStudent Professor

Trang 11

• Java không có phơng thức đảo cung cấp cho C++: có thể chúng ta muốn mở rộng các đặc trng của Java API bằng cách lập trình trên một ngôn ngữ khác Thật không may là ngôn ngữ lựa chọn này chỉ có giới hạn là C Không có cách nào nối giữa Java và C++, một phần có thể do vấn đề về name-space mangling Trong C++, chức năng mã nguồn đợc định danh trong các hàm khác tên nhau đối với trình nối kết Điều này đợc gọi là name-space mangling Các hàm đợc đọc trệnh đi dựa vào kiểu đối số của nó Bởi java không có cách nhận biết hàm sẽ đợc đọc trệnh nh thế nào nên hàm sẽ không

đợc gọi tới

1.3 Mô hình HTML và mô hình Java

Mô hình HTML cho phép tham chiếu tới một tài liệu dới dạng các file khác kiểu nhau Một Browser đọc các tham chiếu tới file HTML và chuyển chúng tới chơng trình giải mã Ví dụ, nếu một file là dới dạng nén thì browser tự động giải nén nó

Thiếu xót không tránh đợc trong mô hình này là browser có thể tăng lên không có giới hạn Ví dụ với Netscape browser, nó yêu cầu 16 MB RAM Khi một ứng dụng trở nên lớn hơn, chúng có xu hớng làm chậm các tác vụ bình th-ờng khác Sau đây chúng ta so sánh mô hình HTML (HTML model) và mô hình Java (Java model) Trong Java model, các mã đợc biên dịch trong các file có

đuôi class và sau đó sẽ nạp xuống đa vào trong các applet thông qua mạng Mô hình HTML

Trên Internet, các máy tính đều chạy dịch vụ Hypertext Transfer Protocol (HTTP) Các dịch vụ HTTP đa dữ liệu đáp ứng cho các Web browser Một cách tổng quát, dữ liệu ở các dạng khác nhau và HTML không cần giải mã các dữ liệu Kết quả là Internet HTTP server cung cấp miền lớn các dạng dữ liệu tới các client nối với nó

Trong HTML model, dữ liệu thô đợc ghi trong HTML document bằng một tham chiếu siêu văn bản (hyper text reference) Để thực hiện giải mã dữ liệu với một số lớn các dạng dữ liệu khác nhau, browser có sử dụng các ứng dụng trợ giúp Nhằm sắp xếp dữ liệu đúng với ứng dụng trợ giúp, browser có một giao thức là Multipurpose Internet Mail Extension (MIME) cho phép dịch vụ HTTP truyền dẫn cùng với dữ liệu Dựa trên MIME, một bảng tìm kiếm xác định xem dữ liệu đợc giải mã và hiển thị nh thế nào

Một vấn đề khác Dữ liệu thờng đợc hiển thị trong các khuôn dạng điện tử rất đa dạng Giả sử có một tài liệu Microsoft Word cung cấp trên Web, ta có thể xem nó nh một Word document nhng Word 5 trên Mac không thể đọc đợc các Word 6 hay 7 Vì vậy phải có một file RFT (Rich text format) để Word 5

có thể nhận biết hầu hết nội dung trong tài liệu Tài liệu kiểu Word Document thờng đợc chuyển sang dạng HTML nhằm cho phép mọi browser trên mạng có thể "nhìn" nó Thêm nữa HTML chỉ đáp ứng các đồ họa dới dạng ảnh GIF và không duy trì trang tài liệu nguồn nguyên thuỷ dới dạng Word document Ta cũng có thể sử dụng PostScrip để nạp và in các tài liệu, tuy nhiên không cho phép soạn thảo lại tài liệu và cũng không phải mọi file PostScrip đều có thể in đ-

ợc với các máy in Bên cạnh đó, Adobe có tiến thêm một bớc trong Portable

11

Trang 12

Document Format (PDF) cho phép xem và in tất cả các tài liệu Tuy vậy còn tồn tại vấn đề là ngời dùng không thể soạn thảo lại các tài liệu này.

Mô hình Java

Mô hình Java khắc phục một số thiếu sót của mô hình HTML nhng nó không dành lấy đợc sự chấp nhận rộng rãi Trong Java, các mã byte tạo ra sau khi biên dịch đợc lu trong các file class Các file này đợc nạp xuống các class loader của máy client Sau khi kiểm tra, máy ảo Java sẽ phiên dịch các mã byte

Nguyên tắc hoạt động của trình biên dịch Java có dạng nh trên hình 1.4

Nguyên tắc của mô hình Java trên mạng nh trên hình 1.5

Runtime System/ Hardware

Java Source

Interpreter Just-In-Time Compiler

Compiler Byte Code Verifier

Byte Codes Network ClassLoader

Hình 1.5

1.4 Môi trờng phát triển Java

Có nhiều sự chọn lựa có giá trị để phát triển Java, bao gồm các sản phẩm của Sun (Java Workshop, Java Developers Kit (JDK)), Metrowerks' CodeWarrior, các sản phẩm Symantec(Visual Café, Visual Café Pro, Café) Microsoft J++, Asymetrix SuperCede và các chọn lựa khác Để có thêm chi tiết ta hãy xem trên địa chỉ: htt://www.javasoft.com/products/JDK/; ftp://ftp.metrowerks.com/; http://www.symetec.com, http:/roaster.com/roaster/ và http://www.microsoft.com/java/

J++ chạy trên Window 95/NT Workshop có chỉ chạy trên Solaris và Windows 95/NT Các sản phẩm của Symantec và CodeWarrior chạy trên MacOS

và Window 95/NT

Sau đây chúng ta hãy xem xét một ứng dụng đơn giản nhất của java trên môi trờng JDK Chúng ta tìm hiểu chi tiết cách tạo , biên dịch và chạy các chơng

12

Java Source

(*.java)

Java Compiler

JavaClasses (*.class)

Trang 13

trình Java Sử dụng nền Java Development Kit (JDK) Ta có thể tìm thêm các thông tin trên địa chỉ http://java.sun.com/prodocst/jdk/index.html.

Tạo một file nguồn

Sử dụng một trình soạn thảo, tạo một file có tên là Hello.java với các dòng lệnh nh sau:

/**

* The Hello class implements an application that

* simply display “ Hello world” to the standard output

*/

class Hello {

public static void main ( String[] args){

System.out.println(“ Hello World”);

}

}

Biên dịch file nguồn

Biên dịch file nguồn bằng trình biên dịch của Java

UNIX: javac Hello.java

DOS shell (Windows 95/NT): javac Hello.java

Nếu biên dịch thành công, trình biên dịch sẽ tạo ra file tên là Hello.class

trong cùng th mục với file nguồn Hello.java File kiểu class này chứa các mã byte Nếu biên dịch không thành công, thì hãy chắc chắn ta nhập đúng kiểu và tên của chơng trình chính xác nh chỉ ra ở trên hay không, và hãy chắc chắn chữ thờng, chữ hoa có đúng nh trong tên file không

Chạy ứng dụng

Chạy chơng trình bằng Java interpreter:

UNIX: java Hello

DOS shell( Window 95/NT) java Hello

khi đó trên màn hình ta sẽ nhận đợc dòng chữ : Hello World

Phân tích một ứng dụng Java

Bây giờ hãy nhìn vào chơng trình nguồn, chúng ta có thể phân vân không biết nó làm việc nh thế nào và nó giống các ứng dụng khác thế nào Chơng trình nguồn gồm hai khối lệnh chính, khối đầu tiên nằm ở phần đầu của chơng trình

sử dụng kí hiệu /** và */ Ngôn ngữ java cung cấp một trong ba kiểu kí tự đánh dấu // để đa các lời giải thích vào chơng trình tơng tự nh trong C, C++ Trong Java, mỗi phơng thức (đợc coi là một hàm chức năng giống nh một khối các mã lệnh) và biến nằm gọn trong một lớp Java không cung cấp các biến và các hàm toàn cục Do đó có thể xem khung của chơng trình java là một definition class Điểm truy nhập vào mỗi một ứng dụng Java là phơng thức main của nó Khi chạy ứng dụng cùng với java interpreter cần phải chính xác hoá tên lớp muốn chạy Interpreter sẽ gọi đến phơng thức main trong lớp đó Phơng thức main điều khiển luồng chảy của chong trình, cấp phát mỗi khi nguồn đợc gọi tới, và chạy tất cả những phơng thức khác liên quan đến ứng dụng đó

13

Trang 14

Lời giải thích trong Java

Trong Java có các kiểu trích dẫn lời giải thích nh sau:

/* text */ : trình biên dịch bỏ qua mọi thứ nằm trong cặp dấu này

/** documentation */ : Dùng để chỉ ra một documentation comment, trình biên dịch cũng bỏ qua nh đối với /* và */ Công cụ javadoc của JDK sử dụng lời chú giải doc khi chuẩn bị tự động tạo ra documentation Để có thêm thông tin về javadoc hãy xem trên http://java.sun.com/products/jdk/1.1/docs/index.ht-ml#tools

// text : trình biên dịch bỏ qua mọi thứ kể từ dấu // cho đến cuối dòng

Định nghĩa một lớp

Dòng đầu đợc tô đậm trong phần chơng trình ở dới là khối định nghĩa lớp:

/**

* The Hello class implements an application that

* simply display “ Hello world” to the standard output

*/

class Hello {

public static void main ( String[] args){

System.out.println(“ Hello World”); // Display the String

}

}

Lớp là một khái niệm cơ bản, gồm một khối các câu lệnh của ngôn ngữ lập trình hớng đối tợng giống nh kiểu java Nó là một bản chi tiết mô tả trạng thái, cách thức thực hiện đợc nối kết với instance của lớp đó Khi ta khởi tạo một lớp, ta tạo ra một đối tợng mà nó có cùng các trạng thái, cách thức thực hiện nh các instance khác của cùng lớp đó Trạng thái nối kết với lớp hay đối tợng đợc

lu trong các biến thành phần member variables Cách thức thực hiện nối kết với lớp hay đối tợng đợc thực thi trong các phơng thức

Phơng thức main (Main Method)

Dòng đợc tô đậm là điểm bắt đầu và kết thúc của khai báo phơng thức main. /**

* The Hello class implements an application that

* simply display “ Hello world” to the standard output

*/

class Hello {

public static void main ( String[] args){

System.out.println(“ Hello World”);

}

}

Mỗi ứng dụng Java đều có một phơng thức main đợc khai báo nh sau:

public static void main(String[] args)

Phơng thức main đợc khai báo cùng với ba từ khoá:

• public: cho phép các đối tợng gọi tới phong thức main

• static : có nghĩa là phơng thức main là một phơng thức kiểu lớp

• void: chỉ ra rằng phơng thức main không trả lại giá trị

14

Trang 15

Phơng thức main trong Java tong tự nh hàm main trong C, C++ Khi yêu cầu tới java interpreter, ta phải chỉ rõ tên lớp muốn chạy Lớp này là lớp điều khiển ứng dụng và phải có phơng thức main.

Sau đây là cách tạo ra và sử dụng một applet-một chơng trình Java có thể

đợc đa vào trang HTML và chạy trên các Java-enabled browsers.

Tạo một file Java nguồn

Sử dụng một trình soạn thảo văn bản tạo ra một file tên là HelloWorld.java với các dòng nh sau:

import java.applet.Applet;

import java.awt.Graphics;

public class HelloWorld extends Applet {

public void paint(Graphics g) {

g.drawString(“ Hello world!”, 50, 25 );

}

}

Biên dịch file nguồn

Sử dụng trình biên dịch của java:

UNIX: javac HelloWorld.java

DOS shell(Window 95/NT): javac HelloWorld.java

Nếu biên dịch thành công thì sẽ tạo ra file HelloWorld.class trong cùng th mục với file nguồn File class chứa các mã byte

Tạo file nguồn gồm cả Applet, tạo ra file HTML.

Sử dụng một trình soạn thảo tạo ra file có tên là Hello.html trong cùng th mục với file HelloWorld.class Nội dung file HTML nh sau:

Here is the output of my program:

<APPLET CODE=” HelloWorld.class” WIDTH=150 HEIGH=25>

</APPLET>

</BODY>

</HTML>

Chạy Applet (Running Applet)

Để chạy applet, ta phải nạp file HTML vào một Browser cung cấp JDK( cũng

có thể sử dụng Applet Viewer cung cấp bởi JDK thay vì một Web browser đầy

đủ) Để nạp file HTML ta cần báo cho browser biết file URL hay file HTML ta vừa tạo Ví dụ có thể nhập vào trờng địa chỉ hay vị trí của browser giống nh dới

đây:

file:/home/kwaTrath/java/Hello.html

Hầu hết các browser cho phép mở một file từ bảng chọn File trên browser

DOS shell:appletviewer file:/home/kwaTrath/java/Hello.html

15

Trang 16

Import Classes and Packages

Để sử dụng các th viện (các gói lớp) có sẵn cung cấp bởi java, hay các th viện

do ngời lập trình tạo ra, java sử dụng từ khoá import Ta hãy xem ví dụ sau Hai dòng đầu liệt kê hai lớp đợc sử dụng trong applet: Applet và Graphics

import java.applet.Applet;

import java.awt.Graphics;

public class HelloWorld extends Applet {

public void paint(Graphics g) {

g.drawString(“ Hello world!”, 50, 25 );

}

}

Nếu bỏ đi hai dòng này, ta vẫn có thể biên dịch và chạy chơng trình nếu thay đổi nh sau (chữ in đậm)

public class HelloWorld extends java.applet.Applet {

public void paint(java.awt.Graphics g) {

g.drawString(“ Hello world!”, 50, 25 );

kiếm cho lớp Applet và Graphics Chúng ta có thể nhập các lớp đơn nh trên hoặc nhập cả gói Ví dụ :

import java.applet.*;

import java.awt.*;

public class HelloWorld extends Applet {

public void paint(Graphics g) {

g.drawString(“ Hello world!”, 50, 25 );

16

Trang 17

Chơng 2

Tổng quan về mạng máy tính

Để thao tác các tác vụ với mạng internet thông qua ngôn ngữ Java chúng ta hãy xem xét cơ sở của mạng trong Java

2.1 Bạn đ biết những gì về mạng Internet trong Java ã

Thuật ngữ network gây sự lo ngại cho nhiều ngời lập trình nhng chúng ta

đừng nên lo ngại Sử dụng mạng thì rất dễ dàng và thuận tiện đồng thời cho phép cung cấp các java platform Sau đây chúng ta đi tìm hiểu một số nét cơ bản về mạng internet cùng với java

Nạp Applet từ mạng

Nếu truy nhập vào mạng và tới một java-compatible Browser, bạn không chắc chắn sẽ thi hành đợc nhiều applet Applet mà ta đang chạy, đợc tham chiếu bởi một nhãn đặc biệt trong file HTML đó là nhãn <APPLET> Applet có thể định

vị mọi nơi; trên máy đơn hay một nơi bất kì trên mạng Vị trí của applet đợc chỉ

ra bằng mã lệnh trong nhãn <APPLET>, khi đó browser sẽ giải mã vị trí và chạy applet này Nếu applet nằm trên một số máy khác ngoài máy của ta, browser phải nạp applet trớc khi chạy nó Browser thực hiện tất cả các lời nối kết tới mạng và nhận dữ liệu từ đó, bằng cách ấy sẽ cho phép bạn chạy từ mọi nơi trên mạng

Nạp một ảnh từ mạng

Nếu bạn có dự định lập trình với các applet và các ứng dụng thì bạn phải sử dụng một lớp có tên java.net nằm trong gói URL Lớp này đa ra một Uniform Resource Location (URL), là địa chỉ một tài nguyên trên mạng Applet của bạn cùng các ứng dụng có thể sử dụng một URL để tham chiếu và nối kết tới các tài nguyên trên mạng Ví dụ để đa môt hình ảnh từ mạng, chơng trình Java phải tạo

ra một đối tợng URL chứa địa chỉ của ảnh đó Chúng ta sẽ nói chi tiết hơn trong phần sau

Cơ sở về mạng

Máy tính chạy trên mạng giao tiếp với các máy khác bằng các giao thức nh

có dạng nh hình sau

17

Trang 18

Application (HTTP,fft,telnet )

Transport (TCP, UDP, ) Network (IP, ) Link (device driver, )

Khi viết chơng trình Java giao tiếp với mạng, thì phải lập trình tại lớp ứng dụng (lớp Application) Trên thực tế chúng ta không cần phải lo về các lớp TCP

và UDP Thay cho điều này chúng ta có thể sử dụng các lớp chuẩn có sẵn nằm trong gói java.net của java

TCP

Khi hai ứng dụng muốn cùng giao tiếp với một ứng dụng khác xác định thì chúng thiết lập một nối kết và đa dữ liệu vào và ra trên nối kết này Đây là cách giống nh trong cuộc gọi điện thoại Nếu bạn muốn nói với một ngời, một nối kết

đợc thiết lập khi ta quay số và có đáp ứng trả lời của ngời phía đầu bên kia Bạn

sẽ truyền và nhận thông tin với ngời đó thông qua đờng điện thoại Giống nhmột công ty điện thoại, TCP bảo đảm dữ liệu đợc gửi tới điểm nhận và nhận lại một thông báo trả lời từ điểm nhận, nếu không một thông báo lỗi sẽ xuất hiện TCP cung cấp kênh giao tiếp điểm nối điểm cho mỗi ứng dụng có yêu cầu về giao tiếp Hypertext Trasform Protocol (HTTP), File Transfer

yêu cầu một kênh giao tiếp

UDP

Giao thức UDP cung cấp kiểu giao tiếp không đảm bảo giữa hai ứng dụng trên mạng UDP không sử dụng cách nối kết trên cơ sở của TCP Hơn nữa nó đa các gói dữ liệu độc lập, gọi là datagram, từ một ứng dụng này tới một ứng dụng khác Gửi gói dữ liệu thì giống nh gửi một bức th thông qua các dịch vụ gửi th: việc phân phát là không quan trọng và không bảo đảm; mỗi bản tin thì độc lập với các bản tin khác

PORTS

Nói một cách tổng quát máy tính đợc xem là một phần cứng vật lý nối với mạng Tất cả dữ liệu dành cho một máy tính đợc đa tới thông qua nối kết Tuy nhiên dữ liệu có thể bị dùng cho các ứng dụng khác nhau chạy trên máy tính đó Vậy làm thế nào một máy tính biết đợc ứng dụng nào nhận dữ liệu gửi đến Câu trả lời là thông qua các ports

Dữ liệu truyền trên mạng có kèm theo một thông tin địa chỉ xác định máy tính và số hiệu cổng mà nó đợc chỉ định tới Máy tính đợc định danh bởi địa chỉ

IP 32 bit Cổng đợc định danh bằng địa chỉ 16 bit, qua đó TCP và UDP sử dụng

để phân phát dữ liệu cho từng ứng dụng tơng ứng

18

Trang 19

Trong kiểu nối kết cơ sở nh TCP thì một ứng dụng của server ràng buộc với một socket để xác định số hiệu của cổng Điều này có hiệu quả trong việc đăng

kí với server về hệ thống lu tất cả dữ liệu dành riêng cho cổng đó Một máy con client sẽ gặp server tại cổng, xem minh hoạ trên hình 2.2

Hình 2.2 Trên cơ sở giao tiếp gói kiểu UDP, các gói dữ liệu có kèm theo số hiệu cổng

để tạo ra kết nối, nh trên hình 2.3 Số hiệu cổng thay đổi từ 0 tới 65535 bởi nó

đ-ợc đánh số 16 bit Số cổng nằm trong khoảng 0 tới 1023 Chúng đđ-ợc dành cho các dịch vụ thông thờng nh HTML hay FTP và một số các dịch vụ khác

Hình 2.3

2.2 Lớp mạng trong JDK

Dựa vào các lớp trong gói java.net các chơng trình có thể sử dụng giao thức TCP hay UDP để giao tiếp thông qua mạng Các lớp URL, URLConnection, Socket, Server-Socket đều sử dụng giao thức TCP trên mạng Các lớp DatagramPacket, DatagramSocket và MulticastSocket thì sử dụng giao thức UDP

2.2.1 - Thao tác với URL

URL là từ viết tắt cho Uniform Resource Locator Nó là một sự tham chiếu (một địa chỉ) tới một tài nguyên trên mạng Internet Bạn cung cấp URL cho các Web browser a thích sao cho nó có thể định vị các file trên mạng theo cùng cách mà ta đề địa chỉ trên một bức th sau đó gửi tới các trạm bu điện để chuyển th đi

19

Trang 20

Các chơng trình Java có thể tham gia vào các hoạt động trên mạng đồng thời cũng có thể sử dụng URL để tìm kiếm tài nguyên mà chúng muốn truy cập tới Chơng trình java sử dụng các lớp nằm trong gói java.net để đa ra các địa chỉ URL.

Ví dụ một địa chỉ Web site host cung cấp phần mềm Java của hãng Sun Microsystem có dạng nh sau:

Tất cả các URL đều có hai thành phần :

•Nhận dạng giao thức (protocol identifier)

•Tên tài nguyên (resource name)

Chú ý rằng khai báo giao thức và tên tài nguyên phải cách nhau một dấu hai chấm và hai dấu gạch chéo phải Khai báo giao thức chỉ ra tên của giao thức đợc

sử dụng để tìm kiếm tài nguyên Ví dụ sử dụng giao thức chuyển đổi siêu văn bản (HTTP), là một cách điển hình để cung cấp các tài liệu hypertext HTTP là một trong số rất nhiều giao thức đợc sử dụng để truy nhập tới các kiểu tài nguyên khác nhau trên mạng Một số các tài nguyên khác nh File trasfer Protocol (FTP), Gopher, File, và các kiểu mới khác

Tên tài nguyên là địa chỉ chỉ tới tài nguyên, địa chỉ này phải đầy đủ Dạng của tên tài nguyên dựa vào giao thức đợc sử dụng, nhng không phải đối với nhiều giao thức, bao gồm cả HTTP, tên tài nguyên chứa một hay nhiều các thành phần khác nhau nh trong bảng 23 dới đây

lives

optional)

resource that usually indentifies a specific location within a file (tipically optional).

20

Trang 21

Bảng 23

Đối với nhiều giao thức, tên host và tên file cùng đợc yêu cầu, trong khi số cổng và tham chiếu thì không đợc chọn Ví dụ, tên tài nguyên cho một HTTP URL phải xác định trên một máy chủ và đờng dẫn tới tài liệu trên máy đó; nó cũng có thể xác định một tên của host và một chỉ dẫn tận cùng cho tên file có dạng /index.html

Tạo một URL

Cách dễ dàng nhất tạo ra một đối tợng URL là từ một chuỗi các kí tự do ngời dùng nhập vào để tạo nên một địa chỉ URL Cách này cho phép những ngời khác cũng có thể sử dụng URL Ví dụ, URL cho Gamelan site nằm trong th mục tài nguyên Java có cấu trúc nh sau:

http://www.gamelan.com/

trong chơng trình Java bạn sử dụng chuỗi String chứa dòng văn bản để tạo ra

đối tợng URL:

URL gamelan = new URL(“http://www.gamelan.com/”);

Tạo liên kết cho một URL tới URL khác

Một relative URL chứa đủ các thông tin tiếp cận tới tài nguyên quan hệ với một URL khác Quan hệ URL thờng đợc sử dụng trong các file HTML Ví dụ giả

sử ta viết một file HTML có tên là JoesHomePage.html Trang này chứa các nối kết tới những trang khác, PicturesOfMe.html và MyKids.html trong cùng

th mục và trên cùng một máy Sự kết nối này đợc viết nh sau:

<A HREF=”PicturesOfMy.html”>Pictures of Me</A>

<A HREF=”MyKids.html”>Pictures of Kids</A>

Trong chơng trình java bạn tạo ra một đối tợng URL từ các mối quan hệ xác

định Ví dụ giả sử bạn biết hai URL của Gamelan site:

http://www.gamelan.com/pages/Gamelan.net.html

Ta tạo ra đối tợng quan hệ với các trang này trên URL cơ sở chung

URL gameGames = new URL(gamelan, “Gamelan.game.html”);

URL gamelanNetWork = new URL(gamelan, “Gamelan.net.html”);

Các mã lệnh đơn giản ở trên đợc sử dụng nhằm cho phép bạn tạo nên các URL mới Phần đối số là một chuỗi xác định tên tài nguyên cần đợc liên hệ tới Nếu baseURL là null thì cấu trúc sẽ thực hiện relativeURL nh một xác định URL thuần tuý và sau đó bỏ qua baseURL

Cấu trúc nh vậy cũng đợc sử dụng để tạo các đối tợng URL cho lu giữ tên (còn gọi là các reference) trong một file Ví dụ file Gamelan.net có một tên

lu giữ là Bottomnằm tại đầu file, ta có thể sử dụng cấu trúc quan hệ URL để tạo một đối tợng URL dành cho nó nh dới đây

21

Trang 22

URL gamelanNetworkBottom = new URL(gamelanNetwork, "#BOTTOM");

Ví dụ ta thiết kế một bảng panel cho browser giống nh bảng panel của file browser, nhằm cho phép ngời sử dụng chọn giao thức, tên host, số hiệu cổng và tên file mà họ yêu cầu Bạn có thể cấu trúc một URL từ các thàh phần của panel Constructor đầu tiên tạo ra một đối tợng URL từ giao thức, tên host, tên file Câu lệnh sau đây tạo ra một URL tham chiếu tới file Gamelan.net.html tại

URL gamelan = new URL("http","www.gamelan.com".,80

22

Trang 23

GetPort trả lại số nguyên là số hiệu cổng của URL Nếu cổng không

đợc đặt thì trả về giá trị -1

Nh vậy có thể sử dụng các phơng thức kiểu getXXX để nhận đợc các thông tin về URL mà ta đang sử dụng để tạo ra một đối tợng URL Lớp URL cùng với các phơng thức của nó cho phép tự do phân tích lại một lần nữa cấu trúc này ở trên đã tạo một đối tợng URL và gọi tới các phơng thức truy cập để lấy những thông tin cần thiết Chơng trình sau đây tạo ra một dạng URL từ chuỗi khai báo

và sau đó sử dụng các phơng thức truy cập của đối tợng này để phân tích URL đã tạo ra

import java.net.*;

import java.io.*

public class ParseURL {

public static void main(String[] args) throws Exception{

URL aURL=new URL("http://java.sun.com:80/docs/"+

Chơng trình java ngắn dới đây sử dụng phơng thức openStream để nhận đợc luồng dữ liệu vào trên địa chỉ http://www.yahoo.com Nếu sau khi đã mở một BufferedReader trên một luồng dữ liệu thì đọc từ BufferReader với cách làm nh vậy ta có thể đọc đợc nội dung một URL bất kì

import java.net.*;

import java.io.*;

public class URLReader {

public static void main(String[] args) throws Exception { URL yahoo = new URL(http://www.yahoo.com);

BufferedReader in = new BufferedReader(

Khi chạy chơng trình chúng ta sẽ thấy, hiện lên cửa sổ lệnh, các lệnh HTML

và văn bản trên file HTML định vị tại địa chỉ http://www.yahoo.com/

23

Trang 24

Kết nối tới một URL

Khi đã tạo xong một đối tợng URL ta có thể dùng phơng thức open Connection để kết nối với nó Khi nối kết với một URL, bạn khởi tạo một giao tiếp kết nối giữa chơng trình Java với URL thông qua mạng Ví dụ ta có thể kết nối tới site của Yahoo bởi các lệnh sau:

URL yahoo = new URL (http://www.yahoo.com);

URL Connection = yahoo.openConnection();

} catch (MalformedURLException e) {//new URL failed

public class URLConnectionReader {

public static void main(String[] args) throw Exception { http://www.yahoo.com

URL yahoo = new URL(http://www.yahoo.com/");

Rất nhiều bản cgi-bin sử dụng phơng thức potst (POST METHOD) để đọc dữ liệu trên các máy con Vì thế ghi vào một URL đợc gọi là posting to a URL Khi lập trình, java cũng cho phép tác động tới các bản cgi-bin Điều này đợc thực hiện qua các bớc sau:

1 Tạo ra một URL

2 Mở một nối kết tới URL

24

Trang 25

3 Thiết lập khả năng đa dữ liệu ra trên URLConnection

4 Nhận luồng dữ liệu ra từ nối kết đó luồng dữ liệu ra đợc nối kết với luồng vào cơ bản của bản cgi-bin trên máy chủ server

5 Ghi luồng dữ liệu ra

6 Đóng luồng dữ liệu vào

2.2.2 Socket

URL và URLConnection cung cấp một kĩ thuật ở mức cao để truy nhập tới các tài nguyên mạng Đôi khi chơng trình của chúng ta yêu cầu mức giao tiếp mạng

ở cấp thấp hơn ví dụ nh muốn viết về một ứng dụng client-server

Giao thức TCP cung cấp kênh giao tiếp điểm nối điểm đáng tin cho các ứng dụng client-server trên mạng và cho phép giao tiếp với các máy khác Để giao tiếp thông qua TCP, một chơng trình của client và server thiết lập nên một nối kết tới nhau Mỗi một chơng trình gắn liền với một socket xác định cho đến khi kết thúc giao tiếp Muốn giao tiếp đợc client và server phải đọc và ghi lên một socket đã đợc quy định trớc

Socket là gì ?

Thông thờng một server chạy trên một máy tính xác định thì có một socket quy định cho một số hiệu cổng xác định Server sẽ chờ và nghe socket tơng ứng với client đang yêu cầu nối kết

Bên phía client: client biết tên hostname của máy mà server đang chạy đồng

thời biết số hiệu cổng mà server đợc nối Để tạo một yêu cầu nối kết, client cố gắng hẹn gặp với server trên cổng và máy của server

Hình 2.4

Bên phía server: nếu nối kết đợc chấp nhận, một socket cũng đợc tạo ra và

client sử dụng socket này để giao tiếp với server Chú ý rằng socket bên client không đợc quy định số hiệu cổng sử dụng để gặp server Nhng tất nhiên là client

đợc ấn định một số hiệu cổng địa phơng trên máy mà client đang chạy

25

Trang 26

Hình 2.5 Gói java.net chuẩn của java cung cấp một lớp có tên là Socket để thực hiện kết nối song công một phía giữa chơng trình java và một chơng trình khác trên mạng Lớp Socket đặt tại đầu của quá trình thực thi, ẩn đi các chi tiết của hệ thống từ chơng trình java Bằng cách sử dụng java.net Socket thay cho các mã lệnh thông thờng, chơng trình java có thể giao tiếp trên mạng trong các nền khác nhau.

Đọc và ghi một socket

Để có thể xem xét cụ thể một chơng trình tạo kết nối tới server bằng cách sử dụng lớp Socket, sau đó xem client nhận và gửi dữ liệu tới server nh thế nào chúng ta hãy quan sát chơng trình dới đây

Chơng trình nối kết client tới một server Echo Server Echo này nhận dữ liệu

từ client và gửi lại dữ liệu thông qua cổng số 7

import java.io.*;

import java.net.*;

public class EchoClient {

public static void main(String[] args) throw IOEception {

Socket echoSocket = null;

DataOutputStream out = null;

BufferedReader in = null;

try {

echoSocket = new Socket("taranis", 7);

out = new PrintWriter(

echoSocket.getOutputStream(), true);

in = new BufferedReader(newImputStreamReader(

echoSocket.getOutputStream()));

} catch (UnknownHostException e){

System.err.println("Don't know about host:taranis");

26

Trang 27

server là taranis Câu lệnh thứ hai nhận luồng dữ liệu từ socket và mở

Vòng lặp đọc tuần tự từng dòng trong luồng dữ liệu vào cơ bản và lập tức gửi

nó tới server bằng cách ghi lên PrintWriter kết nối tới Socket Phơng thức readLine chờ cho đến khi server phản hồi thông tin lại từ EchoClient Vòng lặp tiếp tục thực hiện cho đến khi ngời sử dụng nhập kí tự kết thúc

Chơng trình đợc tiếp tục với bốn câu lệnh:

Chơng trình này là trực tiếp và đơn giản bởi server Echo thi hành một phơng thức giao tiếp đơn giản; client gửi văn bản lên cho server và server trả lại nó Khi chơng trình client đợc nối tới các server phức tạp hơn ví dụ nh server HTTP thì chơng trình cũng phức tạp lên theo Tuy nhiên nguyên tắc chung là gồm các bớc thực hiện sau:

1 Mở một socket

2 Mở một luồng dữ liệu vào, một luồng ra tới socket

3 Đọc và ghi trên luồng dữ liệu tuỳ theo giao thức của server

4 Đóng luồng dữ liệu

5 Đóng socket

27

Trang 28

Có nhiều cách phân loại tín hiệu.

Trớc hết ta xét phân loại theo tính chất biến độc lập thời gian (liên tục hay rời rạc);

• Tín hiệu liên tục theo thời gian là tín hiệu có biến độc lập (thời gian) liên tục

• Tín hiệu rời rạc là tín hiệu có biến độc lập rời rạc, nghĩa là tín hiệu có thể biểu diễn bằng một dãy số: hàm tín hiệu chỉ có giá trị xác định ở những thời

điểm nhất định Ta có thể thu nhận tín hiệu rời rạc bằng cách lấy mẫu tín hiệu liên tục, vì vậy tín hiệu rời rạc còn đợc gọi là tín hiệu đợc lấy mẫu

Tiếp đến ta phân loại theo biên độ tín hiệu:

• Tín hiệu tơng tự là tín hiệu liên tục cả về biên độ và thời gian

• Tín hiệu đợc lợng tử hoá là tín hiệu tơng tự có biên độ rời rạc hoá

Tín hiệu số là tín hiệu rời rạc đồng thời cả về biên độ cũng đợc rời rạc hoá Trên hình 3.1 chúng ta chỉ ra các kiểu tín hiệu

28

Trang 29

Hình 3.1 Tín hiệu, nh định nghĩa, là vật mang thông tin Song tín hiệu cần phải đợc

xử lý để sao cho dễ dàng rút ra các thông tin mong muốn hay lu trữ thông tin một cách tối u Do vậy việc phát triển các kĩ thuật cũng nh hệ thống xử lý tín hiệu đóng vai trò quan trọng Thông thờng việc xử lý tín hiệu là các phép biến

đổi biến một tín hiệu thành một tín hiệu có dạng khác mong muốn( hiểu theo nghĩa nào đó), thích hợp cho việc thu nhận thông tin Cũng nh đối với khi phân loại tín hiệu, các hệ thống xử lý tín hiệu cũng đợc phân loại theo cả tính chất của cả tín hiệu vào và ra

• Hệ thống xử lý tín hiệu thời gian liên tục hay hệ liên tục là hệ thống có tín hiệu vào và ra là các tín hiệu liên tục

• Hệ xử lý rời rạc là hệ có tín hiệu vào và ra dều là tín hiệu rời rạc

• Hệ xử lý tơng tự là hệ có tín hiệu vào và ra đều là tín hiệu tơng tự

• Hệ xử lý số là hệ có tín hiệu vào và ra đều là tín hiệu số

Xử lý tín hiệu số (DSP: Digital Signal Processing) là nghành chuyên môn nghiên cứu và phát triển các kĩ thuật cũng nh các hệ thống xử lý tín hiệu số Cần chú ý rằng tín hiệu số chỉ là một phần nằm trong tín hiệu rời rạc và vì vậy toàn

bộ lý thuyết tín về kĩ thuật xử lý tín hiệu rời rạc cũng sẽ bao hàm và đúng cho cả tín hiệu số Trong khi đó các tính chất riêng cho tín hiệu số sẽ không đúng cho tín hiệu rời rạc nh hiệu ứng rời rạc biên độ Song trên thực tế, tín hiệu số tồn tại trong các thiết bị xử lý tín hiệu (máy tính số, các vi xử lý số chuyên dụng, các thiết bị điện tử nh điện não đồ, điện tim, máy ghi âm ) v v

Bên cạnh đó, ngời ta còn dùng thuật ngữ xử lý số tín hiệu (Digital Processing Signal) để chỉ ra các phơng pháp số xử lý tín hiệu(bao hàm cả tín hiệu số, tín hiệu rời rạc, tín hiệu tơng tự ) nên nó bao hàm rộng hơn

29

Trang 30

3.2 Tín hiệu rời rạc

Tín hiệu rời rạc theo định nghĩa có thể đợc biểu diễn bằng một dãy các giá trị (thực hoặc phức) với phần tử số thứ n (n nguyên) đợc kí hiệu là x(n) Ta có thể kí hiệu một tín hiệu rời rạc:

x={x(n)} với -∞ < n < +∞ (3.1) x(n) đợc gọi là mẫu thứ n của tín hiệu x, mặc dù x(n) không phải lúc nào cũng

đợc tạo ra bằng cách lấy mẫu tín hiệu liên tục theo thời gian x(t) Quá trình lấy mẫu thờng là mẫu đều, tức các thời điểm lấy mẫu cách đều nhau một khoảng Ts (Ts là chu kì lấy mẫu = 1/Fs với Fs là tần số lấy mẫu) Vì vậy x(n) là cách viết

đơn giản hoá của x(n.Ts)

Một số dãy tín hiệu rời rạc đặc biệt:

• Tín hiệu xung đơn vị hay tín hiệu một mẫu:

30

Trang 31

• Tín hiệu dạng hàm mũ : x(n) = an

Nó có dạng suy giảm khi 0<|a| <1 hay tăng lên khi |a| >1

Hình 3.4 Các phép toán với tín hiệu rời rạc:

Phép nhân hai tín hiệu rời rạc:

x.y = {x(n).y(n)} (3.4) Phép nhân tín hiệu rời rạc với hệ số:

α.x={α.x(n)} (3.5) Phép cộng hai tín hiệu:

x+y = {x(n)+ y(n) } (3.6) Phép dịch: dãy x đợc dịch đi sang phải n0 mẫu thành dãy y

y(n) = x(n-n0) (3.7) Khâu thực hiện trễ đi một đoạn đợc kí hiệu bằng khối có chữ D ( chữ đầu của Delay có nghĩa là trễ)

Hình 3.5 Biểu diễn khâu trễ một chu kỳ lấy mẫuCác hệ thống xử lý tín hiệu rời rạc:

Một hệ xử lý tín hiệu sẽ xác lập mối quan hệ nhân quả giữa tín hiệu vào và tín hiệu ra Ta có thể biểu diễn hệ xử lý bằng mô hình toán học thông qua một phép biến đổi toán tử T nào đó Tín hiệu vào x(n) còn đợc gọi là tác động, còn tín hiệu ra đợc gọi là đáp ứng của hệ xử lý Ta có thể diễn tả quan hệ nh sau:

y(n) = T[x(n)] (3.8)

31

Trang 32

Hình 3.6

Một hệ thống đợc gọi là tuyến tính nếu nh nó thoả mãn nguyên lý xếp chồng: giả sử y1(n) và y2(n) là đáp ứng của hệ tơng ứng với tác động vào là x1(n) và

x2(n) Hệ là tuyến tính nếu và chỉ nếu:

T[a.x1(n) + b.x2(n)] = a.T[x1(n)] + b.T[x2(n)] = a.y1(n) + b.y2(n) với a, b là hai hệ

k là thời điểm tác động Một hệ là bất biến theo thời gian nếu nh đáp ứng của hệ

đối với tác động x(n) là y(n) thì đáp ứng của hệ đối với x(n-k) là y(n-k) Nói cách khác nếu tín hiệu vào bị dịch đi một đoạn thời gian là k thì tín hiệu ra cũng bị dịch đi một đoạn là k; mọi hk(n) đơn giản trở thành h(n-k) Trong trờng hợp tổng quát, với biến độc lập không hẳn là thời gian thì hệ có tính chất trên đ-

ợc gọi là hệ bất biến dịch hay nói ngắn gọn hơn là hệ bất biến Bên cạnh đó, ng ời

ta còn dựa vào độ dài của đáp ứng xung để phân ra hai loại hệ: hệ có đáp ứng xung với độ dài hữu hạn (FIR system : Finite Impulse Response System) và hệ có

đáp ứng xung có độ dài vô hạn (IIR system : Infinitive Impulse Response System)

Hệ có nhớ và hệ không nhớ:

Một hệ có tín hiệu ra chỉ phụ thuộc vào tín hiệu vào ở cùng thời điểm đợc gọi là hệ không nhớ Ngợc lại một hệ có tín hiệu ra phụ thuộc vào tín hiệu vào ở các thời điểm khác đợc gọi là hệ có nhớ

32

Trang 33

Hệ nhân quả:

Các tín hiệu ra chỉ phụ thuộc tín hiệu vào trong quá khứ và hiện tại đợc gọi là

hệ nhân quả Nghĩa là nếu ta có x(n)=0 với mọi k<k0 thì ta phải có y(n) =0 với mọi k < k0 Hệ nhân quả là các hệ duy nhất có thể thực hiện đợc một cách vật lý trong thực tế Tuy nhiên trên phơng diện lý thuyết do một số đặc tính đặc biệt, chúng ta cũng xem xét đến các hệ không nhân quả ví dụ nh mạch lọc thông thấp

x ( ) ( ) (3.11)hoặc viết cách khác:

(

k

k h k n

x (3.12)Nếu đáp ứng xung có độ dài hữu hạn thì

(

N

k

k h k n

x (3.13)

Tính ổn định:

Là điều kiện ràng buộc quan trọng khác cần xét đến trong thực tế đối với các

hệ xử lý Theo định nghĩa một hệ đợc gọi là ổn định hay hệ BIBO( Bounded Input, Bounded Output) nếu nh đáp ứng của hệ luôn luôn bị chặn đối với tác

động vào bị chặn Thuật ngữ bị chặn đợc hiểu là có giá trị hữu hạn

Định lý: Một hệ là ổn định nếu và chỉ nếu đáp ứng xung thoả mãn điều kiện sau:

h ( )

3.3 Phép biến đổi Fourier của tín hiệu rời rạc.

ý tởng biểu diễn một hàm phức tạp nh là một tổ hợp tuyến tính của các hàm cơ bản có dạng đơn giản đã đợc trình bày trong nhiều tài liệu Ví dụ một hàm x(n) có thể biểu diễn trong khoảng [u1,u2]:

x(n) = ∑∞

=

Ψ 0

) (

i khi0

0)(L j

i khi

L

(3.15)

33

Trang 34

thì các hệ số αi sẽ độc lập với nhau Khi đó ngời ta nói rằng x(u) đợc khai triển thành chuỗi các hàm trực giao Ψi(u) Nếu L=1 thì các hàm Ψi(u) đợc gọi là trực chuẩn Nói cách khác trong hệ toạ độ các hàm trực giao Ψi(u), hàm x(u) sẽ có các toạ độ αi Về phơng diện toán học, tín hiệu đợc biểu diễn bằng các hàm (kể cả tín hiệu tơng tự và rời rạc) Hoàn toàn phù hợp với định nghĩa của tín hiệu rời rạc và số, chúng ta xem các hệ số αi nh là một tín hiệu số biểu diễn tín hiệu tơng

tự x(u)

Trong số các khai triển thành các hàm trực giao thì khai triển thành chuỗi Fourier hiển nhiên là một khai triển đợc dùng phổ biến nhất trong xử lý tín hiệu

ở đây các hàm điều hoà là các hàm trực chuẩn

Tín hiệu điều hoà phức (có dạng mũ phức ejk τ ) đóng vai trò quan trọng đặc biệt khi phân tích hệ tuyến tính bất biến (TTBB) là vì tính chất của hệ TTBB: đáp ứng trong trạng thái ổn định đối với tín hiệu vào điều hoà cũng là tín hiệu điều hoà có cùng tần số với biên độ và pha có thể thay đổi Tính chất này dẫn đến có thể biểu diễn tín hiệu theo các thành phần là tín hiệu điều hoà (thực hoặc phức)

Nh ta đã biết, trên góc độ phân tích tín hiệu theo thời gian, xung đơn vị đợc dùng

nh tín hiệu vào cơ bản để xây dựng công thức tính tổng chập, diễn tả mối quan

e

X ( ω) ( ). ω (3.16) Phép biến đổi Fourier ngợc của tín hiệu rời rạc:

2).

( )

x j πfn (3.19)

Điều kiện tồn tại của phép biến đổi Fourier của tín hiệu rời rạc:

X(f) tồn tại nếu nh vế phải của nó hội tụ Điều này không phải lúc nào cũng xảy

ra Ví dụ hàm bậc thang, hay hàm điều hoà thực hoặc phức tồn tại với mọi n

Điều kiện để X(f) hội tụ là một đề tài cho nhiều định nghĩa và giải thích Chúng

ta hãy xem xét một trong các điều kiện này

34

Trang 35

Do modul của số hạng e-j2 π fn luôn bằng một, điều kiện để X(f) tồn tại là:

)()

Hàm modul X(f) theo f gọi là phổ biên độ của tín hiệu x(n), còn hàm

θ(f)=arg[X(f)] đợc gọi là phổ pha

Cuối cùng φ(f) = X(f)2 đợc gọi là phổ năng lợng, biểu diễn sự phân bố theo tần số của năng lợng tín hiệu x(n)

Lấy mẫu và khôi phục tín hiệu liên tục theo thời gian.

Nh chúng ta đã biết, phơng pháp tạo tín hiệu rời rạc và tín hiệu số thông dụng là lấy mẫu tín hiệu tơng tự xa(t) Thông thờng các mẫu đợc lấy cách đều nhau với chu kỳ lấy mẫu là Ts (tần số lấy mẫu Fs=1/Ts) Với mọi Ts thì tín hiệu nhận đợc luôn là tín hiệu rời rạc Chỉ trong trơng hợp ta muốn khôi phục lại tín hiệu xa(t) ban đầu từ các mẫu xa(n.Ts) thì nảy sinh ra điều kiện ràng buộc đối với cách chọn lựa giá trị Ts Điều kiện ràng buộc này đợc phát biểu thành định lý lấy mẫu

Định lý lấy mẫu Nyquits (còn gọi là định lý lấy mẫu Shannon):

Một tín hiệu tơng tự xa(t) có dải phổ hữu hạn với giới hạn trên là Fmax(Hz) (tức

là phổ bằng 0 khi nằm ngoài dải -Fmax Fmax ) Ta chỉ có thể khôi phục lại xa(t) một cách chính xác từ các mẫu xn(n.Ts) nếu nh

Fs≥ 2Fmax hay 1/(2.Fmax) ≥ Ts

Định lý lấy mẫu có một vai trò hết sức quan trọng Đó lầ cầu nối giữa hai ngành hỗ trợ nhau: Xử lý tín hiệu tơng tự và Xử lý tín hiệu rời rạc số Nó đảm

35

Trang 36

bảo cho tất cả các phơng pháp và các hệ thống xử lý tín hiệu số có thể xâm nhập vào các hệ thống xử lý tín hiệu tơng tự.

Để hiểu thêm mối quan hệ giữa tín hiệu rời rạc x(n.Ts) đợc lấy mẫu từ tín hiệu tơng tự xa(t) và bản thân tín hiệu tơng tự xa(t), chúng ta hãy xem xét kỹ thêm cặp tích phân Fourier đối với tín hiệu tơng tự :

=

=

d e j X t

x

dt e t x j

X

t j a

a

t j a

a

).

( 2

π X a(j ).e j nT s d2

s

s

s

T r

T r

nT j a

r

d e j X

/ ) 1 2 (

/ ) 1 2 (

).

( 2

thay Ω=ω/Ts =ω.Fs ta có:

ωπ

ω

π π

d e T

r j T j X T

n

a s

2 1

j

T

r j T

j X T

T

j

T

r j j X T

e

Nh vậy ta nhận thấy rõ mối quan hệ giữa hai phép biến đổi Fourier (của tín hiệu tơng tự và tín hiệu rời rạc có đợc bằng cách lấy mẫu tín hiệu tơng tự) Ta có thể nói tín hiệu lấy mẫu là xếp chồng tuần hoàn với chu kì 2π của phổ tín hiệu t-

ơng tự

36

Trang 37

Khôi phục tín hiệu tơng tự từ tín hiệu lấy mẫu:

Ta có thể khôi phục tín hiệu xa(t) bằng cách cho tín hiệu lấy mẫu đi qua mạch lọc ( tơng tự) thông thấp lý tởng có đáp ứng tần số Hlp(f) với tần số cắt fc= Fs/2 Phổ của tín hiệu xa(t) sẽ đợc lọc lại chính xác chỉ với điều kiện:

Ωmax < π/Ts tức là Fs > 2 Fmax (thoả mãn định lý lấy mẫu)

khi đó trong không gian tần số:

T t

/

)/sin(

π

π

Việc khôi phục lại tín hiệu cần phải thoả mãn định lý lấy mẫu cũng nh hiện ợng tuần hoàn của phổ tín hiệu rời rạc cũng còn đợc thể hiện qua ví dụ sau: khi tín hiệu hình sin(ωt) = sin(2πft) đợc lấy mẫu với tần số Fs ta đợc x(n) Tuy nhiên x(n) còn có thể hiểu là mẫu của sin(2π(f+m.Fs)t) với mọi m nguyên Điều này đ-

t-ợc thể hiện qua phổ tín hiệu : x(n) có phổ là các vạch tuần hoàn chu kì Fs Hình dới đây mô tả hai tín hiệu hình sin có chung các mẫu Hiện tợng này gọi là hiện tợng nhầm lẫn tín hiệu Muốn khắc phục ta phải sử dụng các khâu lọc thông thấp

ở cả đầu ra lẫn đầu vào

37

Trang 38

Chơng 4

xử lý âm thanh số

Sóng âm truyền trong không khí là nguyên nhân khách quan gây ra cảm giác

âm cho con ngời Sóng âm không truyền lan trong chân không nhng nó có thể truyền trong các môi trờng khác (rắn, lỏng, khí và gas)

Một Transducer là một thiết bị chuyển đổi năng lợng từ hệ thống này sang cung cấp cho một hệ thống khác Ví dụ, một microphone coi là một transducer

nó chuyển đổi năng lợng sóng âm sang dạng năng lợng điện Năng lợng điện cung cấp bởi microphone tạo nên một tín hiệu tơng tự (analog signal) Tín hiệu t-

ơng tự là tín hiệu liên tục (theo thời gian và biên độ)

Digitization là quá trình chuyển đổi tín hiệu tơng tự sang dạng tín hiệu số (digital signal) hay nó đợc nói gọn là quá trình chuyển đổi tơng tự - số Digitization gồm hai quá trình lấy mẫu (sampling) và lợng tử (quantization) Lấy mẫu là quá trình chuyển tín hiệu tơng tự sang tập các điện áp Lợng tử là quá trình chuyển đổi tập giá trị điện áp sang tập đếm đợc các giá trị số Dữ liệu tơng

tự đợc chuyển sang dữ liệu số đợc gọi là mã hoá PCM PCM là từ viết tắt của Pulse Code Modulation - điều chế xung mã, và là cách điển hình để thực hiện chuyển đổi mọi tín hiệu tơng tự sang dạng số Trên hình 4.1 mô tả sơ đồ mã hoá PCM

Để chuyển đổi ngợc thành tín hiệu analog từ tín hiệu dới dạng PCM, một cặp

bộ chuyển đổi số-tơng tự đợc sử dụng Sơ đồ khối của bộ giải mã PCM có dạng

nh trên hình 4.2

Hình 4.2

Low

pass

fillter

Analog to digital converter

Parallel

to serial converte

PCM

PCM

Serial prallel converter

Digital analog converter

Low pass fillter

39

Trang 39

Xử lý tín hiệu số là một dạng xử lí dữ liệu dới dạng PCM Do đó, nói một cách tổng quát xử lí âm thanh, hình ảnh, ảnh động là các dạng xử lí tín hiệu

số

một chiều, hai chiều và ba chiều Trong đời sống hàng ngày, xử lí tín hiệu số ờng chỉ nghiên cứu các tín hiệu một chiều (một biến số v(t) ) Trong xử lí ảnh ta thờng nói tới tín hiệu có hai biến số I(x,y) Trong chơng này chúng ta chỉ quan tâm tới việc xử lí tín hiệu một biến số, sử dụng ngôn ngữ java để viết các chơng trình ứng dụng

th-4.1 - Tại sao chúng ta cần xử lý tín hiệu số

Tín hiệu số có đợc từ các dạng năng lợng khác nhau và trong các ngành khác nhau (âm thanh, nhiệt, tốc độ, áp suất, phát xạ, đo lờng, ) Các hiện tợng phi vật lý cũng có thể đợc tạo ra dữ liệu số (dữ kiện, tài chính, dữ liệu thống kê, thông tin trên mạng )

Tóm lại, xử lí tín hiệu số đợc nghiên cứu áp dụng trên nhiều lĩnh vực và là một trong các cách xử lí dữ liệu thông dụng ở đây chúng ta chỉ nói tới việc xử lí

âm thanh bằng Java Có một số đặc trng thuận lợi cho việc làm này

• Java có thể chạy các file âm thanh

• Các kĩ năng xử lý có thể đợc áp dụng cho các kiểu dữ liệu khác

• Ta có thể thấy đợc kết quả xử lí

• Đây là một công việc thú vị

Phổ của tín hiệu là gì

Tổng hợp các hàm điều hoà của một tín hiệu đợc gọi là phổ Phổ của tín hiệu

là sự tổng hợp các sóng sine và cosin Nhà toán học pháp Jean Baptisle Joseph der Fourier (1768-1830), đã đa ra dạng phổ của sóng (sóng sine và cosin) đợc phân tích từ một sóng bất kì

Sự tổng hợp (đợc gọi là nguyên tắc xếp chồng) cho dạng sóng gần đúng với dạng sóng thực nếu sóng thực không tuyến tính

Phép khai triển chuỗi lần đầu tiên đợc thiết lập và sử dụng là các hàm chuỗi

điều hoà (còn gọi là chuỗi Furier) Mỗi hàm điều hoà là một thành phần của chuỗi, chính là một thành phần tạo nên sóng phức tạp thực tế Chuỗi đợc viết nh sau:

f x( )=a0 +(a1cost b+ 1sin ) (t + a2 cos2t b+ 2 sin ) 2t + (4.1) trong đó a0,b1, là các hằng số Furier

Ví dụ dạng sóng răng ca đợc tính với bậc thứ k nh sau:

1

) 1 ( sin( ))

1(2

π

với k=10 sóng có dạng sau:

40

Trang 40

Hình 4.3 với k=100 sóng có dạng gần với dạng lý tởng hơn.

θθ

θ cos isin

e i = + (4.4)chúng ta viết lại chuỗi Fourier dới dạng khác Ví dụ nó đợc viết dới dạng tổng các hàm sine-cosin nh sau:

)2

sin(

)2

nf a

t

x

n

n n

41

Ngày đăng: 02/08/2014, 23:46

HÌNH ẢNH LIÊN QUAN

Hình 2.3 2.2   Lớp mạng trong JDK - Đồ án xử lý ảnh trong Java
Hình 2.3 2.2 Lớp mạng trong JDK (Trang 19)
Hình 3.3 : Tín hiệu bậc thang - Đồ án xử lý ảnh trong Java
Hình 3.3 Tín hiệu bậc thang (Trang 30)
Hình 3.7 : Hiện tợng nhầm tín hiệu, hai tín hiệu sin có cùng chung các mẫu rời  rạc - Đồ án xử lý ảnh trong Java
Hình 3.7 Hiện tợng nhầm tín hiệu, hai tín hiệu sin có cùng chung các mẫu rời rạc (Trang 37)
Hình 5.9 Cửa sổ Hanning - Đồ án xử lý ảnh trong Java
Hình 5.9 Cửa sổ Hanning (Trang 78)
Hình 5.10 Bộ lọc thông cao - Đồ án xử lý ảnh trong Java
Hình 5.10 Bộ lọc thông cao (Trang 79)
Hình 7.6    Làm lệch ảnh theo trục x và y - Đồ án xử lý ảnh trong Java
Hình 7.6 Làm lệch ảnh theo trục x và y (Trang 118)
Hình 7.8 Phép quay ảnh ngợc, mỗi lần quay 36 0 - Đồ án xử lý ảnh trong Java
Hình 7.8 Phép quay ảnh ngợc, mỗi lần quay 36 0 (Trang 119)

TỪ KHÓA LIÊN QUAN

TRÍCH ĐOẠN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w