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

luận văn công nghệ thông tin thiết kế hệ thống nhập điểm tự động - svth trần viết khôi

73 296 0

Đ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 73
Dung lượng 888,99 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Bảng điểm này có các đặc tính rất thuận tiện cho việc nhận diện điểm là có cột điểm được tô đen do đó khi ta nhận diện được toạ độ của điểm tô thì ta sẽ xác định được điểm và số thứ tự c

Trang 1

LỜI CẢM ƠN

Em xin chân thành cám ơn Khoa Công Nghệ Thông Tin, trường Đại

Học Dân Lập Kỹ Thuật Công Nghệ, Tp HCM đã tạo điều kiện cho em thực

hiện đề tài này

Em xin chân thành cám ơn thầy Huỳnh Văn Đức đã tận tình hướng

dẫn, chỉ bảo em trong suốt thời gian thực hiện đề tài

Em cũng xin chân thành cảm ơn quý thầy cô trong Khoa đã tận tình

giảng dạy, trang bị cho chúng em những kiến thức cần thiết trong suốt quá

trình học tập tại trường, và cũng xin gởi lòng biết ơn sâu sắc đến Cha, Mẹ,

các anh chị và bạn bè đã ủng hộ, giúp đỡ, động viên em trong những lúc

khó khăn cũng như trong suốt những năm học vừa qua

Mặc dù đã cố gắng hoàn thành luận văn với tất cả những nỗ lực của

bản thân, nhưng luận văn chắc không tránh khỏi những thiếu sót nhất định,

kính mong sự cảm thông và tận tình chỉ bảo của quý Thầy Cô

Sinh viên thực hiện

Trần Viết Khôi

Trang 2

LỜI TỰA

Ngày nay, với sự phát triển như vũ bão của ngành công nghệ thông tin

đã và đang đưa con người chúng ta dần tiến đến một kỷ nguyên mới kỷ

nguyên của tin học hoá trong đời sống Tin học đã len lõi vào mọi ngóc

ngách của cuộc sống đưa con người đến với một cuộc sống chất lượng hơn

Tin học còn giúp con người làm việc một cách hiệu quả hơn, năng suất cao

hơn ,… và tiết kiệm được nhiều thời gian để tập trung vào những công việc

khác hoặc các hoạt động khác (như vui chơi, giải trí)

Mục tiêu của nhà nước ta là tin học hoá các công việc văn phòng Để

làm được điều đó các nhà khoa học đã cố gắng tạo ra những chương trình để

phục vụ cho công việc trên Một trong những công việc văn phòng ở trường

học là việc nhập điểm thi của học sinh, sinh viên vào máy Do trường học

ngày càng được mở rộng, ngày càng có nhiều người tham gia học dẫn đến

công việc nhập điểm vào sổ sách ngày càng nhiều Do đó công việc nhập

điểm vào máy đòi hỏi ở người nhập phải có một sự cần mẩn và sự tập trung

cao độ trong việc nhập điểm vì nếu người nhập nhập điểm sai thì sẽ ảnh

hưởng nghiêm trọng đến kết quả học tập của người học Để cho công việc

nhập điểm trên hiệu quả hơn và ít tốn thời gian hơn thì đòi hỏi phải có một

cách nhập điểm tự động hơn

Ngày nay với sức mạnh của ngành công nghệ thông tin và dưới sự hỗ trợ

của các thiết bị phần cứng (như máy Scan, máy in …) thì sự thay thế công

việc nhập điểm bằng tay không còn khó nữa mà thay vào đó là việc nhập

điểm hoàn toàn do máy tính đảm trách muốn vậy ta phải có một chương

trình “Nhập điểm tự động”

Để tiếp cận và góp phần đẩy mạnh sự phát triển của ngành giáo dục

ở Việt Nam , chúng em xin trình bày “Hệ thống nhập điểm tự động”

Trong khuôn khổ thời gian cho phép để làm một đề tài tốt nghiệp có

thể chúng em chưa hoàn tất đầy đủ chức năng , tính linh hoạt và

phổ biến của hệ thống Sau này nếu điều kiện cho phép , đề tài này

có thể phát triển rộng hơn về quy mô hoạt động sao cho hoàn

chỉnh và phù hợp với thực tế

Chúng em luôn luôn ghi nhớ công ơn các thầy cô đã dạy dỗ để

chúng em có được như ngày hôm nay Chúng em xin chân thành

cảm ơn thầy Huỳnh Văn Đức đã tận tình giúp đỡ chúng em hoàn

thành đề tài tốt nghiệp này

Sinh viên

Trần Viết Khôi

Trang 3

NHẬN XÉT CỦA GIẢNG VIÊN

Trang 4

Mục lục

Chương 1: Yêu cầu của đề tài

1 Đặt vấn đề : 8

2 Giới hạn vấn đề và phát biểu bài toán : 8

2.1 Giới hạn vấn đề : 8

2.2 Phát biểu bài toán : 8

3 Phân tích dữ liệu đầu vào và ra: 8

3.1 Mô tả bảng điểm: 9

3.1.1 Phần tựa: 9

3.1.2 Phần thân: 9

3.1.3 Phần cuối: 9

3.2 Mô tả ảnh điểm : 11

3.3 Các dữ liệu đầu ra : 12

4 Những vấn đề cần được giải quyết : 12

5 Yêu cầu của đề tài : 12

5.1 Về mặt ứng dụng 12

5.2 Về mặt kỹ thuật 12

5.3 Một số yêu cầu khác : 12

Chương 2: Phân tích vấn đề và đưa ra giải thuật 1 Các vấn đề về đọc file Bitmap : 14

1.1 Nếu ra một số định dạng ảnh khi Scan : 14

1.2 Cấu trúc của window bitmap : 15

1.2.1 Cấu trúc Header : 16

1.2.2 Cấu trúc Info Header : 16

1.2.3 Cấu trúc bảng màu : 17

1.3 Phân tích một số khó khăn khi đọc ảnh bitmap : 17

1.4 Đưa ra cách đọc ảnh khả thi : 18

1.5 Xây dựng giải thuật : 18

1.5.1 Mô tả giải thuật : 18

1.5.2 Lưu đồ giải thuật : 20

1.6 Đoạn chương trình minh hoạ : 21

2 Xử lý màu trong bảng điểm : 23

2.1 Chế độ màu khi Scan : 23

2.2 Lý do phải lọc màu trong bảng điểm : 24

2.3 Đưa ra những khoảng màu được sử dụng để lấy điểm đen : 24

2.4 Xây dựng giải thuật : 24

2.4.1 Mô tả giải thuật : 24

2.4.2 Lưu đồ giải thuật : 25

Trang 5

2.5 Đoạn chương trình minh hoạ : 25

3 Quá trình xử lý ảnh bị biến đổi : 25

3.1 Tại sao phải xử lý ảnh bị biến đổi : 26

3.2 Các loại biến đổi thường gặp trong file điểm : 26

3.2.1 Phép tịnh tiến : 26

3.2.2 Phép quay : 26

3.2.3 Phép biến dạng : 27

3.3 Tại sao chỉ xử lý biến đổi quay : 28

3.4 Các giải pháp để xử lý một ảnh quay : 28

3.5 Xây dựng giải thuật : 29

3.5.1 Tính góc quay : 29

3.5.1.1 Giải thuật tính góc quay : 29

3.5.1.2 Lưu đồ giải thuật : 29

3.5.2 Tính ma trận quay : 30

3.5.2.1 Giải thuật tính ma trận quay : 30

3.5.2.2 Lưu đồ giải thuật : 30

3.5.3 Chuyển đổi toạ độ của một điểm theo ma trân quay : 31

3.5.3.1 Giải thuật chuyển toạ độ : 31

3.6 Đoạn chương trình minh hoạ : 31

3.6.1 Tính góc quay : 31

3.6.2 Tính ma trận quay : 31

3.6.3 Chuyển toạ độ theo ma trận quay : 32

4 Xác định mốc : 32

4.1 Tại sao phải sử dụng mốc : 33

4.2 Xác định các khoảng ảnh có thể xác định được mốc : 33

4.3 Giải pháp để xác định tâm của một mốc : 34

4.4 Xây dựng giải thuật : 35

4.4.1 Xác định mốc có trong một khoảng điểm : 35

4.4.1.1 Giải thuật : 35

4.4.1.2 Lưu đồ : 36

4.4.2 Xác định một pixel đen có thuộc một mốc : 37

4.4.2.1 Giải thuật : 37

4.5 Đoạn chương trình minh hoạ: 39

4.5.1 Chương trình xác định mốc trong một khoảng điểm : 39

4.5.2 Chương trình xác định một pixel có thuộc một mốc : 39

5 Xác định điểm tô đen : 40

5.1 Tại sao phải xác định điểm tô đen : 40

