trang chủ / bài tập / haarfeat

Đặc trưng Haar

Đề bài

Mô tả

Trong thuật toán nhận diện khuôn mặt của Viola và Jones, người ta cần tính giá trị của các đặc trưng Haar trên ảnh. Ta xét mô hình đơn giản hoá sau.

Một bức ảnh là bảng kích thước n×m, mỗi ô chứa một số nguyên là độ sáng của điểm ảnh đó. Một đặc trưng cũng là bảng kích thước n×m, mỗi ô được tô màu trắng (W) hoặc đen (B).

Giá trị của đặc trưng trên một bức ảnh được tính như sau: đặt đặc trưng chồng khít lên ảnh (không xoay, không lật), khi đó giá trị đặc trưng bằng WB, trong đó W là tổng độ sáng các điểm ảnh nằm dưới ô trắng, còn B là tổng độ sáng các điểm ảnh nằm dưới ô đen.

Để tính nhanh giá trị này, người ta dùng các hình chữ nhật tiền tố: đó là hình chữ nhật bất kỳ trên ảnh có góc trên trái trùng với góc trên trái của ảnh. Ta có một biến value ban đầu bằng 0. Trong một thao tác, ta được chọn một hình chữ nhật tiền tố bất kỳ, tính tổng độ sáng các điểm ảnh trong đó, nhân với một số nguyên tuỳ ý rồi cộng vào value.

Cho một đặc trưng, hãy tính số thao tác ít nhất cần dùng để với mọi bức ảnh, sau khi thực hiện các thao tác đó, value đúng bằng giá trị của đặc trưng trên bức ảnh.

Dữ liệu vào

  • Dòng đầu chứa hai số nguyên nm: số hàng và số cột của đặc trưng.
  • n dòng tiếp theo, mỗi dòng gồm m ký tự mô tả đặc trưng: ký tự thứ j của dòng thứ i là W nếu ô đó màu trắng, là B nếu ô đó màu đen.

Dữ liệu ra

In ra một số nguyên duy nhất: số thao tác ít nhất cần thực hiện.

Ràng buộc

  • 1n,m100

Ví dụ

Input Output Giải thích
6 8
BBBBBBBB
BBBBBBBB
BBBBBBBB
WWWWWWWW
WWWWWWWW
WWWWWWWW
2 Thao tác 1: cộng tổng của hình chữ nhật tiền tố 6×8 (cả ảnh) với hệ số 1. Thao tác 2: cộng tổng của hình chữ nhật tiền tố 3×8 với hệ số 2. Khi đó ba hàng dưới có hệ số 1, ba hàng trên có hệ số 12=1, đúng bằng giá trị đặc trưng.
3 3
WBW
BWW
WWW
4 Cần ít nhất 4 thao tác.
3 6
WWBBWW
WWBBWW
WWBBWW
3 Cần ít nhất 3 thao tác.
4 4
BBBB
BBBB
BBBB
BBBW
4 Cần ít nhất 4 thao tác.

Bình luận

Không có bình luận tại thời điểm này.

gnatmake 12.2.0 a68g 3.1.2 nasm 2.16.1 as_x64 2.46 awk 1.3.4 gcc 16.1.0 csc 6.12.0.200 g++ 16.1.0 g++-themis 16.1.0 g++17 16.1.0 g++20 16.1.0 g++23 16.1.0 clang++ 22.1.6 dmd 2.112.0 dart 3.12.1 gforth 0.7.3 gfortran 12.2.0 go 1.26.3 groovyc 5.0.6 javac 25.0.3 node 26.2.0 kotlinc 2.3.21 sbcl 2.2.9 lua 5.4.8 nim 2.2.10 fpc 3.2.2 fpc-themis 3.2.2 perl 5.36.0 php 8.5.6 pike 8.0 pypy3 7.3.23 python3 3.14.5 racket 8.7 ruby 4.0.5 rustc 1.96.0 csc 5.3.0 ctoj-scratch 0.0.1 sed 4.9 tclsh 8.6 bun 1.3.14 deno 2.8.1 v 0.5.1 zig 0.16.0