public matrannhiphan tachbien() { matrannhiphan ketqua = new matrannhiphan(sohang, socot, false); int i, j; for (i = 0; i < this.sohang; ++i) for (j = 0; j < this.socot; ++j) { if (diembien(i, j)) ketqua.data[i, j] = true; } return ketqua; }
public matrannhiphan timxuong() { int sodiemxoa = 0; matrannhiphan ketqua = new matrannhiphan(sohang, socot, false); //matrannhiphan mt_bien; ketqua.xetca(); int i, j; matrannhiphan tg = new matrannhiphan(sohang, socot); for (i = 0; i < this.sohang; ++i) for (j = 0; j < this.socot; ++j) tg.data[i, j] = data[i, j]; matrannhiphan tg1 = new matrannhiphan(sohang, socot); for (i = 0; i < this.sohang; ++i) for (j = 0; j < this.socot; ++j) tg1.data[i, j] = tg.data[i, j]; do { sodiemxoa = 0; //mt_bien = tg.tachbien(); for (i = 0; i < this.sohang; ++i) for (j = 0; j < this.socot; ++j) if (ketqua.xet[i, j]) { // if(mt_bien.data[i,j]) if (tg.diembien(i, j)) { if (tg.diemxuong(i, j)) { ketqua.data[i, j] = true; ketqua.xet[i, j] = false; sodiemxoa++; } else if (tg.diembiendoi(i, j) && tg1.diembiendoi(i, j)) { ketqua.xet[i, j] = false; tg.data[i, j] = tg1.data[i, j] = false; sodiemxoa++; } else if (!tg.diemxuong(i, j)) { tg1.data[i, j] = false; ketqua.xet[i, j] = false; sodiemxoa++; } } }; tg = new matrannhiphan(sohang, socot); for (i = 0; i < this.sohang; ++i) for (j = 0; j < this.socot; ++j) tg.data[i, j] = tg1.data[i, j]; } while (sodiemxoa > 0); return tg; }
public matrannhiphan noi() { matrannhiphan ketqua = new matrannhiphan(sohang, socot); int i, j; for (i = 0; i < sohang; ++i) for (j = 0; j < socot; ++j) { ketqua.data[i, j] = this.data[i, j]; } for (i = 0; i < sohang; ++i) for (j = 0; j < socot; ++j) if (ketqua.diemnoi(i, j)) ketqua.data[i, j] = true; return ketqua; }
public int sosanh(matrannhiphan anh2) { int ketqua = 0; int i, j; for (i = 0; i < Sohang; ++i) for (j = 0; j < socot; ++j) { if (data[i, j] != anh2.data[i, j]) ketqua++; } return ketqua; }
public matrannhiphan chuanhoa() { matrannhiphan ketqua = new matrannhiphan(sohang, socot); int i, j; for (i = 0; i < sohang; ++i) for (j = 0; j < socot; ++j) ketqua.data[i, j] = this.data[i, j]; for (i = 0; i < sohang; ++i) for (j = 0; j < socot; ++j) ketqua.chuanhoa(i, j); return ketqua; }
public matrannhiphan gian() { matrannhiphan ketqua = new matrannhiphan(sohang, socot); int i, j, k, l; for (i = 0; i < sohang; ++i) for (j = 0; j < socot; ++j) ketqua.data[i, j] = data[i, j]; for (i = 0; i < sohang; ++i) for (j = 0; j < socot; ++j) if (data[i, j]) { for (k = 0; k < 3; ++k) for (l = 0; l < 3; ++l) { if (hople(i + k - 1, j + l - 1)) ketqua.data[i + k - 1, j + l - 1] = true; } } return ketqua; }
public matrannguyen phanvung() { matrannguyen kq = new matrannguyen(512, 512); matrannguyen tg = new matrannguyen(32, 32); matrannguyen tg1 = new matrannguyen(32, 32); for (int i = 0; i < 32; ++i) for (int j = 0; j < 32; ++j) { int bien = 0; for (int k = 0; k < 16; ++k) for (int l = 0; l < 16; ++l) { bien += data[16 * i + k, 16 * j + l]; } bien = (int)bien / (16 * 16); tg.data[i, j] = bien; } for (int i = 0; i < 32; ++i) for (int j = 0; j < 32; ++j) { int xet = 0; for (int k = 0; k < 16; ++k) for (int l = 0; l < 16; ++l) { xet += (int)(data[16 * i + k, 16 * j + l] - tg.data[i, j]) * (data[16 * i + k, 16 * j + l] - tg.data[i, j]); } tg1.data[i, j] = (int)xet / (16 * 16); } matrannhiphan tg3 = new matrannhiphan(32, 32); for (int i = 0; i < 32; ++i) for (int j = 0; j < 32; ++j) { tg3.data[i, j] = (tg1.data[i, j] > 40); } tg3 = tg3.co(); tg3 = tg3.co(); //tg3 = tg3.co(); //tg3 = tg3.co(); //tg3 = tg3.gian(); //tg3 = tg3.gian(); tg3 = tg3.gian(); tg3 = tg3.gian(); matrannhiphan tg4 = tg3.tachbien(); for (int i = 0; i < 32; ++i) for (int j = 0; j < 32; ++j) { for (int k = 0; k < 16; ++k) for (int l = 0; l < 16; ++l) { if (!tg3.data[i, j]) kq.data[16 * i + k, 16 * j + l] = 255; else kq.data[16 * i + k, 16 * j + l] = 0; } } int ng; for (int i = 0; i < 32; ++i) for (int j = 0; j < 32; ++j) if (tg4.data[i, j]) { ng = (int)(max(new rect(16 * i, 16 * j, 16, 16)) + min(new rect(16 * i, 16 * j, 16, 16))) / 2; for (int k = 0; k < 16; ++k) for (int l = 0; l < 16; ++l) { if (data[16 * i + k, 16 * j + l] > ng + 10) kq.data[16 * i + k, 16 * j + l] = 255; else kq.data[16 * i + k, 16 * j + l] = 0; } } return kq; }
public matrannhiphan(matrannhiphan m) { int i, j; sohang = m.sohang; socot = m.socot; data = new bool[sohang, socot]; for (i = 0; i < this.sohang; ++i) for (j = 0; j < this.socot; ++j) data[i, j] = m.data[i, j]; }
public matrannhiphan xoa() { int i, j; matrannguyen tg = this.trichdactrung(); matrannhiphan ketqua = new matrannhiphan(sohang, socot); for (i = 0; i < sohang; ++i) for (j = 0; j < socot; ++j) ketqua.data[i, j] = this.data[i, j]; for (i = 0; i < sohang; i++) for (j = 0; j < socot; ++j) if (tg.data[i, j] == 1) if (this.chieudainhanh(i, j) < 3) ketqua.xoa_nhanh(i, j); return ketqua; }
public matrannhiphan t_xdoi() { matrannhiphan kq = new matrannhiphan(sohang, socot, false); for (int i = 0; i < kq.sohang; i++) for (int j = 0; j < kq.socot; j++) { if (this.data[i, j] == true) { bool xet = t_ddoi(i, j); if (xet == true) { bool xet1 = t_xddoi(i, j); if (xet1 == true) this.data[i, j] = false; } } } kq = t_conver(); kq = kq.t_xdoi(); return kq; }
public matrannhiphan t_mtxuong() { matrannhiphan kq = new matrannhiphan(sohang, socot, false); matrannhiphan tg = new matrannhiphan(sohang, socot, false); bool xoa = false; do { int dem = 0; tg = t_mtb(); for (int i = 1; i < kq.socot - 1; i++) for (int j = 1; j < kq.socot - 1; j++) { if (tg.data[i, j] == true) { bool xet = false; xet = t_dxuong(i, j); if (xet == false) { data[i, j] = false; dem++; } } } if (dem == 0) xoa = true; } while (xoa == false); kq = t_conver(); return kq; }
public matrannhiphan t_mtb() { matrannhiphan kq = new matrannhiphan(sohang, socot, false); for (int i = 0; i < kq.socot; i++) for (int j = 0; j < kq.socot; j++) { bool tg = false; tg = diembien(i, j); if (tg == true) kq.data[i, j] = true; else kq.data[i, j] = false; } return kq; }
public matrannhiphan t_conver() { matrannhiphan kq = new matrannhiphan(socot, sohang, false); for (int i = 0; i < kq.socot; i++) for (int j = 0; j < kq.socot; j++) { kq.data[i, j] = data[i, j]; } return kq; }