Пишу программу, используя эту статью: https://moluch.ru/archive/115/31188/ Мой алгоритм не правильно распознает. Из этой статьи не понятен пункт: Почему в 4 угольнике - 4 треугольника, как формируются эти треугольники?
Получаю srcPoints' таким образом:
Calib3d.findHomography(pts1Mat, pts2Mat, Calib3d.RANSAC, 20, outputMask, 2000, 0.995);
List<DMatch> srcPoints= new ArrayList<DMatch>();
MatOfDMatch goodMatchesRANSAC = new MatOfDMatch();
for (int i = 0; i < good_matches.size(); i++) {
if (outputMask.get(i, 0)[0] == 1) {
srcPoints.add(good_matches.get(i));
}
}
goodMatchesRANSAC.fromList(srcPoints);
pts1/2Mat - ключевые точки первого и второго изображения
Далее нахожу критерий сходства:
private static double sumer(Point c1, Point c2, Point c3) {
double sum = 0;
Point[] dMatches = new Point[3];
dMatches[0] = c1;
dMatches[1] = c2;
dMatches[2] = c3;
for (int i = 0; i < 2; i++) {
for (int j = i + 1; j < 3; j++) {
Point d1 = dMatches[i];
Point d2 = dMatches[j];
double pointX = d1.x - d2.y;
pointX *= pointX;
double pointY = d1.x - d2.y;
pointY *= pointY;
sum = Math.sqrt(pointX + pointY);
}
}
return sum;
}
private static double sumer(DMatch c1, DMatch c2, DMatch c3) {
double sum = 0;
DMatch[] dMatches = new DMatch[3];
dMatches[0] = c1;
dMatches[1] = c2;
dMatches[2] = c3;
for (int i = 0; i < 2; i++) {
for (int j = i + 1; j < 3; j++) {
DMatch d1 = dMatches[i];
DMatch d2 = dMatches[j];
int pointX = d1.queryIdx - d2.queryIdx;
pointX *= pointX;
int pointY = d1.trainIdx - d2.trainIdx;
pointY *= pointY;
sum = Math.sqrt(pointX + pointY);
}
}
return sum;
}
double summer1[] = new double[3];
double summer2[] = new double[3];
int modRansak = goodMatchesRANSAC.toArray().length;
if (modRansak > 5) {
int step = modRansak / 3;
double aver[] = new double[3];
double averad[] = new double[3];
aver[0] = 0;
averad[0] = 0;
averad[1] = 0;
averad[2] = 0;
aver[1] = 0;
aver[2] = 0;
for (int n = 0; n < 3; n++) {
int index[] = new int[4];
for (int i = 0; i < 4; i++) {
int j = step * i + n;
if (j >= modRansak) {
j = modRansak - n - 1;
}
index[i] = j;
}
int j1 = index[0];
int j2 = index[1];
int j3 = index[2];
int j4 = index[3];
DMatch[] good = goodMatchesRANSAC.toArray();
double sum1[] = new double[3];
sum1[0] = sumer(good[j1], good[j2], good[j3]);
sum1[1] = sumer(good[j2], good[j3], good[j4]);
sum1[2] = sumer(good[j1], good[j3], good[j4]);
Point[] points = pts2Mat.toArray();
double sum2[] = new double[3];
sum2[0] = sumer(points[j1], points[j2], points[j3]);
sum2[1] = sumer(points[j2], points[j3], points[j4]);
sum2[2] = sumer(points[j1], points[j3], points[j4]);
double a = 0;
for (int i = 0; i < 3; i++) {
a += (sum1[i] / sum2[i]);
}
aver[n] = a / 3;
for (int i = 0; i < 3; i++) {
averad[n] = (aver[n] - a) /3;
}
}
double min = averad[0];
for (double d : averad) {
if (min > d) {
min = d;
}
}
System.out.println("min " + min);
double alikeValue = 0;
if (min < 0.2) {
alikeValue = (1 - 1.5 * min) * modRansak;
System.out.println("alike " + alikeValue);
}
}
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Компилирую проект java web в netbeans 11, JDK-8В проекте ошибок нет, но не собирается, - BUILD FAILED
Подскажите, пожалуйста, алгоритм - куда двигаться, чтобы создать приложение для чтения книг под androidМожет быть какая-нибудь готовая библиотека...
Есть метод, который ищет данные между двумя датамиНо не включительно
Я хочу выполнить некоторую обработку аудиофайлов без их воспроизведения, только математикаУ меня есть сомнения о том, правильно ли я это...