Skip to content

Instantly share code, notes, and snippets.


Ibraheem Alhashim ialhashim

View GitHub Profile
ialhashim /
Last active Apr 19, 2021
Python implementation of depth filling from NYU Depth v2 toolbox
# Original Matlab code
# Python port of depth filling code from NYU toolbox
# Speed needs to be improved
# Uses 'pypardiso' solver
import scipy
import skimage
ialhashim / fitting3D.cpp
Created Nov 14, 2014
Fitting 3D points to a plane or a line
View fitting3D.cpp
template<class Vector3>
std::pair<Vector3, Vector3> best_plane_from_points(const std::vector<Vector3> & c)
// copy coordinates to matrix in Eigen format
size_t num_atoms = c.size();
Eigen::Matrix< Vector3::Scalar, Eigen::Dynamic, Eigen::Dynamic > coord(3, num_atoms);
for (size_t i = 0; i < num_atoms; ++i) coord.col(i) = c[i];
// calculate centroid
Vector3 centroid(coord.row(0).mean(), coord.row(1).mean(), coord.row(2).mean());
ialhashim / LABP.hpp
Created Aug 29, 2015
Linear Angle Based Parameterization
View LABP.hpp
#pragma once
// Linear angle based parameterization SGP '07 - c++ code
// Based on code by Rhaleb Zayer
#include "SurfaceMeshModel.h"
#include "SurfaceMeshHelper.h"
using namespace SurfaceMesh;
#include <Eigen/Core>
ialhashim / DBSCAN.hpp
Last active Mar 10, 2021
Portable Clustering Algorithms in C++ (DBSCAN) and (Mean-Shift) and (k-medoids)
View DBSCAN.hpp
#pragma once
// Code adapted from
#include <vector>
#include <algorithm>
#include <omp.h>
// Any basic vector/matrix library should also work
#include <Eigen/Core>
View random_colors.hpp
inline QVector<QColor> rndColors(int count){
QVector<QColor> colors;
float currentHue = 0.0;
for (int i = 0; i < count; i++){
colors.push_back( QColor::fromHslF(currentHue, 1.0, 0.5) );
currentHue += 0.618033988749895f;
currentHue = std::fmod(currentHue, 1.0f);
return colors;
ialhashim /
Last active Jan 11, 2021
Reverse port forwarding via an AWS instance

If you want to connect to a local workstation behind a firewall you can do that by bouncing traffic off of an AWS instance.

An example would be accessing a Jupyter Lab from the outside world to a machine with no static IP or behind a firewall.

The steps are:

  1. Create a paid AWS Ubuntu instance and save the '.pem' file.
  2. Make sure the AWS instance's Security Rules allows traffic in.
  3. Test that you can connect to this instance from the outside world (e.g. python3 -m http.server or jupyter lab --ip=*) then visit the instance using its public IP.
  4. Enable GatewayPorts yes as mentioned here and restart sshd as mentioned.
  5. On the local workstation (e.g. GPU workstation) run the following command: ssh -i "YOUR_PEM_FILE.pem" -R AWS_PUBLIC_IP:2222:localhost:8888 ubuntu@AWS_PUBLIC_IP
ialhashim / eigen_matrix_helper.cpp
Created Jul 27, 2014
Eigen matrix helper functions - from and to std::vector and from and to file (Qt)
View eigen_matrix_helper.cpp
template<typename Scalar, typename Container>
inline static Eigen::Matrix<Scalar,-1,-1> toEigenMatrix( const Container& vectors ){
typedef typename Container::value_type VectorType;
typedef typename VectorType::value_type Scalar;
Eigen::Matrix<Scalar,-1,-1> M(vectors.size(), vectors.front().size());
for(size_t i = 0; i < vectors.size(); i++)
for(size_t j = 0; j < vectors.front().size(); j++)
M(i,j) = vectors[i][j];
return M;
ialhashim / screencapture.cpp
Last active Dec 7, 2020
Portable screen capture using C++ under Windows 10 (or 8)
View screencapture.cpp
#include "screengrab.h"
void capture()
CComPtr<ID3D11Device> pDevice;
CComPtr<IDXGIOutputDuplication> pDeskDupl;
//(...)create devices and duplication interface etc here..
ialhashim /
Last active Oct 19, 2020
Resize or interpolate tensors to any spatial dimension in Keras
import tensorflow as tf
import keras.backend as K
from keras.layers import Lambda
# Keras + TensorFlow
# Resize 'tensorA' to be of the same size as 'tensorB' using 'tf.image.resize_bilinear'
# Very useful for skip-connections and 'Concatenate' layers that might complain about being off by one column
# Only works when dimensions are provided since we use ' K.int_shape' that returns the static shape
ialhashim / azure_kinect_capture.cpp
Last active Aug 26, 2020
Azure Kinect basic capturing and visualization on Windows
View azure_kinect_capture.cpp
The most basic example to capture matching RGB and Depth images from an Azure Kinect DK device.
CImg is used to visualize the matching RGB and Depth.
#pragma comment(lib, "gdi32.lib")
#pragma comment(lib, "user32.lib")
#pragma comment(lib, "shell32.lib")