intTypePromotion=1
zunia.vn Tuyển sinh 2024 dành cho Gen-Z zunia.vn zunia.vn
ADSENSE

Chương 4 : Phần mềm xử lý ảnh

Chia sẻ: Nguyễn Nhi | Ngày: | Loại File: PDF | Số trang:12

191
lượt xem
29
download
 
  Download Vui lòng tải xuống để xem tài liệu đầy đủ

PHẦN MỀM XỬ LÝ ẢNH 4.1 GIỚI THIỆU Những phần khác của cuốn sách này sẽ nhằm vào các thuật giải sử dụng trong xử lý ảnh số và các thành phần phần cứng để thực hiện những công nghệ này. Trong chương này, chúng ta sẽ nói về sự tổ chức của những chương trình máy tính thực hiện các phép toán. Đặc biệt, chúng ta sẽ xem xét phần mềm được thiết kế, phát triển và đưa ra cho người sử dụng như thế nào. Kiến thức về quá trình này có ích đối với các nhà phát triển...

Chủ đề:
Lưu

Nội dung Text: Chương 4 : Phần mềm xử lý ảnh

  1. CHƯƠNG 4 PHẦN MỀM XỬ LÝ ẢNH 4.1 GIỚI THIỆU Những phần khác của cuốn sách này sẽ nhằm vào các thuật giải sử dụng trong xử lý ảnh số và các thành phần phần cứ ng để thực hiện những công nghệ này. Trong chương này, chúng ta sẽ nó i về sự tổ chức của những chương trình máy t ính thực hiện các phép toán. Đặc biệt, chú ng ta sẽ xem xét phần mềm được thiết kế, phát triển và đưa ra cho ngư ời sử dụ ng như thế nào. Kiến thức về quá trình này có ích đố i vớ i các nhà phát triển và cũ ng như ngư ời sử dụng. Đối với các nhà phát triển, nó có thể tránh sự cố gắng uổng phí và sự thực hiện chán ngắt. Đố i với người sử dụng, nó có thể trợ giúp sự định giá phần mềm và sự thực hiện dự án. Chương này cung cấp mộ t cái nhìn khái quát về những chủ đề quan trọng nêu trên. Chúng tôi lưu ý rằng sự quan trọ ng của những vấn đề đó có liên quan đặc biệt đến biểu diễn số và chỉ ra nhiều tài liệu quan trọ ng về chủ đề này. Trong dạng đầy đủ nhất của nó , như với sản phẩm phần mềm thương mại, quá trình phát triển phần mềm bao gồ m nhiều giai đo ạn. Pha thiết kế nhận thức thiết lập các đặc tính hoạt độ ng và hàm cơ bản, sau đó một thuật giải sẽ nghiên cứu.......hạn chế nhữ ng cô ng nghệ có thể thực hiện được. Tiếp theo, pha mã hoá tạo ra......đầu tiên... bộ phần mềm. Trong pha chạy thử và duyệt lại, những thiếu sót về k ỹ thuật sẽ được sửa chữa và những ý tưởng mới sẽ được hợp nhất vào chương trình. Sự cung cấp tài liệu ngư ời sử dụ ng miêu tả cách thức đ iều khiển hệ thống và sự cung cấp tà i liệu cô ng nghệ g iải thích cấu trúc vật lý và logic của nó. Cuố i cùng, phần mềm đ ược phát hành và hỗ trợ trên thị trường. Hoạt động sau cùng bao gồm hướng dẫn khách hàng, hỗ trợ công nghệ và t iếp t ục bảo trì p hần mềm. (những dấu .... là do photo b ị mờ k hô ng đọ c được) Một dự án ứng dụng khác mộ t dự án phát triển ở chỗ một cái sử dụng phần cứng hiện tại và một cái sử dụ ng phần mềm để giải quyết bài toán riêng. Điều này bắt đầu với sự lựa chọ n nền phần cứ ng và bộ phần mềm đ ược sử dụ ng. Tiếp theo pha thiết kế nhận thức là sự tập hợp mộ t bộ ảnh dù ng để p hát triển và k iểm tra. Theo sau sự p hát triển thuật giải thực sự là việc thực hiện kiểm tra và sau đó đưa cô ng nghệ đ i vào sử dụng. Điều này phải bao gồ m việc chứng minh và cô ng bố cô ng nghệ, hướng dẫn họ c t ập nghiên cứu trong khoảng thời gian hạn chế, hoặc cài đặt hệ thố ng trong và i ho ạt độ ng hướng vào sự sản xuất (production-oriented). 4.2 CÁC HỆ THỐNG XỬ LÝ ẢNH Các hệ thống má y t ính được sử dụ ng phổ biến nhất cho xử lý ảnh đ ược chia thành bố n hạng: (1) Apple Macintosh, với phần mềm hệ điều hành sẵn có của nó và g iao diện người sử dụ ng; (2) các máy t ính tương thích IBM-phần cứng, sử dụ ng hệ đ iều hành đĩa (DOS, PS/2,...) và Microsoft WindowsTM thường xuyên cũng như IBM OS/2TM; (3) các trạm làm việc đồ hoạ, đ iển hình là sử dụng hệ đ iều hành UNIX và mô i trường XWINDOWS; (4) các hệ thống máy tính lớn (mainframe), với tài nguyên rộng lớn dù ng chung (share) cho nhiều người sử dụng (multiple users) đ ịnh vị tại các trạm làm việc từ xa. Các nhó m hệ t hố ng gần nhau thường dùng chung t ài nguyên và dữ liệu thô ng qua mạng cục bộ (Local Area Network-LAN). Chú ng cũng thường xuyên truy cập đến mạng diện rộng (WAN). 47
  2. 4.2.1 Khuôn dạng file dữ liệu ảnh Với tư cách một phạm vi ho ạt độ ng, nó i chung xử lý ảnh số tạo ra một lượng lớn các file dữ liệu lớn có liên quan chứa ảnh số. Những file này phải được lưu trữ và chúng luôn cần được trao đổ i giữa nhữ ng người sử dụng và nhữ ng hệ thố ng khác nhau. Bắt buộ c phải có vài khuôn dạng tiêu chuẩn cho việc lưu trữ và truyền các file ảnh số. Nhiều dạng file ảnh số đã được định nghĩa và sử dụng. Mộ t vài dạng đã được sử dụng khá rộng rãi trở thành tiêu chuẩn phổ biến (de facto) khô ng ít thì nhiều. (Xem ví dụ bảng 4-1) Hầu hết những chương trình xử lý ảnh thương mại có sẵn có thể đọc và g hi vài khuôn dạng file ảnh phổ biến. Các chương tr ình khác hiện có hoàn toàn có thể đọc và hiển thị ảnh lưu trữ dưới nhiều dạng file khác nhau và chuyển đổ i chúng từ dạng này sang dạng khác. Các chương trình đó tự độ ng hiểu dạng file đầu vào đã định, từ phần mở rộng tên file hoặc từ thông tin định danh trong chính bản thân file. Khi lưu lại ảnh hiển thị vào một file, người sử dụng có t hể chỉ rõ khuôn dạng file mong muố n. BẢNG 4-1 KHUÔN DẠNG FILE DỮ LIỆU ẢNH Kiểu Cách sử dụng T ên Tagged image format DOS, UNIX and Macintosh images *.TIF Encapsulated PostScript Publishing industry format *.EPS Graphical interchange format CompuServe graphics format *.GIF *.BMP Microsoft Windows format Bit-mapped format *.BMP IBM OS/2 Bit- mapped format Presentation manager *.PICT Apple Macintosh images Macintosh Đa số các khuôn dạng file ảnh lưu trữ nhãn chú thích thêm vào dữ liệu ảnh. Chú thích này có thể là dữ liệu về sự tạo ra và khuôn dạng ảnh, cũng như chú thích của người sử dụng. Thông thường, các thiết bị hiển thị đ ơn sắc dù ng mạch chuyển đổ i số -tương tự (DAC) 8 bit để tạo ra tín hiệu video điều khiển độ sáng các đ iểm ảnh hiển thị trên màn hình. Thiết bị này có khả năng cung cấp 256 trạng thái xám. Các thiết bị hiển th ị màu sử dụ ng các bộ chuyển đổ i số-tương tự (DAC) 8 bit tạo ra bao tín hiệu video điều khiển các thành phần độ sáng đỏ (red), lục (green), lam (blue) của ảnh hiển thị. Vì thế, chú ng có khả năng hiển thị 224, tức là hơn 16 triệu màu khác nhau. Do sự thiếu ho àn chỉnh thông thường trong các ống hiển thị và sự hạn chế của mắt ngườ i nên số lượng màu có thể nhận thấy rõ ít đi một cách đáng kể. Ảnh số không nhữ ng xuất hiện ở k huôn dạng đơn sắc và màu, mà còn ở các mức độ khác nhau của độ phân giải đo sáng (photometric resolution) (số màu ho ặc trạng thái xám). Với ảnh đơn sắc, số lư ợng trạng thái xám trong thang xám (gray scale) phổ biến nhất là 2, 16 hoặc 256 ứng với 1, 4 ho ặc 8 bit/đ iểm ảnh. Những độ phân giải riêng biêt này dễ dàng được đóng gói thành những byte 8 bit trong bộ nhớ và các file trên đ ĩa. Nhữ ng độ phân giải khác nhau cũng được sử dụng trong các ứng dụ ng nào đó. Bảng màu (palette) là một bảng tra cứu (look-up) liên kết mỗ i giá trị đ iểm ảnh trong ảnh với màu hiển thị tương ứng. Một ảnh màu 4 bit sử dụng 16 màu cụ thể chọn trong bảng 16 triệu màu của nó để hiển thị. Đối với ảnh màu, số lượng màu quy đ ịnh đư ợc biểu thị bởi các giá tr ị đ iểm ảnh khác nhau. Một ảnh màu 4 bit chỉ có t hể hiện ra 16 màu phân biệt trên thiết bị hiển thị. Một bảng màu đ ịnh nghĩa phép ánh xạ từ 16 giá trị điểm ảnh có thể tồ n t ại sang số lư ợng màu hiển thị lớn nhất. Sự lựa chọn 16 màu cụ thể là ý muốn của người lập trình và t hường bị người sử dụng bỏ qua. Ảnh màu 8 bit được hiển thị với 256 màu riêng biệt và ảnh màu 24 bit có p hạm vi thể hiện 16 triệu màu. Bảng màu chỉ rõ phép 48
  3. ánh xạ đố i với mộ t ảnh màu cụ thể thông thư ờng được bao hàm trong file dữ liệu ảnh và nó điều khiển thiết bị hiển thị k hi ảnh được hiển thị hay in ra. 4.3 GIAO DIỆN NGƯỜI SỬ DỤNG Thời kỳ đầu của máy t ính, giao diện chủ yếu giữa người sử dụng với hệ thống là phần mềm hệ điều hành của nhà sản xuất. Mặc dù đã có tính mềm dẻo, nhưng những bộ sản phẩm này rõ ràng là cồng kềnh trong sử dụng hàng ngày. Gần đây hơn, xu hư ớng ngày càng tiến tới việc sản xuất giao diện phần mềm khá thân thiện với ngườ i sử dụng. Điều này tạo cho thao tác viên (operator) mộ t mô i trường tiện lợi và thoả i mái để phát triển và sử dụng phần mềm xử lý ảnh số . Một giao diện người sử dụng như trên đò i hỏ i các công cụ thuận tiện có sẵn, với chi phí tối thiểu. Các bộ phần mềm xử lý ảnh số hiện đại đặt khả năng xử lý và tính mềm dẻo vào tay người sử dụng mộ t cách nhanh và dễ dàng. Thiết kế của chúng phục vụ cho trực giác của người sử dụng và điều này làm cho chúng dễ dàng để họ c và sử dụng. 4.3.1 Bộ thông dịch dòng lệnh (Command-Line Interpreter) Kiểu giao diện người sử dụng cũ nhất và đ ơn giản nhất là bộ t hô ng dịch dò ng lệnh (Hình 4-1). Sử dụng ngô n ngữ nguyên văn (textual language) dành riêng, yêu cầu người sử dụng phải biết các tuỳ chọ n có sẵn, từ bộ nhớ hay tài liệu mở trên bàn. Nó đưa ra trước mắt người sử dụng một dấu nhắc (prompting character) trên màn hình báo hiệu rằng nó sẵn sàng xuất phát, nhưng nó không cung cấp sự hỗ trợ vấn đề g ì mà có thể thực hiện được. Điều này yêu cầu độ tin cậy cao vào tài liệu được viết, đặc biệt trong giai đoạn họ c (learning phase). T ình hình được cải thiện đáng kể bằng cách sử dụng nhữ ng file batch hay script, định rõ một loạt các bước xử lý và có thể được gọ i bằng một lệnh đơn. Tập các file script phong phú có thể làm cho mộ t bộ thô ng dịch dò ng lệnh giải quyết dễ dàng. HÌNH 4-1 Hình 4-1 Giao diện bộ thô ng d ịch dòng lệnh 4.3.2 Giao diện điều khiển bằ ng trình đơn (Menu-Driven Interface) Thế hệ t hứ hai, giao diện đ iều khiển bằng trình đơn, đưa ra một danh sách các chọn lựa trên màn hình, sự lựa chọ n có thể được hoàn thành bằng mộ t hoặc hai phím bấm (Hình 4-2). Điều này giảm bớt việc phải ghi nhớ và phụ thuộ c của thao t ác viên vào tài liệu được viết rất nhiều, cũ ng như đò i hỏ i sự cố gắng để đưa mộ t quá trình chi tiết vào hoạt động. Trong sự hiện diện tiến bộ hơn của mình, giao diện người sử dụng điều khiển bằng tr ình đơn hoạt động đáp ứng lại thiết bị con trỏ đồ hoạ (graphic pointer device) (mouse, trackball,...). Đây là giao diện trỏ và kích (point-and-click), người sử dụ ng 49
  4. có thể di chuyển con trỏ đến khu vực đã gán nhãn thích hợp và nhấn một nút trên thiết bị. Người sử dụng cũng có thể kéo xuống (pull down) một trong nhiều tr ình đơn (menu) từ thanh trình đơn trên đỉnh màn hình hiển thị nếu cần thiết, theo cách đó sẽ làm giảm bớt sự lộ n xộ n trên màn hình, sau đó người sử dụng kích vào một chọn lựa tuỳ ý và trình đơn xu ất hiện. Các trình đơn có thể hiện hữu theo cấu trúc phân cấp. Việc chọn mộ t mục trên trình đ ơn làm xuất hiện một trình đơn con nhiều lựa chọ n cụ thể hơn. Mỗ i trình đơn hay mục trên trình đ ơn có thể cũng kết hợp với một thông báo trợ giúp (help message) giải thích các tuỳ chọ n và cách sử dụng của nó . Điều này cũng có thể xuất hiện tại những nơi mà thao tác viên yêu cầu trên màn hình. HÌNH 4-2 Hình 4-2 Giao diện đ iều khiển bằng trình đơn trong mô i trường cửa sổ 4.3.3 Giao diện đ ồ hoạ (Graphical User Interface) Thế hệ thứ ba là giao diện người sử dụng bằng đồ hoạ (GUI- phát âm là “gooey”). Thao tác viên đ iều khiển mộ t phần hệ thố ng theo ngôn ngữ trực quan (visual language) thay vì ngôn ngữ nguyên văn đơn thuần như với bộ thô ng dịch dò ng lệnh. GUI biểu diễn các tu ỳ chọn cho sẵn khô ng phải bằng văn bản, như trong một trình đơn, mà bằng các biểu tượng đồ hoạ hiển thị trên màn hình. Nhữ ng biểu tượng (icon) này không nhữ ng biểu thị các quá trình, mà còn biểu diễn dữ liệu (ví dụ như ảnh số) và các thiết bị phần cứng (ổ đĩa, máy in,...). Với sự thực hiện GUI đầy đủ, ta có thể khởi đầu một cô ng việc - ví dụ, in một ảnh đã lưu trữ - bằng k ỹ thuật kéo và thả (drag and drop). Sử dụng thiết bị con trỏ , thao tác viên có thể chọ n ra biểu tượng biểu diễn ảnh, di chuyển nó sang biểu tượng khác biểu diễn máy in và nhả nó ra, và quá trình in bắt đầu. Điều này khô ng chỉ nhanh hơn việc gõ dòng lệnh mà còn thú vị hơn. 4.3.4 Giao diện luồng dữ liệu (Data Flow Interface) Một kiểu GUI khác sử dụng mạng (network), biểu đồ luồng dữ liệu (data-flow diagram) bằng đồ hoạ, diễn đạt bằng hình t ượng (symbology) (Hình 4-3). Ở đây, ngôn ngữ trực quan hầu như được sử dụng riêng biệt. Ta lại có một trình đơn các biểu tượng (các nét chạm-glyphs) biểu diễn các thiết bị, dữ liệu và quá tr ình sẵn sàng để sử dụng. Tuy nhiên, trong trường hợp này, bằng cách dùng con trỏ kéo các biểu tượng, ta có thể tạo ra mộ t lưu đồ (flowchart) miêu tả dãy các bước xử lý đã định trên màn hình. Mỗ i biểu tượng có một hoặc nhiều đườ ng (pad) vào và/ho ặc ra (các điểm kết nối) dành riêng. Người sử dụng đ ịnh rõ luồng xử lý bằng cách liên kết các đư ờng với các dòng kẻ sử dụng thiết bị con trỏ. 50
  5. HÌNH 4-2 Hình 4-3 Ví dụ về biểu đồ luồng dữ liệu GUI Mỗ i biểu tượng cũng có các đường đ iều khiển, khi đư ợc chọn bằng con trỏ, mà bắt đầu thực hiện quá trình ho ặc khiến các trình đơn xuất hiện bất kỳ, do đó cho phép người sử dụng đ ịnh nghĩa các chi tiết của quá trình. Mỗ i biểu tượng biểu thị một ch ỉ báo (indicator) trạng thái cho biết (1) nó được định nghĩa đầy đủ hay không, (2) sẵn sàng hoạt động hay không, (3) đã thực sự hoàn thành các ho ạt độ ng của nó chưa. 4.3.5 Cửa sổ Trong những ngày đ ầu của xử lý ảnh, người sử dụng có cơ sở để nhận ra rằng nhiều màn hình hiển thị đ ã tăng khả năng sử dụng của nó trong hệ thống lên rất nhiều. Ví dụ, thích hợp để sử dụng các cách hiển thị k hác nhau đố i với giao diện người sử dụ ng và đố i với hiển thị ảnh. Mộ t sự lựa chọ n hiện nay (và rẻ hơn) là sử dụng thiết bị hiển thị khuôn dạng đơn và lớn cho các hàm khác nhau cùng một lúc. Môi trường hướng cửa sổ (Window-oriented environment) là mộ t bộ phần mềm sử dụ ng màn hình hiển thị có hiệu quả để trình bày nhữ ng đố i tượng độ c lập khác nhau cùng một lúc. Ngư ời sử dụ ng có thể mở (chẳng hạn, thiết lập hay định nghĩa) nhiều cửa sổ hiển thị khác nhau và sử dụng mỗ i cửa sổ cho mộ t mục đích hiển th ị khác nhau, ngay cả khi ta sử dụ ng nhiều àn hình hiển thị. Mỗ i cửa sổ có thể được định vị và đ ịnh kích thước lại trên màn hình, đ iển hình là dù ng thiết bị con trỏ kéo những đường biên của nó . Ở đây các cửa sổ chồ ng lên nhsu, một cửa sổ (cửa sổ hoạt động) che khuất một phần hay to àn bộ cửa sổ hoặc các cử a sổ “ở dư ới” nó, như sự chồng đè lên nhau của các ảnh trên màn hình nền. Xu hướng thiết kế giao diện người sử dụng là chú ý nhiều vào ngôn ngữ trực quan, trả giá bằng ngôn ngữ nguyên văn. Cảm giác với giao diện trực quan là dễ dàng hơn cho người bắt đầu học và nhanh hơn cho chuyên gia sử dụng so với việc đánh máy văn bản từ bàn phím. Đầu vào bằng tiếng nó i cũng là vấn đ ề thêm vào hữu ích với chuộ t và bàn phím. Tiếng nó i tổng hợp cho phép hệ thố ng trả lời thao t ác viên đúng như vậy. Giao diện bằng lời như trên đặc biệt hữu dụng khi thao tác viên phân chia sự chú ý của mình cho nhiều công việc khác. Trong vài trường hợp, chuỗ i các tín hiệu video số hoá có thể cung cấp sự trợ g iúp trực tuyến (on-line) có g iá trị khi cần thiết. 4.4 QUÁ TRÌNH PHÁT TRIỂN PHẦN MỀM Trong những ngày đầu của lập trình máy t ính nói chung và xử lý ảnh số nó i riêng, quá trình phát triển phần mềm, theo cách nó i bây giờ, là không có cấu trúc (unstructured). Nhữ ng người lập trình máy t ính không chỉ hiếm, giố ng như những kiểu người tiên phong khác, mà còn có tính chất chủ nghĩa cá nhân. Có lẽ chỉ với một khái niệm mơ hồ về cô ng việc mà mộ t phần mềm mớ i được yêu cầu làm, người lập trình đã có thể bắt tay vào viết mã lệnh, tổ ng hợp một vấn đề phức tạp từ những phần đơn giản hơh trong quá trình. Sau đó , to àn bộ thiết kế dược phát triển song song với việc thực hiện. Nhữ ng sự giải quyết thiết kế chủ yếu được thực hiện theo cách từ đầu đến đuô i. Thông thư ờng các mô đun (module) được phát triển t ừ dưới lên, với các chương trình con (routine) cơ bản nhất được viết đầu tiên và 51
  6. tiếp theo các chương trình con mức cao hơn dựa vào những chương trình con trước đó, những người lập trình ban đầu đã khai thác một cách sáng tạo sự phong phú của ngôn ngữ lập trình cấp cao đương thời để viết mã lệnh nhanh, cô đọng và bản chất là không thể g iải mã được. Kho ảng năm 1970, nhiều vấn đề với cách tiếp cận này đã trở thành hiên nhiên. Đầu tiên, sự p hức tạp của các dự án phần mềm tiến đ ến mức mà người lập trình khó lò ng giữ tất cả các khía cạnh của chương trình cù ng lúc trong đầu. Nghiên cứu tâm lý họ c đưa ra giả thiết là con người thật là k hó chịu khi cố gắng giữ dấu vết của nhiều hơn năm đ ến chín mẩu thông tin cù ng một lúc. Hạn chế này lấy đi mất một phần lớn giá cả và ngân sách của các dự án phát triển phần mềm lớn lặp đi lặp lại nhiều lần. Thứ hai, với các dự án bao gồm các nhó m nhữ ng nhà lập trình, sự phố i hợp kết quả của sự cố gắng thành một vấn đề trọng đại. Các mô đun được viết bởi nhữ ng cá nhân khác nhau sẽ không thành công trong việc làm cho khớp vào với nhau một cách trôi chảy. Thứ ba, như k hi có sự thay đổ i nhân viên, nó trở nên khá tố n phí đố i vớ i những người lập trình mới để giải mã (decipher) mã nguồn hiện tại trong tình trạng thiếu một vài cấu trúc agreed-upon phổ biến, đặc biệt khi thiếu tài liệu đ i kèm. Ví dụ, theo bố t rí của mộ t trường đại học, sự ra đi của một sinh viên hay mộ t cán bộ lập trình có thể làm cho tất cả phần mềm mà anh ta hay cô ta đã phát triển trong khi làm việc trên các dự án nghiên cứu khô ng sử dụng. Các dự án phát triển phần mềm thương mại đò i hỏ i sự tác độ ng qua lại lẫn nhau đáng kể g iữa nhiều các nhân để chắc chắn rằng sản phẩm cuố i cù ng tho ả mãn tất cả các yêu cầu trên (thường cạnh tranh). Hình 4-4 là ví dụ về môt lưu đò sử dụng trong mô t dự án phát triển phần mềm thương mại. Các bước quan trọng vòng phát triển phần mềm được liệt kê trong bảng 4-2. Những bước này có thể được thực hiện một cách tuần tự, bằng cách gố i chồ ng lên nhau, hay lặp. Theo đ ịnh nghĩa, phân tích là quá trình nghiên cứu vấn đề và chỉ ra những đặc tính ho ạt động của bài giải. Kết quả cho ta là một đặc tả hàm (functional specification) phần mềm. Thiết kế là thực hiện đặc tả này và thêm những chi tiết yêu cầu cho việc thực hiện trên một nền phần cứ ng riêng biệt. Lập trình, dĩ nhiên là viết, kiểm tra, gỡ rố i và cung cấp tài liệu các chương trình máy t ính. BẢNG 4-2 QUÁ TRÌNH PHÁT TRIỂN PHẦN MỀM 1. Phân t ích yêu cầu - Requirements analysis 2. Thiết kế sơ bộ - Preliminary design 3. Mẫu - Prototyping (if required) 4. Thiết kế chi tiết - Detailed design 5. Thực hiện - Implementation (coding) 6. Kiểm tra - Testing 7. Bảo trì - Maintenance HÌNH 4-4 52
  7. Hình 4-4 Ví dụ về một lưu đồ phát triển phần mềm Mặc dù cách tiếp cận này có thể nảy sinh sự phức tạp quá mức cần thiết, nhưng kinh nghiệm cho thấy việc thực hiện một cô ng việc lần đầu tiên rẻ hơn là sử dụ ng thêm thời gian cho việc thay đổ i và gỡ rố i một chương trình do nó đã được thực hiện tồi tệ ngay từ đầu. 4.4.1 Quá trì nh hoạt động của chương trình Một chương trình ứng dụ ng có thể ho ạt độ ng ở một trong ba chế độ , tuỳ thuộc vào vai trò mà nó thực hiện trong quá trình t ính toán. Trong chế độ lô (batch mode), chương trình được đặt vào một hàng đợi (queue) và được thi hành bất cứ lúc nào máy tính giải quyết xong nhữ ng công việc trước đó. Mặc dù các câu lệnh phải được thực hiện tuần tự, không có sự khác nhau mấy giữa nhữ ng sự thực hiện các lệnh dù nó diễn ra hàng nano giây hay hàng phút. Vài chương trình xử lý ảnh thuộc vào loại này. Một chương trình được điều khiển theo sự kiện (event-driven program) tham gia mộ t vòng lặp sự kiện, chờ đ ợi sự kiện nào đó xảy ra. Bình thường, thao tác viên gây ra mộ t hoạt động (nhấn phím, k ích chuột,...) tạo thành một sự kiện. Chương trình liên tục thăm dò (poll) các thiết bị đầu vào, kiểm tra và nhận diện mỗ i sự kiện khi nó xảy ra. Sau đó nó thực hiện chương trình con thích hợp và trở về vò ng lặp sự kiện. Bình thường các chương trình xử lý ảnh ảnh hưởng lẫn nhau thuộ c loại này. Chương trình thời gian thực (real-time) điều khiển một quá trình đang xảy ra, v í dụ như các ho ạt độ ng sản xuất. Bản thân thời gian đóng một vai trò quan trọng trong các quá tr ình t ính toán. Thường thường, chương trình đ iều khiển đầu ra của quá trình trong khi điều chỉnh các tham số điều khiển quá trình. Điều này cũng có thể bao hàm trong xử lý ảnh. 4.4.2 Thiết kế từ trên xuống (Top-Down) Vào đầu nhữ ng năm 1970, những khái niệm lậ p trình có cấu trúc (structured progamming) và thiết kế trên xuống (top-down design) xuất hiện để g iải quyết các bài to án do lập tr ình khô ng có cấu trúc tạo ra. Thiết kế trên xuố ng đầu tiên cần phả i viết và gỡ rố i phần mềm mức cao nhất (giao diện người sử dụng) và sau đó thêm dần các chương trình con mức thấp hơn, những chương trình con điều khiển phần cứng thường đư ợc viết sau cùng. Kiểu thiết kế này t ương phản với thiết kế dưới lên (bottom-up), ở trong ấy ngư ời ta viết những chương trình con đơn giản nhất đầu t iên và xây dự ng dần lên từ chú ng, đôi khi nhận ra rằng các chương trình con mức thấp hơn bỏ sót mộ t hàm cần thiết. Thiết kế trên xuố ng có hai lợi thế quan trọng. Một lợi thế có liên quan đến giao diện giữa các mô đun. Mức đỉnh được thiết kế trực tiếp từ đặc tả chức năng của hệ thố ng. Mỗi giao diện giữa các mô đun được thực hiện bởi các gốc (stub). Lợi thế thứ hai là có thể giải thích được t ừng phần của hệ thống trong quá trình phát triển. Giao diện người sử dụ ng có thể được đưa ra và ước lượng từ lúc đầu, đem lại cho người sử dụng khả năng xem trước sự việc. Nhữ ng gố c (stub) đại diện cho những chương trình con mứ c thấp hơn chưa viết. Dần dần thay thế các gố c bằng các chương trình con, từ trên xuố ng, như dự án trình bày. 4.4.3 Hướng phát triển có cấ u trúc Cách tiếp cận có cấu trú c đố i với sự p hát triển phần mềm trở nên nổi bật vào những năm 1970. Đó là mộ t sự cố gắng để làm cho quá trình hiệu quả hơn bằng cách chính thức hoá (formalizing) nó , tác động lên nó và sử dụng các công cụ thiết kế phục vụ cho việc giải quyết trước các vấn đề rắc rố i khác của quá trình. Phát triển có cấu trúc chủ yếu phân tích vấn đề theo nhữ ng giai đoạn chức năng, rất phù hợp cho các chương trình chế độ lô (batch mode). 53
  8. 4.4.3.1 Phân tích có cấu trúc Phép phân t ích có cấu trúc phân t ích vấn đề mà đã được giải quyết theo những giai đoạn chức năng. Đưa đến kết quả là đặc tả có cấu trúc (structured specification), bao gồm (1) các biểu đồ luồng dữ liệu (data flow diagrams-DFDs) tr ình bày sự phân tích to àn bộ chức năng vào trong các quá trình, luồng dữ liệu và các giao diện giữa các quá trình; (2) từ điển dữ liệu (data dictionary) cung cấp tài liệu về dữ liệu và g iao diện trong các DFD; và (3) diễn tả sự biến đổi (transform description) cung cấp tài liệu về chức năng của mõ i quá trình trên DFD. Đặc tả có cấu trúc đưa ra những thành phần cấu trúc hệ thống khác nhau và thông tin trao đổi như thế nào và biến đổ i bằng cách nào, giữa các thành phần. 4.4.3.2 Thiết kế có cấu trúc Mục đích củ a thiết kế có cấu trúc là mộ t phương pháp luận có tổ chức sao cho có thể phân biệt được giữa các thiết kế tốt và xấu, đi đến mộ t giải pháp tố i ưu. Đó là sự tập hợp những chiến lược và kỹ thuật, đáp ứng những mục tiêu và ràng buộ c kỹ thuật phổ biến cho mô i trường khoa họ c và thương mại. Thiết kế có cấu trúc phát triển mộ t phác thảo bao gồ m nhữ ng thành phần hộp đen (black-box) mà chức năng của nó được xác đ ịnh rõ, như ng nhữ ng cô ng việc bên trong thì không. Nó chia sẻ nhiều nguyên tắc công nghệ được sử dụng để phát triển những biểu đồ tổ chức với các cô ng ty. 4.4.3.3 Lập trình có cấu trúc Lập trình có cấu trúc thiết lập các kỹ thuật mã hoá tiêu chuẩn ho á và xo á bỏ mộ t số lệnh nào đó của thói quen lập trình đơn giản khỏ i nhữ ng ngôn ngữ lập trình. Những chương trình có cấu trúc tuân theo lưu đồ được xây dự ng từ tập giới hạn các hàm con lố i vào đơn, lố i ra đơn. Cô ng việc lập trình sẽ trở thành sự cố gắng rèn luyện nhiều hơn, vận dụng các tiêu chuẩn một cách khôn ngoan và sáng tạo. Mã kết quả sẽ dễ đọ c, kiểm tra, thay đổ i, cung cấp tài liệu và gỡ rố i hơn. Ngô n ngữ lập trình có cấu trúc, ví dụ như Pascal, Ada và C, ra đời để cạnh tranh với những ngôn ngữ k hô ng có cấu trúc như FORTRAN và BASIC. Ngôn ngữ có cấu trúc cung cấp những khả năng khuyến khích và hỗ trợ sự rèn luyện trí ó c cho lập trình có cấu trúc và tránh xa những thó i quen lập trình tầm thường. Hiện nay, những phiên bản gần đây nhất của những ngô n ngữ ra đ ời đầu tiên cũng kết hợp chặt chẽ mộ t vài khái niệm về cấu trúc. Trong ngôn ngữ không có cấu trúc, chuỗi điều khiển (thread of control) tự do nhảy lung tung khắp nơi trong chương trình. Một ví dụ là lệnh tính toán GOTO trong FORTRAN. Điều khiển được chuyển đến mộ t trong nhiều vị t rí mã nguồn khác nhau, tuỳ thuộc vào giá trị biến được xác đ ịnh tại thời điểm thực hiện lệnh. Việc đọc và hiểu danh sách chương tr ình con chứa các cấu trúc này có thể cực k ỳ k hó khăn - thậm chí ngay chính tác giả chương tr ình - nếu mã nguồn đã viết trước đây hơn 60 ngày. Trong ngôn ngữ có cấu trúc, luồng điều khiển bị cấu trúc đơn luồng (single- thread) hạn chế, mã và dữ liệu dễ dàng chia thành ngăn. Các chương trình con chỉ sử dụng các biến cục bộ (t ạm thời) khô ng thể t ác động đến nhữ ng phần khác của chương trình. 4.4.4 Phát triển hướng đối tượng (Object-Oriented Development) Sự phát triển phần mềm theo cách tiếp cận hướng đối tượng phân t ích vấn đề theo các giai đo ạn quan hệ dữ liệu. Một cách khái niệm, một chương trình được phân t ích thành các đối tượng (object), mỗi đố i tượng là mộ t sự kết hợp dữ liệu có liên quan tới mộ t khía cạnh riêng biệt của vấn đề và mã tương ứng sử dụng những dữ liệu đó để thực hiện một tập các chức năng ho àn toàn xác đ ịnh. Dữ liệu và mã chương trình 54
  9. được đóng gói (encapsulate) thành một bộ khép kín (seamless package), nhữ ng công việc bên trong bộ được che đậy không cho thế giới bên ngo ài biết. Cách tiếp cận này rất phù hợp với những ứng dụ ng điều khiển theo sự kiện. Mỗ i đối tượng hoạt độ ng giố ng như một hộp đen (black box), thực hiện những chức năng đã được định nghĩa theo yêu cầu, nhưng có bộc lộ chút ít bề nhữ ng công việc bên trong nó. Nó nhận mộ t thông báo để hành độ ng, khi đã ho àn thành nó cũng trả lời lại bằng mộ t thông báo. Mỗi đố i tượng là đ ộc lập và quản lý chương trình đ iều khiển và luồng dữ liệu cùng một lúc, mặc dù nó đang ho ạt động. Điều này làm cho chương trình có quá nhiều mô đun và tránh được tình trạng nhữ ng thay đổ i bên trong mộ t chương trình con sẽ tạo ra kết quả không ngờ cho những phần chương tr ình khác. 4.4.4.1 Phân tích hướng đối tượng Phân t ích hư ớng đố i tượng của một vấn đề cho ta một danh sách các đố i tượng sẽ cùng nhau giải quyết vấn đề. Danh sách này bao gồm một đặc tả dữ liệu (các thuộc tính) và các chức năng (các dịch vụ) của mỗ i đối tượng. Phân t ích hướng đố i tượng được thực hiện mà không quan tâm đến phần cứng, hệ điều hành, hay các cô ng cụ phần mềm sẽ được sử dụ ng để t hực hiện. 4.4.4.2 Thiết kế hướng đối tượng Giai đo ạn thiết kế hư ớng đối tượng vạch ra cách mà thiết kế logic sẽ được thực hiện từ nhữ ng phân tích-đó là sự kết hợp giữa phần cứ ng, hệ đ iều hành và các cô ng cụ phát triển phần mềm (chẳng hạn như bộ biên dịch,...). Thường thường, thay đổ i đáng kể của bản thiết kế ban đầu đò i hỏ i phải có căn cứ xác thực. 4.4.4.3 Lập trình hướng đối tượng Trong lập trình hướng đố i tượng, người lập trình thường bắt đầu với mộ t sườn ứng dụng (application framework). Đây là một chương trình có nhiều chức năng chung, phổ biến cho đa số các chương trình. Nó giố ng như một bộ khung để xây dựng mộ t đơn vị t rọn vẹn trên đó . Bình thường, sườn ứng dụng đ iều khiển vò ng lặp sự kiện và phát hiện sự k iện. Sau đó người lập trình chỉ phải thêm các đố i tượng được yêu cầu vào ứng dụ ng sắp đến. Mỗ i đố i tượng viết bằng dữ liệu và điều khiển chương trình đã được đóng gói thành mộ t đơn vị độc lập, được bọ c k ín nhiều hay ít. Những đố i tượng mới không cần thiết kế và viết t ừ đầu; chúng có thể kế thừa (inherit) những đố i tượng đã tồ n tại trước đó. Vì vậy, ví dụ mộ t kiểu cửa sổ hiển th ị đã tồ n tại, nó cần được thay đổ i để tạo thành kiểu cửa sổ hiển thị khác. 4.4.5 Các công cụ CASE Trong thực tiễn, lượng thời gian đáng kể của người lập trình tiêu tốn cho việc thực hiện cô ng việc khô ng sáng tạo (noncreative)-những cô ng việc mà nó i đúng ra là máy mó c và không yêu cầu kinh nghiệm đầu vào sáng tạo. Các cô ng cụ phần mềm xuất hiện để làm thay đổ i phạm vi hoạt độ ng của phần phát triển này hơn nữa. Chúng thường được gọ i với cái t ên những cô ng cụ công nghệ phần mềm được máy tính trợ giúp (computer-aided software engineering-CASE). Chúng kế tục nhiều chức năng cung cấp tài liệu và kiểm tra lỗ i. Tất nhiên, điều cần thiết cho một người lập tr ình hay người thiết kế phần mềm đó ng gó p thô ng tin quan hệ thiết kế (design-related) vào hệ thống khi bắt đầu, nhưng các chương tr ình biên dịch và định dạng thô ng tin theo nhữ ng cách đặc biệt có thể khiến con người tránh được sự nỗ lực to lớn không cần thiết. Việc sử dụ ng các cô ng cụ CASE có hiệu quả sẽ p hụ thuộc vào sự cố gắng áp dụng qui tắc lập trình và thiết kế phần mềm, ví dụ kêt cả miêu t ả nhữ ng chỗ đầu (header) được chuẩn hoá, nơi bắt đầu mỗ i mô đun mã. 55
  10. Một ví dụ về công cụ CASE là chương trình kết hợp thô ng tin đầu từ tất cả các mô đun mã nguồ n để tạo thành mộ t quyển tài liệu phần mềm. Những chương trình khác có thể đọ c các file mã nguồn, biên dịch mộ t ánh xạ liên kết những phần phụ thuộ c và truyền tin giữa các mô đun. Trong quá khứ, thiết kế nhận thức được hoàn thành khi bắt đầu dự án, với nhiều chi tiết thiết kế điền vào bằng cách phát triển mã hoá. Xu hướng tiến tới hiện nay là tập trung vào toàn bộ sức lực thiết kế ngay khi bắt đầu dự án. Điều này có nghĩa là việc lập trình thực tế là quá trình máy mó c trên quy mô lớn, ho ạt động với tài liệu thiết kế hoàn toàn đặc biệt. Sự phân nhánh của xu hướng mới này gồ m hai phần. Thứ nhất, những đội phát triển phần mềm có khuynh hướng chia nhỏ thành những ngư ời thiết kế và những người lập tr ình. Thứ hai, sự sinh mã thực tế có thể được các công cụ CASE thực hiện. Mộ t người thiết kế p hần mềm ngồ i tại mộ t trạm làm việc, có thể phát triển đặc tả đầy đủ một bộ phần mềm. Sau đó nhữ ng công cụ CASE có t hể sử dụng những đặc tả này để tạo ra cả mã nguồn (không có lỗ i mã ho á) lẫn tài liệu k ỹ t huật (dù khô ng phải tài liệu ng ười sử dụng). 4.4.6 Sự độc lập đối với nền phần cứng (Platform Indepedence) Sự phát triển của bộ phần mềm xử lý ảnh là một công việc tốn nhiều thời gian và tiền bạc. Có nhiều hệ thố ng máy t ính khác nhau có thể dùng để xử lý ảnh số. Các nền phần cứng khác nhau có mố i quan hệ thuận lợi và bất lợi đố i với việc thực hiện và giá cả. Sự t iến bộ của phần cứ ng xảy ra nhanh chóng đến nỗ i sự lỗ i thời khô ng có khoảng cách. Vì t hế, câng tránh một phần hay toàn bộ việc viết lại phần mềm cho mỗ i thiết bị ngo ại vi ho ặc nềm phần cứng mới. Xu hướng của các phương pháp phát triển phần mềm hiện nay, phần chủ yếu, là độ c lập với phần cứng mà chúng chạy trên đó. Bộ công cụ cầm tay (portability tool kit) là g iao diện phần mềm nằm giữa chương tr ình ứng dụng độc lập với nền phần cứng và hệ thống địa phương (hệ thố ng chạy những ứng dụng đó -native system) (Hình 4-5). Chương trình ứng dụ ng đư ợc viết theo những quy tắc tiêu chuẩn giố ng như bộ công cụ viết trên nền phần cứng. Bộ công cụ này cung cấp giao diện giữa chương trình ứ ng dụ ng và hệ điều hành của hệ t hố ng địa phương, GUI và tài nguyên bộ nhớ. Nó biên dịch sự truyền thông tin giữa ứng dụng và hệ thống mà ứng dụ ng chạy trên đó . HÌNH 4-5 Hình 4-5 Cơ cấu phần mềm độc lập với nền phần cứng. Mỗ i hệ thống cụ c bộ khác nhau (chẳng hạn, trạm làm việc UNIX, Macintosh,...) có một phiên bản của bộ công cụ cầm tay khác nhau, nhưng mỗ i phiên bản đều quan tâm đến chương trình ứng dụ ng như nhau. Theo cách đó , một chương tr ình ứ ng dụng được phát triển trên một hệ thố ng cục bộ sẽ hoạt động (theo lý thuyết) mà k hô ng có 56
  11. sự thay đổ i nào trên hệ t hố ng cục bộ khác. Trong đa số các trường hợp, chỉ có sự hạn chế về mặt chức năng được yêu cầu sau khi chuyển mộ t chương trình ứng dụng sang hệ thống cục bộ khác. Bộ cô ng cụ cầm tay thiết kế tốt sẽ giúp ngư ời lập trình truy cập trực tiếp đến hầu hết, nếu khô ng muốn nó i là tất cả, các đặc điểm và tài nguyên của hệ thố ng cục bộ . Những đặc đ iểm đó không tồ n tại trên hệ thống cục bộ, như ng tồn tại trên hệ thố ng cục bộ khác trong thiết bị hỗ trợ, được bộ cô ng cụ mô phỏ ng trong phần mềm. Một bộ công cụ cầm tay tốt, về cơ bản, sẽ cho phép ng ười lập trình truy cập vào mọ i đặc điểm sẵn có trên tất cả các hệ thố ng cục bộ được hỗ trợ và cả những đặc điểm thêm vào. Khi mộ t chương trình độ c lập với nền phần cứng chuyển sang hệ thống cục bộ khác, thì chức năng của nó vẫn không thay đổ i. Tuy nhiên, “mắt và tay” củ a nó sẽ thuộc về “chủ mới” (hệ thống cục bộ mới) của nó. Chạy trên máy Macintosh, trô ng nó sẽ g iố ng như là được viết cho máy này và cũ ng như vậy đố i với các nền phần cứng khác. Lập trình độ c lập với nền phần cứng khiến cho những người lập trình di chuyển nó giữa các nền dễ dàng hơn. Họ không phải t ìm hiểu tập đặc tính và tài nguyên mớ i mỗ i khi thay đổ i, với điều kiện là p hải sử dụng bộ công cụ cầm tay tương tự. 4.4.7 Cung cấp tài liệu phần mềm Tài liệu kèm theo sự phát triển và sử dụng bộ phần mềm xử lý ảnh chia thành năm loại. Đầu tiên là tài liệu thiết kế, nó đ ịnh rõ bộ phần mềm dù ng để làm g ì. tiếp theo là tài liệu về mã phần mềm, bao gồm các thuật giải và các chi tiết cấu trúc mô đun. Thứ ba là tài liệu chỉ dẫn cho thao tác viên, nó có thể bao gồ m những bài tập tự học cho người mới bắt đầu sử dụng. Thứ tư là tài liệu tham khảo, nó tổ chức nhữ ng thông tin đặc biệt, súc tích, ít khi sử dụ ng của thao tác viên có kinh nghiệm. Thứ năm là t rợ giúp trực tuyến, người sử dụng có thể gọ i nó trên màn hình (thường trong một cửa sổ trợ giúp độc lập) trong khi chương trình vẫn đang chạy. Thỉnh thoảng, do hấp tấp mà sự cố gắng cung cấp tài liệu trở nên tồi tệ hơn trước khi hoàn thành và phát hành phần mềm. Cái giá phải trả, về thời gian và tiền bạc, cho tài liệu không tương xứng thường khá cao. Việc cố gắng giải mã quá t rình hoạt độ ng của phần mềm được cung cấp tài liệu tồ i có thể gây bực dọc đến mức ngư ời mới sử dụng có thể bỏ dở giữa chừng trước khi trở nên thông thạo. Việc hoàn thiện một bản mã mà tài liệu cung cấp t ồi gây tốn nhiều thời gian cũng giố ng như tiền bạc. Bộ phần mềm lý tưởng là bộ phần mềm với giao diện người sử dụng rõ ràng, đến nỗ i ít khi cần sử dụ ng đến bộ tài liệu ho àn chỉnh và đầy đủ. Sau lời giới thiệu chương trình vắn tắt, người sử dụng chỉ yêu cầu sự hỗ trợ không thường xuyên từ trợ giúp trực tuyến và tài liệu tham khảo. 4.5 TỔNG KẾT NHỮNG ĐIỂM QUAN TRỌNG 1. Một phần mềm được thừa nhận phải là phần mềm có mộ t giao diện người sử dụng tiện lợi, tài liệu tốt cung cấp cho người sử dụng, tính đầy đủ chức năng và sự chính xác cũng quan trọ ng. 2. Với đa số ngư ời sử dụng, giao diện người sử dụ ng đồ hoạ điều khiển bằng trình đơn dễ dàng để học và thao tác hơn giao diện bằng văn bản. 3. Chiều hướng phát triển giao diện người sử dụ ng là từ giao diện văn bản đến giao diện bằng lời nói và trực quan. 4. Một chương trình có thể chạy chế độ lô (batch mode), được điều khiển bằng sự k iện, hay hoạt động trong thời gian thực. 5. Phát triển phần mềm có cấu trúc là phân t ích một vấn đề theo các giới hạn chức năng và làm nổ i bật các giao diện và luồ ng dữ liệu giữa các thành phần. 57
  12. 6. Những chương trình có cấu trúc được xây dựng từ các hàm con đơn đầu vào, đơn đầu ra và tránh cấu trúc làm cho việc điều khiển chương trình trở nên khó khăn. 7. Phát triển hư ớng đối tượng đóng gó i dữ liệu và các chức năng liên quan vớ i mỗ i thành phần hệ thố ng thành các đố i tượng giao tiếp qua thông báo. 8. Lập trình độc lập với nền phần cứ ng cho phép phần mềm đã phát triển trên mộ t kiểu hệ thố ng có t hể di chuyển đến hệ thống kiểu khác một cách dễ dàng. BÀI TẬP 1. Phát triển một cấu trúc trình đơn hai mức cho chương trình được thiết kế để nhập vào, xử lý và xuất ra nhữ ng ảnh thu được từ t àu vũ trụ. Chương tr ình phải có khả năng nhập vào những ảnh từ vệ tinh truyền xuống, Internet, modem và đĩa quang (laser), và xuất ảnh ra Internet, modem, đ ĩa quang và máy in. Đố i với quá trình xử lý, chọn sáu qu á trình ở phần 1 của sách. Giả i thích số mứ c trình đơn tối ưu tiện lợi cho người sử dụng mà bạn chọ n. 2. Trình bày một lưu đồ phát triển chương tr ình phần mềm xử lý ảnh mang tính thương mại cho kỹ nghệ kiểm tra chip tổ hợp. Chương trình sẽ tăng cường các ảnh hiển vi số hoá của chip và hiển thị các ảnh chip tốt đã lưu trữ để so sánh. DỰ ÁN 1. Thiết kế mộ t giao diện người sử dụng dùng đồ hoạ (GUI) cho kiểu xử lý ảnh đặc biệt (ví dụ như ảnh thiên văn, y họ c, bản đồ ) đầy đủ với trình đơn (menu), biểu tượng (icon),... 2. Thực hiện một mẫu (không phải hàm) giao diện người sử dụng đồ ho ạ cho mộ t kiểu xử lý ảnh đặc biệt và nhờ nhữ ng người có năng lực duyệt lại. 3. Sử dụng mộ t chương trình đồ hoạ, t ạo bảng 16 màu thích hợp, dù ng nó để tô màu mộ t dò ng kẻ số ho á. Cung cấp bảng màu, giữ nguyên màu sắc, độ bão ho à và cường độ của mỗ i màu sử dụng trong ảnh. 4. Chu ẩn bị bản phác thảo bộ tài liệu k ỹ thuật chi tiết cho một bộ phần mềm có sẵn. 5. Chu ẩn bị bản phác thảo bộ tài liệu người sử dụ ng chi tiết cho mộ t bộ phần mềm có sẵn. 6. Viết một chương trình đọc ảnh đã lưu trong mộ t dạng file, hiển thị và lưu chúng sang dạng file khác. 58
ADSENSE

CÓ THỂ BẠN MUỐN DOWNLOAD

 

Đồng bộ tài khoản
5=>2