5.2 Xác định các khoảng ảnh có thể tìm được điểm tô : 41

5.3 Giải pháp để xác định tâm của điểm tô : 42

5.4 Xây dựng giải thuật : 43

Trang 6

5.4.1 Xác định điểm tô trong một khoảng điểm : 43

5.4.1.1 Giải thuật : 43

5.4.1.2 Lưu đồ : 44

5.4.2 Xác định một pixel đen có thuộc điểm tô : 46

5.4.2.1 Giải thuật : 46

5.5 Đoạn chương trình minh hoạ : 49

5.5.1 Chương trình xác định điểm tô trong một khoảng điểm: 49

5.5.2 Chương trình xác định một pixel đen có thuộc điểm tô : 49

6 Xác định điểm : 52

6.1 Tầm quan trọng của việc xác định điểm : 52

6.2 Xác định các toạ độ có điểm : 52

6.3 Giải pháp để tính điểm : 53

6.4 Xây dựng giải thuật : 54

6.4.1 Giải thuật tính điểm : 54

6.4.2 Lưu đồ tính điểm và vị trí : 56

6.5 Đoạn chương trình minh hoạ cách tính điểm và vị trí : 57

7 Các file mà chương trình xuất ra : 58

7.1 Tầm quan trọng của file này : 58

7.2 Cấu tạo của file điểm : 58

7.3 Cấu tạo của file lỗi : 58

7.3.1 Cấu tạo : 58

7.3.2 Danh sách các lỗi có thể xảy ra : 59

Chương 3: Thiết kế chương trình 1 Quá trình nhập điểm tự động : 60

2 Danh sách các sự kiện của quá trình xử lý điểm : 60

3 Sơ đồ dòng dữ liệu (DFD) về quá trình xử lý nhập điểm tự động: 60

Chương 4: Đánh giá sai số 1 Lý thuyết xác suất thống kê bài toán ước lượng tỷ lệ: 66

2 Aùp dụng để tính toán cho bài toán : 67

Chương 5: Kết luận

Trang 7

CHƯƠNG 1:

YÊU CẦU CỦA ĐỀ TÀI

1 Đặt vấn đề :

Từ trước đến nay trên thực tế ở Việt Nam chưa có một chương trình nào

phục vụ cho việc nhập điểm tự động Đề tài này em rất thích vì nó gắn liền

thực tế và nó là một nhu cầu cần thiết của ngành giáo dục Nếu chương trình

Trang 8

hoạt động tốt nó sẽ giúp ích rất nhiều trong việc nhập điểm, và thông kê

điểm một cách nhanh chóng trong các cuộc thi có số lượng thí sinh tham gia

đông như các cuộc thi đại học …

2 Giới hạn vấn đề và phát biểu bài toán :

2.1 Giới hạn vấn đề :

Vấn đề nhập điểm tự động là một vấn đề rất khó đòi hỏi ta phải có một

khoảng thời gian tương đối dài để giải quyết vấn đề như nhận ra các chữ

viết tay của các thầy (các điểm số), mã số của các thí sinh, các môn học, kì

thi … vấn đề trên đối với chúng em thì rất khó có thể giải quyết được trong

khoảng thời gian là 15 tuần Do đó chúng em đưa ra một cách giải quyết

khác là thay vì nhận dạng chữ viết tay để tìm điểm thì chúng em sẽ nhận

dạng những điểm tô đen trên bảng điểm theo mẫu của trường ĐHDL Kỹ

thuật công nghệ Bảng điểm này có các đặc tính rất thuận tiện cho việc

nhận diện điểm là có cột điểm được tô đen do đó khi ta nhận diện được toạ

độ của điểm tô thì ta sẽ xác định được điểm và số thứ tự của điểm đó trong

bảng điểm

Như vậy vấn đề nhập điểm hoàn toàn tự động đã được chuyển về hướng

là khi nhập điểm thì người sử dụng phải gõ vào số phách, môn, lớp và có

thể là số lần thi Do đó vấn đề ở đây là làm sao nhận dạng được tâm của

các điểm tô và cho ra điểm đưa vào CSDL

2.2 Phát biểu bài toán :

Giáo viên khi chấm điểm xong sẽ đưa bảng điểm lên phòng đào tạo

Người nhập điểm sẽ lấy bảng điểm đưa vào máy Scan, máy Scan cho ra một

file ảnh Bitmap, file ảnh này sẽ được đưa vào “Hệ thống nhập điểm tự

động” cùng với số tờ, môn học, khoá học Chương trình sẽ xử lý chỉnh sữa

sao đó cho ra một file văn bản, file này sẽ được một chương trình cấp giao

diện đọc và xử lý để lấy được điểm và mã số sinh viên tương ứng với bảng

điểm thật và sau đó lưu vào CSDL

“Hệ thống nhập điểm tự động” là hệ thống cho phép người nhập điểm

có thể nhập một bảng điểm tự động vào hệ thống quản lý điểm

3 Phân tích dữ liệu đầu vào và ra:

Dữ liệu đầu vào của chương trình là một bảng điểm theo một mẫu quy

định khi cho vào máy Scan sẽ cho ra một file ảnh, file ảnh này được chương

trình đọc và xử lý sau đó chương trình cho ra hai file một file chứa điểm và

vị trí đã xử lý và một file chứa các lỗi nếu có xảy ra Sau đó một chương

trình xử lý về CSDL sẽ đọc hai file text đó vào xử lý và cho ra điểm, mã số

của sinh viên và mã môn cho vào CSDL Dưới đây là sự mô tả các dữ liệu

trên

3.1 Mô tả bảng điểm:

Trang 9

Phiếu điểm màu chủ đạo là màu đỏ, các thông tin quan trọng có màu

đen hoặc xanh dương, gồm có 3 phần chính : phần tựa, phần thân, phần

cuối

3.1.1 Phần tựa:

Có phần thông tin cho biết bảng điểm này thuộc về trường nào, lớp nào,

khoa nào, thi môn gì, phòng nào, lúc mấy giờ…Ở phần này có một điểm

quan trọng để phục vụ cho công việc vào điểm tự động là nó có một mốc

Mốc là một chấm tròn đen lớn bên góc trái gọi là mốc 1, đường kính đo

được là 4cm nằm cách mép giấy bên trái là 5cm Kế bên là dòng chữ nói về

trường, khoa và lớp… Góc bên phải là khung nhỏ chỉ dẫn cách chấm điểm

đối với bảng điểm này

Từ tâm của chấm tròn đen đến phần thân là 32cm

3.1.2 Phần thân:

Là một bảng gồm có 8 dòng và 32 cột Dòng đầu tiên là dòng tiêu đề và

30 dòng còn lại là thông tin về học sinh hoặc sinh viên và phần điểm thi

Cột đầu tiên là cột thông tin về số thứ tự, cột thứ hai là cột thông tin về mã

số của học sinh hoặc sinh viên, cột thứ ba là phần thông tin về họ và tên của

học sinh hoăc sinh viên, cột thứ tư là thông tin về ngày tháng năm sinh của

học sinh hoặc sinh viên, cột thứ năm là phần thông tin điểm ghi bằng số, cột

thứ sáu là thông tin về điểm tô, trong đó có 10 ô tròn để giáo viên tô đen

tương ứng với điểm trong ô tròn có ghi các số từ 0 đến 10 là phần điểm

tương ứng với phần ô được tô đen Cột thứ bảy là phần ký tên của thí sinh và

cột thứ tám là phần ghi chú của giám thị Mỗi dòng trên phần này tương ứng

với một thí sinh được lưu trong CSDL của trường

Điểm ghi và điểm tô được giáo viên chấm với màu bút có màu đen hoặc

màu xanh da trời và bắt buộc phải như vậy

Vị trí từ tâm của mốc 1 đến cột của điểm tô cách nhau một khoảng chiều

rộng là 107 cm Khoảng cách của mỗi dòng là 6cm, khoảng cách của các ô

tròn trong phần điểm tô tính từ biên của cột điểm của phần điểm tô là 4,5

cm Đường kính của các ô tròn điểm là 3 cm Chiều rộng của cột điểm tô là

46cm

Phần này có chiều rộng là 188cm, chiều cao là 188cm

3.1.3 Phần cuối:

Có các thông tin sau: số sinh viên có trong bảng điểm, số sinh viên dự

thi, số sinh viên đạt sau khi chấm xong, số sinh viên không đạt, chữ ký của

các cán bộ coi thi, chữ ký của các giáo viên chấm thi, chữ ký của thầy

trưởng khoa, ngoài ra nó còn có một thông tin nữa mà không liên quan gì

đến việc thi cử nhưng nó rất quan trọng cho việc nhập điểm tự động là mốc

thứ hai của bảng điểm

Trang 10

