CHƯƠNG 4: XÂY DỰNG CHƯƠNG TRÌNH VÀ MỘT SỐ KẾT QUẢ MINH HỌA
4.5.1.3. Các phương thức
* YPrPb()
• Hàm tạo không đối.
• Thực hiện gán 0 cho cả 3 thuộc tính y, pr, pb. * YPrPb(double gt_y, double gt_pr, double gt_pb)
• Hàm tạo có đối.
• Thực hiện gán cho các thuộc tính y, pr, pb các giá trị tương ứng: gt_y, gt_pr, gt_pb.
* YPrPb(int r, int g, int b,double kb,double kr)
• Hàm tạo có đối.
• Trong hàm tạo này thực hiện luôn việc chuyển đổi hệ màu từ RGB (với các giá trị r, g, b đầu vào) sang YPrPb và gán lại cho các thuộc tính y, pr, pb. Các tham số kb, kr là các tham số trong công thức chuyển đổi hệ màu giữa RGB và YPrPb. Giá trị của các tham số này tùy thuộc vào chuẩn được chọn. Do đó,
hàm này có tính linh động, cho phép chuyển từ RGB sang YPrPb theo bất kì chuẩn nào.
* YPrPb(int r, int g, int b)
• Hàm tạo có đối.
• Cũng tương tự như hàm tạo trên, nó thực hiện luôn việc chuyển đổi sang hệ màu YPrPb rồi gán lại cho các thuộc tính. Nó khác ở chỗ, chuẩn chuyển đổi là ngầm định (khác với hàm tạo trên, chuẩn chuyển đổi phải nhập vào qua các giá trị kr, kb). Chuẩn được dùng ở đây là: BT601 với kb=0,114; kr=0,299. Tại sao dùng chuẩn này vì trong công thức màu da ta dùng chuẩn này, nên xây dựng hàm này cho thuận tiện.
* staticvoid TinhPrPb(int r, int g, int b,
outdouble _pb, outdouble _pr)
• Phương thức tĩnh (gắn với lớp, gọi từ lớp mà không cần tạo bất kì đối tượng nào của lớp).
• Dùng tính giá trị pr, pb từ giá trị r, g, b đưa vào theo chuẩn BT601. * void RGB(double kb,double kr,outint r, outint g,
outint b)
• Dùng chuyển đổi từ YPrPb trở lại RGB.
• Các giá trị kb, kr đưa vào để xác định chuẩn sử dụng trong công thức chuyển đổi.
* void RGB(outint r, outint g, outint b)
• Cũng tương tự như trên, chỉ có điều chuẩn tính là xác định (không có kb, kr trong tham số của hàm). Đó là chuẩn BT601.
4.5.1.4. Vị trí
* NameSpace: CDY.CacMoHinhMau * DLL: CacMoHinhMau.dll
4.5.2. HSV
4.5.2.1. Mục đích
Lớp này được xây dựng với mục đích chuyển đổi qua lại giữa 2 hệ màu RGB và HSV. Cần chuyển đổi sang hệ màu HSV là để phục vụ cho công tác tổng hợp histogram trên nền HS và để tính trong chương trình khi xác định màu da.
Để chuyển đổi sang HSV ta chỉ cần tạo một thể hiện của lớp HSV. Trong hàm tạo truyền vào các giá trị r, g, b của hệ màu RGB:
HSV hsv = new HSV (r, g, b);
4.5.2.2. Các thuộc tính
Lớp này cũng chỉ có 3 thuộc tính là H, S, V tương ứng với các thành phần của hệ màu HSV. Chúng đều có kiểu giá trị là kiểu thực: H có giá trị trong đoạn [0; 360), S và V có giá trị trong đoạn [0; 1].
4.5.2.3. Các phương thức
* HSV()
• Hàm tạo không đối.
• Thực hiện gán cho các thuộc tính h, s, v của lớp các giá trị 0. * HSV(double gt_h, double gt_s, double gt_v)
• Hàm tạo có đối.
• Thực hiện gán cho các thuộc tính h, s, v các giá trị tương ứng gt_h, gt_s, gt_v được truyền vào.
* HSV(int r, int g, int b)
• Hàm tạo có đối.
• Trong hàm tạo này thực hiện luôn việc chuyển đổi các giá trị màu r, g, b trong hệ màu RGB sang HSV và gán kết quả chuyển đổi cho các thuộc tính tương ứng.
* staticvoid TinhHS(int r, int g, int b, outint gt_h, outdouble gt_s)
• Phương thức tĩnh của lớp.
• Thực hiện tính các giá trị H, S trong hệ màu HSV tương ứng với màu (r, g, b) đưa vào. Nó thực hiện chuyển đổi từ RGB sang HSV, rồi trả về 2 thành phần H và S trong kết quả chuyển đổi.
• Mục đích xây dựng hàm này là để thuận lợi trong tổng hợp histogram và trong xác định màu da dựa trên histogram. Như đã biết, ta xây dựng histogram trên nền HS, tức là ta chỉ cần tính 2 thành phần H, S này là đủ. Dùng hàm này giúp ta tránh phải tạo đi, tạo lại đối tượng HSV với mỗi lần tính, giúp tăng tốc chương trình.
* void RGB(outint r, outint g, outint b)
• Thực hiện chuyển đổi ngược lại từ hệ màu HSV sang RGB.
4.5.2.4. Vị trí
* NameSpace: CDY.CacMoHinhMau * DLL: CacMoHinhMau.dll