   |
|
3D Imaging the ShapeStart Way
Philosophy
The quick version of our development philosophy is, we brainstorm a ton of ideas, do a bunch of quick experiments, refine those ideas, implement prototypes in MATLAB then when everythings working we productize in C and/or CUDA.
A little more detail....
Our projects involve not only software but hardware too. Therefore we use an adapatation of a process originally developed by one of our founders over 7+ years and thousands of products at SlingShot Product Development Group.
Turn shape into advantage....
Our founders have extensive experience in 3D scanning and product development. Therefore, we are creating products that use shape and size (3D scan data) to create business advantage.
| |
function [pts,H] = transformCircle(n)
if nargin < 1,
    n = 256;
end
tol = 1e-4;
H = rand(3,3); H(3,3)=1; % Random persp distortion matrix. The equation of the
% line that will be taken to infinity is -H(end,1:end-1)*x = 1. We can't allow
% this to intersect the bounding box or it will not be guranteed to actually
% bound the circle. generate H(3,1:2) in such a way that this cannot happen.
r = (1/sqrt(2) - tol)*sqrt(rand(1,1));
theta = 2*pi*rand(1,1);
H(3,1) = r*cos(theta); H(3,2) = r*sin(theta);
% Display the circle
hold on
bbox = [-1 1 1 -1 -1; -1 -1 1 1 -1]; % bounding box of the unit circle
bbox = applyTransform(H,bbox); % transformed bounding box
plot(bbox(1,:),bbox(2,:), 'r-')
cntr = [0;0]; % center
cntr = applyTransform(H,cntr); % transformed center
plot(cntr(1),cntr(2),'g+')
pts = [cos(linspace(0,2*pi,n+1)); sin(linspace(0,2*pi,n+1))];% circle
pts = applyTransform(H,pts);% transformed cirlce
plot(pts(1,:),pts(2,:),'b-')
function pts=applyTransform(H,pts)
pts = H * [pts; ones(1,size(pts,2))];% add a third homog coord and multiply by H
pts = pts(1:2,:) ./ repmat(pts(end,:),2,1);% divide by homogenous coordinate
|
|
We use Pivotal Tracker to manage daily & weekly tasks in real time. We also do morning stand up meetings, every morning, to make sure we're all headed in the right direction.
Interact
We are a small team, so everything our developers and engineers create has a direct impact on our business and on our customers business'.
MATLAB
When development speed is a priority we use MATLAB because we can leverage toolboxes and get results quickly. It is also easy to analyze alternative approaches and to downselect to a final implementation.
Productizing
When runtime speed is a priority we take the MATLAB code and port to C and or CUDA. To achieve near real-time processing we often use optimized code. Sometimes there is no substitute for C programming.
|
|

|
We are developing cutting edge 3D scanning technology using structured light, tracking (SIFT, SLAM, etc..), laser triangulation, and the latest in 3D reconstruction. Learn about joining our team on our careers page.
|

Turning Shape Into Advantage   -   Copyright 2011    -    ShapeStart Measurement Systems, Inc.    -    Atlanta, GA    -    800.568-2918
|
|
|