Điểm đen này nằm ở góc phải của bảng điểm, có đường kính là 4cm Khoảng

cách từ tâm mốc 1 đến tâm mốc 2 : chiều rộng là 183 cm , chiều cao là 223 cm

Dưới đây là bảng điểm đã được mô tả ở trên

3.2 Mô tả ảnh điểm

Trang 11

Một bảng điểm khi qua máy Scan sẽ cho ra một file ảnh điểm File ảnh

điểm mà chương trình sử dụng phải là ảnh window bitmap có độ phân giải

là 8 bit màu, chế độ màu là màu xám (nghĩa là 225 màu tương ứng với ảnh

chỉ có các pixel sắc độ xám), ảnh không sử dụng các chuẩn nén nào, theo

chuẩn TWAIN, ảnh Scan phải có độ phóng đại 100% Aûnh phải có những

đặc điểm trên thì chương trình mới xử lí được

Aûnh điểm là một sản phẩm của máy Scan mà máy Scan là một thiết bị

vật lí do đó đối với những máy Scan khác nhau đều cho ra những ảnh Scan

khác nhau về màu sắc, kích thước, độ nét của bức ảnh … những khác biệt đó

do rất nhiều nguyên nhân như máy Scan cũ, mới, khác hiệu… Bản thân máy

Scan khi ta Scan cùng một bức ảnh tại nhiều thời điểm khác nhau thì những

ảnh Scan đó cũng không hoàn toàn giống nhau Một bảng điểm khi Scan

cho ra một ảnh Scan đôi khi lại không hoàn toàn giống như ảnh ban đầu ví

dụ : những điểm mốc đôi khi lại không tròn như thực tế … Ngoài ra còn có

những sai lạc do con người gây ra như đặt ảnh vào máy Scan không thẳng,

ảnh bị dơ, ảnh bị dịch chuyển, quay và đôi khi còn bị biến dạng do giấy bị

cong…những biến dạng và sai lệch trên chúng ta không thể nào loại bỏ được

Ơû trong bài này, chúng ta không giải quyết vấn đề ảnh bị biến dạng mà chỉ

giải quyết vấn đề ảnh bị xê dịch, quay và bức ảnh phải rõ nghĩa là các điểm

và mốc phải có màu khác biệt so với màu viền

Các thông số cần quan tâm của một ảnh Scan chuẩn :

 Màu của các mốc và điểm tô phải có giá trị màu trong khoảng 0

-> 85 Nghĩa là ảnh Scan phải có màu tương đối nhìn thấy rõ

 Mốc phải có mật độ các pixel đen từ 100 -> 196 pixel Nghĩa là

mật độ điểm đen của mốc phải có độ lớn tương đối so với các

điểm khác để dễ phân biệt

 Điểm tô đen phải có mật độ các pixel đen từ 30 -> 144 pixel

Điểm tô phải được tô hơn phân nửa của ô cho tô điểm

 Khoảng cách tính được từ tâm mốc 1(ở góc trái trên) đến tâm mốc

2 (ở góc phải dưới) có chiều rộng = 730 pixel, chiều cao= 874

pixel

 Khoảng cách tính được từ tâm điểm mốc một đến vị trí đầu của ô

điểm tô có chiều rộng= 426 pixel và chiều cao= 144 pixel

 Chiều rộng của một ô để tô điểm tính được là 16 pixels  11 ô

điểm là 176 pixel

 Chiều cao của một hàng tính được là 24 pixel  30 hàng là 720

pixel

Aûnh điểm sử dụng để tính điểm phải có đầy đủ hai mốc và độ quay của

ảnh không vượt qua  10 độ được tính từ mốc một

Trang 12

3.3 Các dữ liệu đầu ra :

Đầu ra của chương trình gồm có hai file text có cấu trúc như sau:

Đối với file chứa điểm và vị trí gồm có 2 cột : cột thứ nhất chứa số thứ tự

của thí sinh trong bảng điểm, cột 2 chứa điểm tương ứng với số thứ tự của thí

sinh trong bảng điểm

Đối với file chứa lỗi sẽ chứa lỗi của chương trình nếu nó xảy ra trong

quá trình xử lý tìm điểm và vị trí

4 Những vấn đề cần được giải quyết :

Từ yêu cầu của bài toán đã phát sinh ra một số vấn đề mà ta cần phải

giải quyết để xử lý cho bài toán nhập điểm tự động:

 Làm sao đọc được một ảnh bitmap

 Vấn đề xử lý màu trong bảng điểm

 Vấn đề xử lý ảnh bị biến đổi

 Vấn đề nhận dạng mốc

 Nhận dạng điểm tô đen

 Tính điểm và vị trí

 Xuất dữ liệu

Những vấn đề được nêu ở đây sẽ được giải quyết trong các chương

sau của đề án này

5 Yêu cầu của đề tài :

5.1 Về mặt ứng dụng

Xây dựng một hệ thống nhập điểm tự động, trong đó hệ thống cho phép

người nhập điểm có được các điểm được nhập nhanh và chính xác điểm của

các thí sinh có trong bảng điểm vào trong máy tính (CSDL)

5.2 Về mặt kỹ thuật

Bài toán yêu cầu hệ thống có được những khả năng về mặt kỹ thuật sau:

 Có một máy Scan

 Hệ điều hành Window 9x, 2000

5.3 Một số yêu cầu khác

Ngoài các yêu cầu trên, ứng dụng có thể:

 Dễ dàng cài đặt

 Dễ dàng sử dụng

 Dễ dàng cập nhật và nâng cấp

Trang 13

CHƯƠNG 2:

PHÂN TÍCH VẤN ĐỀ VÀ ĐƯA RA GIẢI THUẬT

1 Các vấn đề về đọc file Bitmap :

1.1 Nếu ra một số định dạng ảnh khi Scan :

Trang 14

SVTH: Trần Viết Khôi Trang 14

Một bức ảnh khi Scan sẽ cho ra một file ảnh ánh xạ lại tất cả những gì

mà bức ảnh có được Do cơ cấu làm việc của máy Scan là nhận dạng ánh

sáng phản chiếu từ bức ảnh thật để cho ra những điểm sáng tương ứng với

những điểm trên bức ảnh, do đó ảnh của máy Scan trả ra là một dạng ảnh

điểm khi qua một trình xử lý đồ hoạ của máy Scan ta sẽ lưu ảnh đó lại với

những định dạng nào ta thích Đối với các loại ảnh dạng vector thì kích

thước của file ảnh rất nhỏ và ảnh hiển thị trên màn hình sẽ không phụ thuộc

vào độ phân giải của màn hình nhưng cơ cấu lưu ảnh của chúng rất phức tạp

do đó để đọc và xử lý ảnh dạng vector là điều rất khó, trong khi đó một ảnh

lưu dưới dạng pixel khi hiển thị trên màn hình sẽ phụ thuộc vào độ phân giải

của màn hình và kích thước file rất lớn đối với những ảnh có độ phân giải

cao nhưng bù lại chúng rất dễ đọc và dễ xử lý

Có rất nhiều định dạng ảnh mà lưu ảnh được với dạng pixel, trong số đó

có Window bitmap là được sử dụng rất nhiều trong các hệ điều hành

Windows và được sử dụng rất nhiều trong các phần mền khác Vì những lý

do trên nên ta sẽ sử dụng file ảnh bitmap dùng cho vấn đề nhận dạng của

bài toán này

1.2 Cấu trúc của window bitmap :

Windows bitmaps thì có ở khắp nơi trên máy tính Dưới các hệ điều hành

của Microsoft chúng ta có thể sử dụng bitmap như icons, cursors, wallpaper,

và các thành phần khác Tuy nhiên, Windows bitmaps thì không được dùng

phổ biến trên mạng Bởi vì hầu hết các file bitmap đều không được nén,

chúng có kích thước rất lớn so với các file được định dạng theo kiểu GIF

hoặc JPEG

Một file Windows bitmap chứa bốn phần: the bitmap file header, the

bitmap info header, the color table, và dữ liệu của ảnh

Lưu ý: Tất cả các con số được lưu trong file bitmap đều dưới dạng Intel

byte được hiểu như là little-endian Điều này có nghĩa là byte đầu tiên trong

file thể hiện một số little-end Ví dụ nếu bạn có một số hex 0x1234 được

định dạng trong little-endian, bạn sẽ viết như sau 0x34 theo sau là 0x12

Đây là kiểu định dạng của Microsoft Nếu bạn dùng Java thì bạn phải đưa

về kiểu định dạng big-endian nghĩa là đưa về dạng số hex ban đầu 0x1234

Bitmap file Header Bitmap Info Header The color table

Trang 15

1.2.1 Cấu trúc Header :

2 Character Loại file (file type) bắt đầu bằng ‘B’ và ‘M’

