use of boofcv.alg.distort.pinhole.LensDistortionPinhole in project BoofCV by lessthanoptimal.
the class ExampleFisheyeToPinhole method main.
public static void main(String[] args) {
// Path to image data and calibration data
String fisheyePath = UtilIO.pathExample("fisheye/theta/");
// load the fisheye camera parameters
CameraUniversalOmni fisheyeModel = CalibrationIO.load(new File(fisheyePath, "front.yaml"));
// Specify what the pinhole camera should look like
CameraPinhole pinholeModel = new CameraPinhole(400, 400, 0, 300, 300, 600, 600);
// Create the transform from pinhole to fisheye views
LensDistortionNarrowFOV pinholeDistort = new LensDistortionPinhole(pinholeModel);
LensDistortionWideFOV fisheyeDistort = new LensDistortionUniversalOmni(fisheyeModel);
NarrowToWidePtoP_F32 transform = new NarrowToWidePtoP_F32(pinholeDistort, fisheyeDistort);
// Load fisheye RGB image
BufferedImage bufferedFisheye = UtilImageIO.loadImage(fisheyePath, "front_table.jpg");
Planar<GrayU8> fisheyeImage = ConvertBufferedImage.convertFrom(bufferedFisheye, true, ImageType.pl(3, GrayU8.class));
// Create the image distorter which will render the image
InterpolatePixel<Planar<GrayU8>> interp = FactoryInterpolation.createPixel(0, 255, InterpolationType.BILINEAR, BorderType.ZERO, fisheyeImage.getImageType());
ImageDistort<Planar<GrayU8>, Planar<GrayU8>> distorter = FactoryDistort.distort(false, interp, fisheyeImage.getImageType());
// Pass in the transform created above
distorter.setModel(new PointToPixelTransform_F32(transform));
// Render the image. The camera will have a rotation of 0 and will thus be looking straight forward
Planar<GrayU8> pinholeImage = fisheyeImage.createNew(pinholeModel.width, pinholeModel.height);
distorter.apply(fisheyeImage, pinholeImage);
BufferedImage bufferedPinhole0 = ConvertBufferedImage.convertTo(pinholeImage, null, true);
// rotate the virtual pinhole camera to the right
transform.setRotationWideToNarrow(ConvertRotation3D_F32.eulerToMatrix(EulerType.YXZ, 0.8f, 0, 0, null));
distorter.apply(fisheyeImage, pinholeImage);
BufferedImage bufferedPinhole1 = ConvertBufferedImage.convertTo(pinholeImage, null, true);
// Display the results
ListDisplayPanel panel = new ListDisplayPanel();
panel.addImage(bufferedPinhole0, "Pinehole Forward");
panel.addImage(bufferedPinhole1, "Pinehole Right");
panel.addImage(bufferedFisheye, "Fisheye");
panel.setPreferredSize(new Dimension(600, 450));
ShowImages.showWindow(panel, "Fisheye to Pinhole", true);
}
use of boofcv.alg.distort.pinhole.LensDistortionPinhole in project BoofCV by lessthanoptimal.
the class DisplayFisheyeCalibrationPanel method setCalibration.
public void setCalibration(CameraUniversalOmni fisheyeModel) {
BoofSwingUtil.checkGuiThread();
LensDistortionNarrowFOV pinholeDistort = new LensDistortionPinhole(pinholeModel);
fisheyeDistort = new LensDistortionUniversalOmni(fisheyeModel);
distorter = new NarrowToWidePtoP_F32(pinholeDistort, fisheyeDistort);
// Create the image distorter which will render the image
InterpolatePixel<Planar<GrayF32>> interp = FactoryInterpolation.createPixel(0, 255, InterpolationType.BILINEAR, BorderType.ZERO, imageFisheye.getImageType());
distortImage = FactoryDistort.distort(false, interp, imageFisheye.getImageType());
// Pass in the transform created above
distortImage.setModel(new PointToPixelTransform_F32(distorter));
setPinholeCenter(fisheyeModel.width / 2, fisheyeModel.height / 2);
renderPinhole();
}
use of boofcv.alg.distort.pinhole.LensDistortionPinhole in project BoofCV by lessthanoptimal.
the class DisplayFisheyeCalibrationPanel method setCalibration.
public void setCalibration(LensDistortionWideFOV fisheyeDistort, int width, int height) {
BoofSwingUtil.checkGuiThread();
this.fisheyeDistort = fisheyeDistort;
LensDistortionNarrowFOV pinholeDistort = new LensDistortionPinhole(pinholeModel);
distorter = new NarrowToWidePtoP_F32(pinholeDistort, fisheyeDistort);
// Create the image distorter which will render the image
InterpolatePixel<Planar<GrayF32>> interp = FactoryInterpolation.createPixel(0, 255, InterpolationType.BILINEAR, BorderType.ZERO, imageFisheye.getImageType());
distortImage = FactoryDistort.distort(false, interp, imageFisheye.getImageType());
// Pass in the transform created above
distortImage.setModel(new PointToPixelTransform_F32(distorter));
setPinholeCenter(width / 2, height / 2);
renderPinhole();
}
use of boofcv.alg.distort.pinhole.LensDistortionPinhole in project BoofCV by lessthanoptimal.
the class CameraToEquirectangular_F64 method setCameraModel.
public void setCameraModel(CameraPinhole camera) {
Point2Transform2_F64 pixelToNormalized = new LensDistortionPinhole(camera).undistort_F64(true, false);
setCameraModel(camera.width, camera.height, pixelToNormalized);
}
use of boofcv.alg.distort.pinhole.LensDistortionPinhole in project BoofCV by lessthanoptimal.
the class FisheyePinholeApp method updatedPinholeModel.
@Override
public void updatedPinholeModel(int width, int height, double fov) {
final boolean shapeChanged = camWidth != width || camHeight != height;
this.camWidth = width;
this.camHeight = height;
this.hfov = fov;
synchronized (imageLock) {
if (shapeChanged) {
panelPinhole.setPreferredSize(new Dimension(camWidth, camHeight));
pinhole.reshape(camWidth, camHeight);
buffPinhole = new BufferedImage(camWidth, camHeight, BufferedImage.TYPE_INT_BGR);
}
updateIntrinsic();
distorter.configure(new LensDistortionPinhole(cameraModel), fisheyeDistort);
distortImage.setModel(new PointToPixelTransform_F32(distorter));
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
if (shapeChanged) {
panelPinhole.setPreferredSize(new Dimension(camWidth, camHeight));
panelPinhole.setMinimumSize(new Dimension(camWidth, camHeight));
panelPinhole.setMaximumSize(new Dimension(camWidth, camHeight));
imageView.setDividerLocation(-1);
}
}
});
if (inputMethod == InputMethod.IMAGE) {
rerenderPinhole();
}
}
}
Aggregations