Phân đoạn, phân vùng ảnh, dựa vào phương sai và trung bình của ảnh

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 :slight_smile:

help hellp help :slight_smile:

help help help :smile:

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?