4 32-bit Int Tổng kích thước của file tính bằng byte

2 16-bit Int Dự trữ

2 16-bit Int Dự trữ

4 32-bit Int Byte-offset của file ở đó bitmap bit thực sự bắt đầu

File type trong bitmap file header cho phép chương trình biết chắc chắn

đây là một file bitmap trước khi xử lý Nếu nó không bắt đầu với “BM” thì

không phải là file bitmap Byte offset for the bitmap thì rất là quan trong,

bởi vì có một vài vùng đệm giữa những bit header và những bit thực sự

Chúng ta cần phải biết có bao nhiêu vùng đệm để bỏ qua

Lưu ý: Kỹ thuật đặt một giá trị đặt biệt tại vị trí bắt đầu của một file ( như

“BM”) thì rất phổ biến Giá trị này thường ám chỉ như một số định dạng Unix

thường sử dụng kỹ thuật này để định nghĩa các loại file

1.2.2 Cấu trúc Info Header :

4 32-bit Int Kích thước của info header (tính bằng byte)

4 32-bit Int Chiều rộng (tính pixels)

4 32-bit Int Chiều cao (tính pixels)

2 16-bit Int Số bitplanes (nên là 1)

2 16-bit Int Số bit trên pixel

4 32-bit Int Loại nén được sử dụng

4 32-bit Int Số byte thực sự trên bitmap (chỉ cần thiết nếu nén được sử dụng)

4 32-bit Int Số pixel nằm ngang trên dụng cụ đo (chỉ dùng cho scaling)

4 32-bit Int Số pixel nằm đứng trên dụng cụ đo (chỉ dùng cho scaling)

4 32-bit Int Số màu thực sự được sử dụng

4 32-bit Int Số màu mà thực sự quan trọng (giúp ta làm giảm số màu sử

dụng)

Trang 16

Nếu loại nén trong bitmap info header là 0 nghĩa là không sử dụng nén

Nếu loại nén là 1, bitmap sử dụng loại nén RLE8 loại nén là 2 chỉ rằng

bitmap sử dụng loại nén RLE4

Nén RLE8 và RLE4 cả hai đều mã hoá theo lược đồ run-length đơn giản

Chỉ khác là RLE4 thì được sử dụng khi bạn có 4-bit pixels, và RLE8 thì được

sử dụng khi bạn có 8-bit pixels Một mã 2-byte có thể chứa số lần lập lại và

giá trị một pixel Số lần lập lại chỉ ra có bao nhiêu lần giá trị pixel trong một

dòng được lập lại Nếu byte đầu tiên của đoạn mã là 0, thì byte thứ hai có

thể chỉ ra bất cứ số nào Điều đó có nghĩa rằng bạn có thể nhảy tới dòng

tiếp theo, hoặc bạn có thể có một số byte không mã hoá theo mã 2-byte

này Bạn có thể hoàn toàn lờ đi mã hoá run-length và hầu như được hỗ trợ

của Windows bitmaps Một vài ảnh thực sự sử dụng mã hoá run-length

1.2.3 Cấu trúc bảng màu :

Sau bitmap info header là bảng màu Màu thì được lưu dưới định dạng

được gọi là RGBQUAD chứa 4 byte Một giá trị RGBQUAD chứa một giá

trị 8-bit cường độ blue, 8-bit cường độ green, 8-bit cượng độ red, và 8-bit 0

Bởi vì tất cả các màu đều được pha trộn từ ba màu red-green-blue, nhưng

nhớ rằng đây thực sự được là một số 32-bit little-endian Nếu bạn đọc một

RGBQUAD và thực hiện sửa lại cho đúng, bạn nên thiết lập chuẩn màu

RGB Số màu trong bảng màu thì được cho trong bitmap info header như là

số màu thực sự được sử dụng

Lưu ý: Nếu bitmap chứa những pixel sử dụng 24-bit màu, thì nó không

có bảng màu bởi vì giá trị màu thì được lưu trữ trong pixel bits

Cấu tạo bảng màu:

1.2.4 Cấu trúc của dữ liệu :

Mọi thứ khác thường nhất thuộc về Windows bitmaps là sự lưu trữ

upside-down Dòng cuối cùng trong bitmap thì được lưu trữ ở dòng đầu và

những dòng đầu thì được lưu trữ ở cuối

Số bit để lưu dữ liệu của ảnh thì được lưu trong phần bitmap info header

và tuỳ vào các loại nén được sử dụng trong file

Điều này sẽ gây phức tạp cho ta khi đọc một ảnh Windows bitmaps Ta

phải đọc dòng đầu của file ảnh bitmap và sau đó lưu vào vị trí dòng cuối

cùng của mảng hiển thị Đối với bitmap lớn hơn 64 Kb thì điều này sẽ rất

khó khăn

Cách đọc dữ liệu ảnh sẽ được mô tả trong chương sau

8-bit Blue 8-bit Green 8-bit Red 8-bit 0

Trang 17

1.3 Phân tích một số khó khăn khi đọc ảnh bitmap :

Aûnh bitmap là một ảnh dạng pixel do đó nó có kích thước rất lớn Một

bảng điểm khi Scan ra file ảnh bitmap (100%) thường có chiều rộng khoảng

783 pixel và chiều cao khoảng 1108 pixel như vậy một ảnh điểm sẽ có tổng

cộng khoảng 867564 pixel tương đương khoảng 804 Kb Để đọc được toàn

ảnh bitmap vào bộ nhớ đòi hỏi máy tính của ta phải có một bộ nhớ lớn và

tốc độ máy phải cao Với nền kinh tế nước ta ngày nay thì rất khó có thể

đáp ứng được Do đó, ta phải có một cách khác để tiến hành việc đọc file

điểm trên, mà nếu ta có được những điều kiện trên thì với một bộ nhớ máy

tính được cấp phát hạng hẹp như của chương trình C++ (64Kb) thì việc đọc

toàn bộ bức ảnh vào bộ nhớ là một chuyện không tưởng; do đó ta chỉ có thể

tìm ra một cách xử lý nào đó để đọc ảnh

Để đọc được một ảnh bitmap thì ta gặp một khó khăn rất lớn là không

đủ bộ nhớ để đọc toàn bộ ảnh bitmap

1.4 Đưa ra cách đọc ảnh khả thi :

Từ những khó khăn đã được nói ở trên dẫn đến việc ta phải tìm cách nào

để đọc được từng phần của bức ảnh ánh xạ nó vào bộ nhớ và tiến hành xử

lý bức ảnh theo kiểu xử lý từng phần

Khi đọc từng phần của bức ảnh ta có được những cái lợi như là không sợ

không đủ bộ nhớ, vì chương trình không đọc hết toàn bộ bức ảnh mà chỉ đọc

những phần quan trọng cần giải quyết, điều này làm cho chương trình chạy

nhanh hơn Ngoài ra, ta còn có những điểm khó khăn như khi đọc từng phần

ta sẽ đọc những nơi nào và có chắc rằng những nơi đó là luôn luôn chính

xác hay không? Do rất nhiều nguyên nhân ảnh hưởng đến bức ảnh Scan do

đó vấn đề nêu trên sẽ không khắc phục được hoàn toàn mà chỉ giải quyết

một phần nào đó thường xảy ra mà thôi

Vấn đề ở đây là ta phải đọc được từng phần của bức ảnh, muốn đọc được

từng phần của bức ảnh phải có được tối thiểu các thông tin sau : khoảng

ảnh muốn đọc, chiều rộng và chiều cao thật sự của bức ảnh

Với giải pháp đã đưa ra ta thấy việc đọc từng phần của bức ảnh là một

giải pháp rất khả thi vì nó không tốn kém nhiều về bộ nhớ và chương trình

ta chạy nhanh

1.5 Xây dựng giải thuật :

1.5.1 Mô tả giải thuật :

Aûnh Scan chưa phải qua xử lý bởi một trình xử lý đồ họa nào Để đọc

được ảnh này đòi hỏi chương trình phải lường trước mọi khả năng có thể xảy

ra ví dụ như đó không phải là ảnh điểm, ảnh quá mờ, ảnh bị biến dạng, ảnh

không nằm đúng vị trí cần thiết,

Trang 18

Như ta đã phân tích ở trên thì một ảnh bitmap có kích thước rất lớn dó đó

ta phải có cách giải quyết là đọc ảnh bitmap theo từng phần Muốn đọc

được từng phần của bức ảnh ta phải có được các thông tin tọa độ góc trên và

tọa độ góc dưới, chiều rộng và chiều cao của ảnh

Giải thuật để đọc ảnh bitmap từng phần:

 Đổi tọa độ của các điểm để phù hợp với toạ độ của file ảnh, cụ

