Phân đoạn, phân vùng ảnh, dựa vào phương sai và trung bình của ảnh- Xử lý ảnh, Opencv
chào các bạn
mình đang cần phân đoạn ảnh sau, tìm ra vùng có vân tay thật sự
mình sử dụng phương pháp phân vùng dựa vào miền đồng nhất
bằng cách chia ảnh xám thành các khối vuông m x m
sau đó tính phương sai của ảnh ( tính trùng bình ảnh), rồi so sánh với ngưỡng, nến lớn hơn 1 ngưỡng nào đó thì gán nó vào vùng ảnh, còn ngược lại thì là vùng nền
công thức tính trung bình ảnh và phương sai của anh
nhưng mình đang loay hoay ơ chỗ, ngưỡng phương sai tổng thể là gì, với là bao nhiêu, lấy dựa vào cơ sở nào,
mình đã tách ảnh thành các block 16 x 16
giờ tính phương sai, xong so sánh thì ghép nó lại ảnh 1 Mat ntn, vì mình tách từ 1 ảnh xám, thành nhiều ảnh xám cỡ 16 x 16 và tống nó vào 1 vector < Mat>
mình làm bằng c++
xin cam ơn
tính trung bình ảnh mình làm như sau
float trung_binh_anh(Mat &khoivuong){
int w = 16;
int tb= 0 ;
for (int i = 0; i < w ; i++){
for (int j = 0; j < w; j++){
tb += (int) khoivuong.at<uchar>(i, j);
}
}
return tb * (float)1/(w*w);
}
tính phương sai như sau
float phuong_sai_anh(Mat &khoivuong){
int w = 16;
float ps= 0 ;
float tba = trung_binh_anh(khoivuong);
for (int i = 0; i < w; i++){
for (int j = 0; j < w; j++){
float temp = (int)khoivuong.at<uchar>(i, j) - tba;
ps += (temp * temp);
}
}
return ps * (float) 1/(w*w);
}
cắt block 16x16 như sau, ảnh mình đã resize về 512, 608 để tròn số
vector <Mat> phandoan;
Size kichthuoc_kv(16, 16);
for (size_t i = 0; i < vantay.rows; i += kichthuoc_kv.height){
for (size_t j = 0; j < vantay.cols; j += kichthuoc_kv.width){
Rect khoivuong(j, i, kichthuoc_kv.width, kichthuoc_kv.height);
phandoan.push_back(Mat(vantay, khoivuong));
}
}
help help help
help hellp help
help help help