Skip to content

Commit

Permalink
Refactoring
Browse files Browse the repository at this point in the history
  • Loading branch information
nfeybesse committed Jul 16, 2018
1 parent b3c2774 commit 7906d15
Show file tree
Hide file tree
Showing 3 changed files with 44 additions and 13 deletions.
Expand Up @@ -29,12 +29,12 @@ public class FHTManager {
private IntegerProperty hBlurSize = new SimpleIntegerProperty(81);
// private DoubleProperty vNeighbourPenality = new SimpleDoubleProperty(-100);
// private DoubleProperty hNeighbourPenality = new SimpleDoubleProperty(-100);
private DoubleProperty vAnglePenality = new SimpleDoubleProperty(-0.08);
private DoubleProperty hAnglePenality = new SimpleDoubleProperty(-0.08);
private DoubleProperty vRecover = new SimpleDoubleProperty(0.75);
private DoubleProperty hRecover = new SimpleDoubleProperty(0.75);
private DoubleProperty vAnglePenality = new SimpleDoubleProperty(-0.12);
private DoubleProperty hAnglePenality = new SimpleDoubleProperty(-0.12);
private DoubleProperty vRecover = new SimpleDoubleProperty(0.6);
private DoubleProperty hRecover = new SimpleDoubleProperty(0.6);
private IntegerProperty vStripsNumber = new SimpleIntegerProperty(16);
private IntegerProperty hStripsNumber = new SimpleIntegerProperty(8);
private IntegerProperty hStripsNumber = new SimpleIntegerProperty(10);
private DoubleBinding stripWidth;
private DoubleBinding stripHeight;
private DoubleBinding vStep;
Expand Down
Expand Up @@ -17,16 +17,16 @@ public class Mesh3D extends AbstractMesh<Point3> {

private final Mesh mesh;
private List<Point3> points3D;
private final Size size;
private final Size enlargedSize;

public Mesh3D(Mesh mesh, Size size, double focal) {
public Mesh3D(Mesh mesh, Size enlargedSize, double focal) {
super(mesh.halfWidth, mesh.halfHeight);
this.mesh = mesh;
this.size = size;
this.enlargedSize = enlargedSize;
int[][] indexRects = mesh.values().stream().map(indexedPts -> new int[] { indexedPts[0].getIndex(), indexedPts[1].getIndex(), indexedPts[2].getIndex(), indexedPts[3].getIndex() }).toArray(int[][]::new);

// System.out.println("Focale : " + focal);
List<Point> focalizedPts = mesh.getPointIndex().stream().map(pts -> new Point((pts.x - size.width / 2) / focal, (pts.y - size.height / 2) / focal)).collect(Collectors.toList());
List<Point> focalizedPts = mesh.getPointIndex().stream().map(pts -> new Point((pts.x - enlargedSize.width / 2) / focal, (pts.y - enlargedSize.height / 2) / focal)).collect(Collectors.toList());

points3D = Svd.solve(focalizedPts, indexRects);
for (int i = -halfHeight; i < halfHeight; i++)
Expand All @@ -46,6 +46,7 @@ public Mat draw3Dsurface(Scalar colorStart, Scalar colorEnd, Size size) {
double yMax = points3D.stream().mapToDouble(p -> p.y + p.z).max().getAsDouble();
double zMax = points3D.stream().mapToDouble(p -> p.z).max().getAsDouble();

System.out.println("Z : " + zMin + " " + zMax);
int newWidth = (int) size.width;
int newHeight = (int) Math.ceil((yMax - yMin) * size.width / (xMax - xMin));
Mat result = new Mat(newHeight, newWidth, CvType.CV_8UC3, new Scalar(0, 0, 0));
Expand Down Expand Up @@ -115,7 +116,7 @@ public Mesh reverseMesh() {
double height = 2 * Math.min(DoubleStream.of(heights).limit(halfHeight).sum(), DoubleStream.of(heights).skip(halfHeight).sum());
double width = 2 * Math.min(DoubleStream.of(widths).limit(halfWidth).sum(), DoubleStream.of(widths).skip(halfWidth).sum());

double coef = Math.max(size.height / height, size.width / width);
double coef = Math.max(enlargedSize.height / height, enlargedSize.width / width);
for (int i = 0; i < heights.length; i++)
heights[i] *= coef;
for (int i = 0; i < widths.length; i++)
Expand All @@ -124,7 +125,7 @@ public Mesh reverseMesh() {
Points candidatePoints = mesh.getPoints();
Point imageCenter = candidatePoints.getPoint(0, 0);
ReverseMap reverseMap = new ReverseMap(mesh, halfWidth, halfHeight, imageCenter, widths, heights);
Points points = new ReversePoints(reverseMap, candidatePoints.xBorder, candidatePoints.yBorder, imageCenter, halfWidth, halfHeight, size);
Points points = new ReversePoints(reverseMap, candidatePoints.xBorder, candidatePoints.yBorder, imageCenter, halfWidth, halfHeight, enlargedSize);
return new Mesh(points, halfWidth, halfHeight);
}

Expand Down
Expand Up @@ -125,14 +125,44 @@ private Image[] doWork() {
}

Mat stabilized = referenceManager.dewarp(newImgDescriptor, homography);
MatOfPoint trackedFeatures = new MatOfPoint();
MatOfPoint corners = new MatOfPoint();// global
Imgproc.goodFeaturesToTrack(new Img(stabilized, false).bgr2Gray().getSrc(), trackedFeatures, 300, 0.01, 10);
Mat stabilizedDisplay = stabilized.clone();
Arrays.stream(trackedFeatures.toArray()).forEach(corner -> Imgproc.circle(stabilizedDisplay, corner, 3, new Scalar(0, 255, 0)));

// Mat gray = new Img(xxx, false).bgr2Gray().getSrc();
// MatOfByte status = new MatOfByte();
// MatOfFloat errors = new MatOfFloat();
// Mat prevGray = gray;
//
// Video.calcOpticalFlowPyrLK(prevGray, gray, new MatOfPoint2f(trackedFeatures.toArray()), new MatOfPoint2f(corners.toArray()), status, errors, new Size(10, 10), 3, new TermCriteria(TermCriteria.COUNT + TermCriteria.EPS, 30, 0.01), 0, 0.0001);
// // size 21*21 ?
//
// Mat newRigidTransform = estimateRigidTransform(trackedFeatures, corners, false);
// Mat nrt33 = Mat.eye(3, 3, CvType.CV_32SC1);
// newRigidTransform.copyTo(nrt33.rowRange(0, 2));
// Mat rigidTransform = new Mat();// global var
// Core.gemm(rigidTransform, nrt33, 1, new Mat(), 0, rigidTransform);
//
// Mat invTrans = rigidTransform.inv();// DECOMP_SVD
// Imgproc.warpAffine(frame.getSrc(), stabilizedDisplay, invTrans.rowRange(0, 2), frame.getSrc().size());

images[1] = new Img(stabilizedDisplay, false).toJfxImage();

// Mat rvec1, tvec1;
// solvePnP(objectPoints, corners1, cameraMatrix, distCoeffs, rvec1, tvec1);
// Mat rvec2, tvec2;
// solvePnP(objectPoints, corners2, cameraMatrix, distCoeffs, rvec2, tvec2);

Mat binarized = new Img(stabilized, false).adaptativeGaussianInvThreshold(7, 5).getSrc();
if (!fhtManager.isInitialized() || frameCount % 30 == 0)
fhtManager.init(binarized);
images[1] = new Img(fhtManager.getMeshManager().drawReverse(stabilized, new Scalar(255, 0, 0), new Scalar(0, 255, 0)), false).toJfxImage();
images[2] = new Img(fhtManager.getMeshManager().drawReverse(stabilized, new Scalar(255, 0, 0), new Scalar(0, 255, 0)), false).toJfxImage();

// Mesh reverseMesh = fhtManager.getMeshManager().getReverseMesh();
// Mat result = reverseMesh.dewarp(stabilized, stabilized.size());
images[2] = new Img(fhtManager.getMeshManager().dewarpReverse(stabilized), false).toJfxImage();
images[3] = new Img(fhtManager.getMeshManager().dewarpReverse(stabilized), false).toJfxImage();
// Mat patch = Mat.zeros(frame.size(), frame.type());
// int deltaX = (int) (frame.size().width / 8);
// int deltaY = (int) (frame.size().height / 4);
Expand Down

0 comments on commit 7906d15

Please sign in to comment.