thể là tọa độ y của hai góc Bởi vì file bitmap là một file mà nội

dung của ảnh được lưu ngược nên khi ta đưa tọa độ vào là tọa độ

hiển thị của bức ảnh nếu ta không đổi tọa độ thì ta sẽ nhận được

ảnh không đúng như ý định của ta Tọa độ được tính như sau:

y1=height-y1 y2=height-y2 Khi tiến hành đổi tọa độ xong ta mới tiến hành đọc phần ảnh đó

 Mỗi bức ảnh lớn đều có những phần dư ra ở cuối mỗi dòng Do đó

trước khi tiến hành đọc ảnh ta phải tính được phần dư đó để có

những bước nhảy đúng Mỗi bức ảnh đều có những phần dư khác

nhau do cơ chế lưu ảnh của Microsoft Bitmap (gọi là hiệu ứng lề

của ảnh bitmap) Để đọc ảnh chính xác ta phải khử hiệu ứng lề

của ảnh, công thức để tính hiệu ứng lề dư ra như sau:

du=fileSize-(bitmapOffset+width*height) du=du/height

 Ta tiến hành nhảy đến vị trí của (x1,y1) đọc từng pixel cho đến

x2 Sau đó nhảy đến vị trí của của y1-1 và tiến hành đọc như trên

cứ thế cho đến khi đến vị trí của (x2, y2) thì dừng lại Quá trình

đọc là quá trình đọc ngược từ dưới lên trên nhưng lưu vào mảng là

từ trên xuống dưới

Công thức tính bước nhảy đến toạ độ (x1, y1) có khử hiệu ứng lề:

offset=bitmapOffset+((width+du)*y1)+x1

 Trong quá trình đọc ta tiến hành cùng lúc với việc lọc màu các

điểm khi ấy mảng đọc được trong phần ảnh trên là một mảng toàn

0 và 1 với giá trị 0 là những màu không quan tâm và 1 là những

màu đen Việc lọc màu làm cho quá trình xử lý của ta được đơn

giản vì ta không cần quan tâm là màu này là màu đen … Quá trình

lọc màu và lọc ảnh được tiến hành như sau:

Những điểm nào có màu từ 0 -> 83 thì ta giữ lại và xem nó là điểm đen và lưu nó là 1, còn các điểm khác thì cho là 0

du = fileSize - ( bitmapOffset + width * height)

du = du / height

y = y1 - y2

x = x2 - x1

Trang 19

h= 1

while (h <= y)

Begin

pos = (h - 1) * x offset=bitmapOffset + ((width + du) * (y1 - h)) + x1 // nhảy đến vị trí offset

fseek(in,offset,0) w=0

while ( w < x) Begin

// đọc dữ liệu ảnh fread(&currByte,1,1,in) // lọc màu và gán cho mảng dữ liệu pixels[pos++] = filter(currByte) End

End

Trang 20

1.5.2 Lưu đồ giải thuật :

Begin

End

x1, y1 x2, y2 width,height

w < x

Đúng w++

h <=y

Sai Đúng h++

Sai

Khối lọc màu

Trang 21

1.6 Đoạn chương trình minh hoạ :

Chương trình hiện thực việc xử lí của lưu đồ trên để đọc một khối

các pixel trong file ảnh ra một mảng các pixel:

Hàm mô tả việc đọc một đoạn pixel ra mảng: hàm này có bốn

tham số đưa vào x1,y1,x2,y2 bốn tham số này có kiểu là số nguyên

có ý nghĩa là toạ độ của điểm trái trên và điểm trái dưới của phần

ảnh cần đọc, toạ độ này là toạ độ thật khi ta xem một bức ảnh Hàm

trả về một mảng pixel đã được đọc từ file ảnh

unsigned char* BMPReader::getPixels(int x1,int y1,int x2,int y2) {

// chuyển đổi toạ độ sang toạ độ thật của ảnh

y1=height-y1;

y2=height-y2;

// cấp phát bộ nhớ cho mảng chứa thông tin ảnh (pixel)

if(!(pixels= new unsigned char[long(y1-y2)*(x2-x1)]))

{ printf("khong du bo nho");

Hàm mô tả cách đọc ảnh : hàm bên dưới hiện thực cách đọc ảnh

kiểu RGB không nén ảnh có độ phân giải là 8 bit, nghĩa là trong một

byte được lưu trữ trong file chỉ chứa nội dung của một pixel mà thôi

Hàm này có bốn tham số đưa vào: toạ độ của góc trái trên và góc

phải dưới của phần ảnh trên file bitmap, toạ độ này là toạ độ thực

trên file ảnh Hàm này ngoài chức năng đọc nó còn có chức năng khử

hiệu ứng lề và làm chức năng của bộ lọc màu của ảnh Nguyên tắc

khử hiệu ứng lề khi ảnh đọc đến biên nó phải bỏ qua một số byte do

hiệu ứng lề gây ra, các byte hiệu ứng lề đã được mô tả như ở trên

Hàm này thuộc lớp BMPReader lớp này có chức năng để đọc các file

ảnh bitmap

Trang 22

Hàm có 4 tham số đưa vào là toạ độ hai góc trên và dưới của đoạn

ảnh cần đọc, 4 tham số này có kiểu là số nguyên Hàm này thuộc lớp

BMPReader

void BMPReader::readRGB(int x1,int y1,int x2,int y2) {

//khai báo các biến dùng cho việc di chuyển của con trỏ file

//chứa byte hiện hành

unsigned char currByte;

//chứa chiều rộng và chiều cao của phần pixel cần đọc

//đọc từ trên xuống của bức ảnh

for (int h=1; h <=y; h++) {

//vị trí của phần tử trong mảng pixel long pos = long(h-1)* x;

//vị trí cần đọc giá trị pixel offset=bitmapOffset+((width+du)*long(y1-h))+x1;

//nhảy đến vị trí cần đọc fseek(in,offset,0);

//đọc theo chiều ngang của bức ảnh for (int w=0; w < x; w++) { //đọc giá trị tại vị trí hiện hành fread(&currByte,1,1,in);

//lọc chỉ lấy những điểm màu có giá trị từ 0 đến 83 biến thành giá trị là 1

pixels[pos] = filter(currByte);

pos++;

} } }

Trang 23

2 Xử lý màu trong bảng điểm :

2.1 Chế độ màu khi Scan :

Trong bảng điểm có từ 2 đến 3 màu cơ bản là màu đỏ, xanh dương và

đen Khi Scan ra file ảnh sẽ cho ra rất nhiều cường độ màu khác nhau, bảng

thân trong một điểm đen đã có rất nhiều sắc độ màu hình thành nên điểm

đen Khi scan trên nhiều máy Scan sẽ cho ra nhiều bức ảnh có sắc độ màu

khác nhau, độ sáng tối của ảnh cũng khác nhau

Vấn đề trên là một vấn đề liên quan đến cơ cấu vật lý của máy in và

máy Scan, ta không thể nào khắc phục được Đối với những chế độ màu

khác nhau như chế độ màu 24 bit nghĩa là có 224 màu nếu ta chọn Scan với

chế độ này thì ta sẽ rất khó khăn trong vấn đề lọc màu vì nó sinh ra một

khoảng màu rất lớn, dẫn đến file ảnh của ta cũng rất lớn khó trong việc xử

ly.ù Thay vào đó nếu ta chọn chế độ màu là 8 bit nghĩa là có 256 sắc độ màu

mô tả cho bức ảnh và khó khăn trên được giảm bớt

Do đó việc chọn chế độ màu 8 bit sẽ làm cho công việc xử lý của ta ít

vất vả hơn và chương trình sẽ chạy được nhanh hơn

2.2 Lý do phải lọc màu trong bảng điểm :

Một file ảnh của bảng điểm scan với chế độ màu 8 bit khi nhìn ta thấy

chỉ có những chấm đen và các điểm còn lại có màu nhạt hơn nhưng thật sự

trong những chấm đen và những màu nhạt đó là vô số sắc độ màu khác

nhau Nếu ta xử lý điểm mà không lọc màu thì ta rất dễ lầm lẫn giữa những

màu sắc của chấm đen và những màu chữ và màu viền Do đó làm cho vấn

đề xử lý ảnh của ta trở nên phức tạp để nhận diện các điểm đen trong vô số

các điểm khác của bức ảnh

Khi ta lọc màu chỉ để lại những điểm màu nào cần quan tâm thì việc

nhận diện các màu trở nên đơn giản hơn và làm cho quá trình nhận dạng trở

nên nhẹ nhàng hơn

2.3 Đưa ra những khoảng màu được sử dụng để lấy điểm đen :

Khi khảo sát trên một vài bức ảnh điểm ta nhận thấy những điểm mốc và

những điểm tô đen có sắc màu trong khoảng từ 0 đến 83 những sắc màu lớn

hơn là màu của những màu nhạt Tuy nhiên khoảng màu trên chỉ là tương

đối đúng với một số bức ảnh, với những bảng điểm có sắc độ đậm thì

khoảng màu trên không hoàn toàn loại bỏ được tất cả các điểm màu của

đường viền

Tuy nhiên với khoảng màu từ 0 đến 83 ta sẽ lấy được tương đối mốc của

rất nhiều ảnh điểm và từ các giá trị màu ở mức thấp nhất của các mốc đó ta

có thể lấy ra các màu chính xác của các điểm tô Khoảng màu để lọc các

điểm tô được tính như sau:

Trang 24

Maxcolor = mincolor + 45

Với cách tính khoảng màu như trên thì ta có thể giải quyết vấn đề lọc

màu tốt hơn lấy một khoảng màu lớn và độ lọc màu chính xác hơn đối với

từng bức ảnh, khi đó với những bức ảnh được scan với những máy sacn khác

nhau thì ta sẽ tính ra được những khoảng màu khác nhau Do đó các khoảng

màu của ta có tính chất động và giá trị của nó sẽ phụ thuộc vào bản thân

của từng bức ảnh ( phụ thuộc vào giá trị của mốc)

2.4 Xây dựng giải thuật :

2.4.1 Mô tả giải thuật :

Giải thuật xử lý màu trong bảng điểm được thực hiện như sau: khi đọc dữ

liệu để xác định mốc từ file ảnh ta tiến hành xác định khoảng màu nhỏ nhất

trong mốc đó

Khi có được giá trị khoảng màu được tính như công thức ở trên, ta đưa

khoảng màu đó làm dữ liệu cho bộ lọc Sau đó ta sẽ tiến hành đọc dữ liệu

và so sánh dữ liệu đó có thuộc vào khoảng màu mà ta đã tính toán trước

nếu trùng vào những khoảng màu nào thí ta chuyển dữ liệu của file ảnh đó

về một màu chuẩn ta đã tính trước Nếu bức ảnh ta có nhiều màu thì ta phải

so sánh với lần lược với nhiều khoảng màu tương ưng với những màu đó

Sau đây là quá trình để lấy được khoảng màu lọc:

 Đọc khoảng ảnh có mốc

 Tìm giá trị min của khoảng màu có mốc đó

 Tính khoảng màu cận trên theo công thức

Maxcolor = mincolor + 45

 Đọc khoảng ảnh để xác định điểm đen

 Lấy khoảng màu đã tính được ở trên đưa vào bộ lọc

 Dùng bộ lọc đó để lọc các màu của khoảng ảnh có điểm tô đen

Trang 25

2.4.2 Lưu đồ giải thuật :

Begin

End

Dữ liệu ảnh

So sánh dữ liệu ảnh với

khoảng màu tính trước

Đưa dữ liệu

màu về 1

Đúng

Đưa dữ liệu màu về 0 Sai

2.5 Đoạn chương trình minh hoạ :

Sau đây là đoạn chương trình mô tả bộ lọc màu

Hàm gồm có hai tham số đưa vào là data và maxcolor với ý nghĩa của

các tham số như sau:

Data : có kiểu số nguyên chưa dữ liệu màu của pixel cần lọc

Maxcolor : khoảng cân trên của bộ lọc

Hàm trả về giá trị là dữ liệu đã lọc được có hai giá trị như sau : giá trị 0

hoặc 1 tương ứng, với giá trị 1 là màu trong khoảng màu cần lọc và ngược

lại là những màu không quan tâm

int filter(int data, int maxcolor) {

if(data>=0 && data<=maxcolor) return 1;

return 0;

}

Trang 26

x’=x + tr x

y’=y + tr y

3 Quá trình xử lý ảnh bị biến đổi :

3.1 Tại sao phải xử lý ảnh bị biến đổi :

Trong thực tế một ảnh từ máy scan cho ra thì không ảnh nào là giống

ảnh nào về màu sắc lẫn vị trí Nếu ta lấy một ảnh tương đối thẳng (ảnh ít bị

quay và tịnh tiến ) làm chuẩn để tính điểm và vị trí, khi đó nếu ta có một

ảnh bị biến đổi nhiều thì khi ta áp dụng ảnh chuẩn để tính điểm cho ảnh đó

thì kết quả ta thu được chắc chắn sẽ là một kết quả sai Do đó việc xử lý

biến đổi trước khi tính điểm là một điều cần thiết

3.2 Các loại biến đổi thường gặp trong file điểm :

Thực tế trong bài toán nhập điểm này chỉ có thể xảy ra ba loại biến đổi

thường gặp là biến đổi, quay và biến dạng Do người sử dụng gây ra như để

ảnh không ngay dẫn đến ảnh quay và tịnh tiến hoặc khi scan giấy bị gấp

nếp dẫn đến ảnh bị biến dạng Sau đây là các phép biến đổi đã được sử

dụng:

3.2.1 Phép tịnh tiến :

Để tịnh tiến một điểm P(x,y) từ vị trí này sang vị trí khác trong mặt

phẳng, ta cộng thêm một giá trị mô tả độ dời vào các toạ độ của P Nếu gọi

trx và try lần lượt là độ dời theo trục hoành và trục tung thì toạ độ điểm mới

Q(x’,y’) sẽ là :

{

(trx, try) còn được gọi là vector tịnh tiến hay là vector độ dời

Chúng ta có thể dịch chuyển toàn bộ một đối tượng bằng cách áp dụng

qui tắc trên cho mọi điểm thuộc đối tượng Để tịnh tiến một đoạn thẳng, đơn

giản chỉ cần tịnh tiến hai điểm đầu và cuối của nó rồi sau đó vẽ lại đoạn

thẳng nối hai điểm mới Với đa giác ta tịnh tiến các đỉnh của nó sau đó vẽ

lại đa giác với các đỉnh mới Một cách tương tự để tịnh tiến các đối tượng

như đường tròn, ellipse, ta tịnh tiến tâm của chúng tới vị trí mới rồi vẽ lại

0 0 1 1 1

x

Trang 27

3.2.2 Phép quay :

Phép quay làm thay đổi hướng của đối tượng Một phép quay đòi hỏi

phải có tâm quay, góc quay Góc quay dương thường được quy ước là chiều

ngược kim đồng hồ Ta có công thức biến đổi của phép quay điểm P(x,y)

quanh gốc tọa độ một góc  :

y

y x

x

cos

sin

'

sin

Phép quay quanh một tâm :

Giả sử tâm quay có toạ độ I(x R, y R) ta có thể xem phép quay quanh tâm I

một góc  được kết hợp từ phép biến đổi cơ sở sau:

Tịnh tiến theo vector tịnh tiến (-x R , -y R ) để dịch chuyển tâm quay về

gốc toạ độ (đưa về trường hợp quay quanh gốc tọa độ)

 Quay quanh gốc toạ độ một góc 

Tịnh tiến theo vector tịnh tiến (x R ,y R ) để đưa tâm quay về lại vị trí

0 0 1 1 0 0

0 cos sin

0 sin cos

1

0 1

0

0 0

1

R R R

1 sin

sin cos

1

0 cos

sin

0 sin

cos

R R

3.2.3 Phép biến dạng :

Phép biến dạng là phép biến đổi làm thay đổi, méo mó hình dạng các

đối tượng Hai dạng phép biến dạng thường gặp đó là biến dạng theo

phương trục x và biến dạng theo phương trục y bằng cách thay đổi toạ độ

(x,y) của điểm ban đầu theo cách sau :

Biến dạng theo phương trục x sẽ làm thay đổi hoành độ còn tung độ vẫn

0 1

0 0 1

xy

M

Trang 28

Biến dạng theo phương trục y sẽ làm thay đổi tung độ còn hoành độ vẫn

0 1 0

0

Shx

sh M

xy

shsh yx lần lượt được gọi là các hệ số biến dạng

3.3 Tại sao chỉ xử lý biến đổi quay :

Trong thực tế ta thấy trong ba phép biến đổi trên chỉ có phép biến đổi

tịnh tiến và quay là thường xảy ra nhất và thực tế là như vậy Do đó ta

không cần phải xử lý vấn đề biến dạng ảnh mà nếu ta xử lý vấn đề này thì

theo những công thức ở trên ta có được ba hệ phương trình dẫn đến ta sẽ

giải ra được 6 ẩn mà trên bảng điểm của ta chỉ có hai mốc nên ta chỉ có

được 4 ẩn do đó muốn xử lý quá trình biến dạng của ảnh ta phải cần thêm

một mốc thứ ba dẫn đến ta phải thiết kế lại bảng điểm đã có sẵn để nó có

thêm một mốc nữa Mà vấn đề ảnh bị biến dạng rất ít khi xảy ra cho nên ta

có thể bỏ vấn đề ảnh bị biến dạng

Ta cũng có thể bỏ luôn vấn đề về tịnh tiến ảnh vì nếu ta tịnh tiến ảnh về

vị trí mốc chuẩn và sau đó ta mới quay thì cách đó là chính thống Nhưng

nếu ta xem mốc tìm được là mốc chuẩn và sau đó sẽ quay ảnh về vị trí

chuẩn so với mốc tìm được đó thì ta vẫn giải quyết được vấn đề mà lại thực

hiện ít phép toán hơn

Do những lý do trên nên tiền xử lý ta chỉ cần xử lý ảnh bằng một phép

quay để đưa ảnh về dạng ảnh chuẩn theo vị trí của mốc một

3.4 Các giải pháp để xử lý một ảnh quay :

Để giải quyết vấn đề quay ảnh này đã phát sinh ra hai giải pháp để xử lý

vấn đề trên sau đây là việc mô tả hai cách giải quyết

Giải pháp 1: Từ một ảnh ban đầu ta sẽ quay toàn bộ bức ảnh về vị trí

chuẩn để cho ra một bức ảnh mới hoàn toàn giống với bức ảnh chuẩn và

sau đó ta mới tiến hành xử lý điểm trên bức ảnh hoàn toàn giống với bức

ảnh chuẩn đó Cách giải quyết này hoàn toàn khả thi vì từ một bức ảnh

ta có thể sao chép ra một bức ảnh mới hoàn toàn và nó làm đơn giản hóa

vấn đề cho ta trong quá trình xử lý điểm vì khi ảnh hoàn toàn giống ảnh

chuẩn thì ta xử lý chúng rất nhẹ nhàng do tọa độ đọc ảnh hoàn toàn cố

định Nhưng nó có một khuyết điểm là chương trình ta sẽ rất chậm vì khi

quay toàn bộ bức ảnh để cho ra một bức ảnh mới ta phải đọc qua toàn bộ

bức ảnh cũ Mà như ta đã biết một ảnh điểm dạng bitmap thì rất lớn do

đó khi đọc nó sẽ rất chậm và sau khi quay xong ta còn phải xử lý việc

Trang 29

đọc tiếp ảnh để lấy điểm và vị trí, dẫn đến ta phải đọc ảnh đó gần như

hai lần Do đó ta sẽ không chọn giải pháp này để giải quyết vấn đề quay

ảnh như đã nói

Giải pháp 2: Từ ảnh ban đầu ta tính toán được góc quay và ma trận

quay Ta phải tính toán trên thực tế xem ảnh quay bao nhiêu độ thì

khoảng đọc ảnh mà có toàn bộ các điểm đen cần thiết Sau đó đọc để

tìm các điểm đen trong phần ảnh đó và lấy tâm của điểm đen đó sau đó

ta mới quay tâm đó về vị trí chuẩn theo ma trận quay, rồi mới tính điểm

Cách giải quyết này rất phức tạp và không thể giải quyết được hoàn toàn

đối với những góc quay lớn (trên  7) nhưng chương trình sẽ chạy nhanh

và ích tốn bộ nhớ vì số lần đọc file ảnh rất ít và đọc xong là xử lý điểm

luôn Đối với bài toán này thì góc quay ảnh không lớn vì khe để ảnh của

máy Scan rất nho,û do đó khả năng quay của ảnh một góc lớn thì không

thể xảy ra Vì thế giải pháp này rất phù hợp để giải quyết bài quay ảnh

của chương trình này

3.5 Xây dựng giải thuật :

3.5.1 Tính góc quay :

3.5.1.1 Giải thuật tính góc quay :

Giải thuật tính góc của ảnh được mô tả như sau:

 Từ toạ độ của điểm mốc một ta tính được toạ độ của điểm mốc

2 chuẩn bằng công thức:

Xmc2 = xmt1 + độ dời theo trục x từ mốc 1 đến mốc 2 trên ảnh chuẩn

Ymc2 = ymt1 + độ dời theo trục y từ mốc 1 đến mốc 2 trên ảnh chuẩn

 Từ toạ độ của mốc 2 đọc được trên bức ảnh ta tiến hành áp

dụng công thức tính ma trận quay để tính khi ta có được điểm cần quay và vị trí khi đã quay đến Công thức để tính góc quay ( sin(a), cos(a) ) được tính như sao :

Sin (a) = (dy1*dx-dx1*dy) / (dy*dy+ dx*dx) Cos(a) = ((dx1)+s*dy)/(dx)

Trong đó:

dy= y – yt1 dx= x - xt1 dy’=y’- yt1 dx’=y’ – xt1 ( x,y) là toạ độ của điểm cần quay

và (x’,y’) là toạ độ của điểm cần quay đến

Trang 30

3.5.1.2 Lưu đồ giải thuật :

Begin

End

xmt1, ymt1 xmt2, ymt2

Tính mốc hai chuẩn theo mốc 1

Tính sin và cos theo CT

Sin (a) = (dy1*dx-x1*dy) / (dy*dy+ dx*dx)

Cos(a) = ((dx1)+s*dy)/(dx)

Sin(a) cos(a)

3.5.2 Tính ma trận quay :

3.5.2.1 Giải thuật tính ma trận quay :

Để tính được ma trân quay cần các thông tin sau:

 Tâm quay

 Góc quay

Aùp dụng lý thuyết về quay ảnh ở phần trên ta tính ma trận quay theo

công thức đó

Trang 31

3.5.2.2 Lưu đồ giải thuật :

Begin

End

Góc quay (c, s) tâm quay (xf, yf)

Tính ma trân quay theo công thức :

T[0][0]=c; T[0][1]=s ; T[0][2]=0;

T[1][0]=-s; T[1][1]=c ; T[1][2]=0;

T[2][0]=(1-c)*xf+yf*s; T[2][1]=(1-c)*yf-xf*s; T[2][2]=1;

3.5.3 Chuyển đổi toạ độ của một điểm theo ma trân quay :

3.5.3.1 Giải thuật chuyển toạ độ :

Để chuyển một một toạ độ về vị trí mới theo ma trận quay thì ta nhân

toạ độ đó với ma trận quay công thực được tính như sau:

X mới = T[0][0]* x cũ +T[1][0]* y cũ +T[2][0]

Y mới = T[0][1]* x cũ +T[1][1]* y cũ +T[2][1]

3.6 Đoạn chương trình minh hoạ :

3.6.1 Tính góc quay :

Hàm này có 8 thông số đưa vào là xf, yf, x, y, x1, y1, c, s với ý nghĩa

của mỗi tham số như sau :

xf, yf : toạ độ của góc quay (mốc 1)

x, y : toạ độ muốn quay (mốc 2 đọc từ ảnh)

x1, y1 : toạ độ muốn (mốc 2 chuẩn theo mốc 1)

Tham biến c, s : chưa giá trị của cos(a) và sin(a)

void cos_sin(int xf,int yf,int x,int y,int x1,int y1,float &c,float &s){

int dy,dx,dx1,dy1;

dy=y-yf; dx=x-xf;

dy1=y1-yf; dx1=x1-xf;

s=(dy1*float(dx)-dx1*float(dy))/(float(dy)*dy+float(dx)*dx);

Trang 32

T: là một ma trận dùng để chứa các giá trị quay

c, s :biến chứa giá trị của cos(a) và sin(a)

xf, yf : toạ độ tâm quay

void rotation(matrix T,float c,float s,int xf,int yf){

3.6.3 Chuyển toạ độ theo ma trận quay :

Hàm chuyển toạ độ theo ma trận có 3 tham số đưa vào là x, y, T với ý

Trang 33

4 Xác định mốc :

4.1 Tại sao phải sử dụng mốc :

Nguyên nhân 1: Do ảnh Scan là một ảnh thủ công nó tuỳ thuộc vào

người nhập điểm và ảnh Scan Do đó ảnh Scan không ảnh nào là giống ảnh

nào về kích thước và vị trí của ảnh dẫn đến ta không thể nào xác định được

điểm chính xác của bảng điểm nhập vào Để tính được điểm chính xác ta

phải có được một toạ độ để các điểm khác lấy toạ độ đó làm chuẩn để xác

định được nó đang ở đâu so với toạ độ đó Toạ độ được nói đến được gọi là

mốc để các toạ độ khác tham chiếu đến nghĩa là toạ độ các điểm sẽ được

tính dựa vào toạ độ mốc Đối với bài này thì mốc đó được gọi là mốc 1 (nằm

ở góc trái trên)

Nguyên nhân 2: Do người nhập điểm đặt bảng điểm không thẳng dẫn

đến ảnh điểm sẽ bị quay hoặc tịnh tiến do đó các toạ độ điểm tô không còn

thẳng hàng so với toạ độ mốc 1 cho nên khi ta tính điểm và vị trí sẽ không

còn chính xác nữa Điều này dẫn đến việc ta phải có thêm một mốc nữa để

xác định được góc quay của ảnh từ đó tất cả các điểm sẽ được quay về vị trí

chuẩn so với vị trí mốc 1 Mốc được nói ở trên ta gọi là mốc 2 (nằm ở vị trí

góc phải dưới của ảnh)

Nguyên nhân 3: Do có rất nhiều loại máy Scan mà mỗi máy Scan sẽ cho

những khoảng màu hoàn toàn khác nhau nên không thể biết được chính xác

khoảng màu của các điểm tô đó Do đó khi ta dựa vào khoảng màu của mốc

1 ta sẽ suy ra được khoảng màu của các điểm tô

Ba nguyên nhân trên cho ta thấy tầm quan trọng của việc xác định mốc

để giải quyết bài toán này Đó là ba lý do chính cho ta thấy được vấn đề tại

sao phải xác định mốc

4.2 Xác định các khoảng ảnh có thể xác định được mốc :

Do bảng điểm có kích thước rất lớn, có rất nhiều phần ảnh nếu ta kiểm

tra tất cả các phần ảnh để tìm ra mốc thì chương trình của ta sẽ phải đọc ảnh

rất nhiều để tìm được mốc dẫn đến chương trình có thể sẽ thực thi rất chậm

và không ổn định Mà trên thực tế thì chỉ có một khoảng điểm là có khả

năng có mốc Đó là lý do ta phải xác định khoảng điểm có mốc

Vấn đề của chương này đề ra là làm sao xác định được tương đối chính

xác tâm của điểm mốc Muốn xác định tương đối chính xác tâm của điểm

mốc ta phải biết được khoảng điểm mà có mốc, và phải xác định khoảng

điểm đó nằm ở đâu trên bức ảnh Như ta đã biết, bảng điểm có hai mốc

nằm ở vị trí trái trên và phải dưới của bảng điểm nhưng khi Scan cho ra ảnh

điểm thì do ảnh có thể bị tịnh tiến, quay nên điểm mốc cũng không nằm tại

một vị trí cố định mà sẽ nằm ở vị trí tuỳ thuộc vào ảnh bị quay bao nhiêu và

Trang 34

tịnh tiến bao nhiêu Vấn đề ở đây là ta phải tìm ra được những vị trí nào mà

mốc xuất hiện khi ảnh quay và tịnh tiến trong khả năng bài toán cho phép

Để giải quyết vấn đề trên ta phải qua thực nghiệm đối với mọi khả năng

có thể xảy ra đối với bài toán để tìm ra được khoảng ảnh để xác định được

mốc Qua thực nghiệm tính được khoảng điểm có khả năng xác định được

mốc 1 nằm trong khoảng (0,0) đến (200,200) và khoảng ảnh có khả năng

xác định được mốc 2 nằm trong khoảng ( w-100 , ymt1+743 ) đến ( w ,

ymt1+843 ) với w là chiều rộng của ảnh và ymt1 toạ độ y của mốc 1

4.3 Giải pháp để xác định tâm của một mốc :

Giải pháp để xác định tâm của một mốc được mô tả như sau:

Tìm tuần tự trên phần ảnh có mốc, nếu phát hiện ra điểm đen thì dừng

lại và kiểm tra xem điểm đen đó có thuộc mốc hay không nếu có thì xác

định tâm của mốc và ngưng việc tìm mốc, nếu không phải là mốc thì tiếp

tục tìm điểm đen trên phần ảnh đó

Có hai phương pháp để thực hiện việc kiểm tra một điểm đen có thuộc

mốc hay không được mô tả như sau:

Giải pháp 1: Phương pháp quét hình chữ thập

Khi ta phát hiện ra một pixel đen, từ pixel đen đó ta quét ngang tìm xem

trên dòng pixel đen đó có bao nhiêu pixel đen, sau đó ta lấy pixel đen ở

giữa các pixel đen trên hàng đó, sau đó ta tiến hành quét theo cột tại vị trí

của pixel đen giữa đó để tìm xem trên cột đó có bao nhiêu pixel đen Nếu

số pixel đen trên cột đó nằm trong khoảng từ 12 đến 14 pixel thì ta mới tiếp

tục công việc kiểm tra, sau đó lấy điểm giữa của các pixel trên trên cột đó

và tiếp tục quét ngang qua hai bên để tìm số pixel đen ở hai bên Nếu số

pixel đen ngang đạt được từ 12 dến 14 pixel thì dừng và khẳng định pixel

đen ở trên là pixel thuộc mốc, từ đó suy ra tâm của điểm đen là điểm giữa

của dòng và cột

Giải pháp này có một ưu điểm là số lần kiểm tra một pixel đen có thuộc

mốc rất ít dó đó chương trình sẽ kiểm tra rất nhanh, nhưng nó có một khuyết

điểm là rất dễ dẫn đến sai lầm trong việc nhận dạng mốc do trong ảnh điểm

có rất nhiều thứ thoả mãn với cách quét hình chữ thập

Giải pháp 2: Phương pháp quét đóng khung

Khi ta phát hiện ra điểm đen, thì từ pixel đen đó ta sẽ quét theo hàng

ngang 14 pixel tìm xem trên dòng pixel đen đó có bao nhiêu pixel đen, sau

đó ta dùng một công thức sau để tính biên đặt khung quét:

xcd = xcd – (14 – so pixel đen trên dòng đó)/2

Sau khi biết được biên để đặt khung ( khung có chiều rộng 14 pixel và

chiều ngang 14 pixel ) ta tiến hành quét trong khung lần lượt từ trên xuống

Trang 35

để tìm tổng số điểm đen, sau khi quét hết khung ta tiến hành kiểm tra tổng

số pixel trong khung đó Nếu tổng số pixel đen trong khung đạt được từ 100

đến 196 pixel đen thì ta xác định pixel đen đó là pixel đen của mốc Sau đó

ta tiến hành xác định tâm của mốc và ngưng việc kiểm tra Nếu không phải

là pixel đen của mốc thì ta tiến hành quét và để tìm số pixel để kiểm tra

Giải pháp này có một ưu điểm là nó xác định pixel đen thuộc mốc rất

chính xác và ít khi bị lầm lẫn trong việc nhận dạng, nhưng cũng có khiếm

khuyết là phải kiểm tra quá nhiều điểm mới xác nhận được một pixel đen

có thuộc mốc hay không Ta cũng có thể khắc phục được phần nào giải

pháp này bằng cách tạo thêm một số điều kiện để loại trừ những pixel đen

không thuộc mốc

Kết luận:

Trong hai giải pháp trên ta nhận thấy giải pháp một rất phức tạp mà độ

chính xác không cao do nó rất dễ kiểm tra nhầm lẫn mốc Mà chương trình

của ta đòi hỏi việc xác định mốc phải chính xác Còn giải pháp thứ hai thì

tương đối chính xác hơn nhưng chương trình sẽ phải quét nhiều hơn Do

những ưu khuyết điểm của hai giải pháp trên ta thấy việc chọn giải pháp 1

là không khả thi vì độ chính xác của giải pháp này không cao Vì vậy ta sẽ

chọn giải pháp 2 để giải quyết vấn đề nhận dạng mốc của bài toán này

4.4 Xây dựng giải thuật :

Từ ưu điểm và khuyết điểm của hai giải pháp trên ta đi đến quyết định

chọn giải pháp 2 để xây dựng giải thuật xác định mốc Giải thuật chia làm

hai phần: phần đầu xác định mốc trong một khoảng điểm và phần hai xác

định một pixel đen có thuộc một mốc hay không Giải thuật được mô tả như

sau:

4.4.1 Xác định mốc có trong một khoảng điểm :

4.4.1.1 Giải thuật :

Giải thuật xác định mốc được mô tả như sau:

Bước 1: Đi theo chiều từ trên xuống của khoảng điểm

Bước 2: Đi theo chiều từ trái qua phải của khoảng điểm

Bước 3: Nếu phát hiện pixel đen thì kiểm tra xem pixel đen đó có

thuộc mốc hay không

Nếu có thì lấy tâm của mốc và thoát Nếu không thì quay lại bước 1, bước 2 i= 0

j= 0

Trang 36

While ( i< height)

Begin While (j<width) Begin

if( pixel[i][j] =1) then if(xacdinhdiemmoc( j, i, width, height, pixel, x, y)) then begin

xm = x

ym = y exit end j=j+1 End i=i+1 End

Ngày đăng: 25/12/2014, 19:40

TỪ KHÓA LIÊN QUAN

TRÍCH ĐOẠN

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

  • Đang cập nhật ...

TÀI LIỆU LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w