Geometry of Stereo Vision explained
In this video, I explain the geometry of stereo Vision. Please have look at my other tutorial about finding the essential and fundamental matrix.
Geometry of Stereo Vision explained Read More »
In this video, I explain the geometry of stereo Vision. Please have look at my other tutorial about finding the essential and fundamental matrix.
Geometry of Stereo Vision explained Read More »
What is the relation between the size of an object and its projection in camera fame? In this video, I explain how far you should stay from an object to see it at your desired size at camera frame </
The relation between the size of an object and its projection in camera fame Read More »
In this tutorial, I explain the vanishing points in computer vision.
Vanishing points in computer vision explained Read More »
The equation of Line and plane in 3D Space:
Equation of Line and Plane in 3D Space Explained Read More »
Pose estimation and tracking human is one the key step in sports analysis. Here is in this work I used openpose for analysis of player in a Bundesliga game HSV Hamburg vs Bayer München. Warning: the video might be disturbing for HSV fans 🙂 Original Video Analyzed Video Original Video Analyzed Video Original Video Analyzed Video Original Video
Human detection and Pose Estimation with Deep Learning for Sport Analysis Read More »
In my other tutorial, I showed you how to calibrate you stereo camera. After Calibration, we can get disparity map and RGBD PCL point cloud from our stereo camera cool huh 🙂 1)Save the following text under “stereo_usb_cam_stream_publisher.launch”
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 |
<launch> <arg name="video_device_right" default="/dev/video1" /> <arg name="video_device_left" default="/dev/video2" /> <arg name="image_width" default="640" /> <arg name="image_height" default="480" /> <arg name="right_image_namespace" default="stereo" /> <arg name="left_image_namespace" default="stereo" /> <arg name="right_image_node" default="right" /> <arg name="left_image_node" default="left" /> <arg name="image_topic_name_right" default="image_raw" /> <arg name="camera_info_topic_name_right" default="camera_info" /> <arg name="image_topic_name_left" default="image_raw" /> <arg name="camera_info_topic_name_left" default="camera_info" /> <arg name="left_camera_name" default="left" /> <arg name="right_camera_name" default="right" /> <arg name="left_camera_frame_id" default="left_camera" /> <arg name="right_camera_frame_id" default="right_camera" /> <arg name="framerate" default="30" /> <arg name="camera_info" default="false" /> <arg name="camera_info_path" default="stereo_camera_info" /> <node ns="$(arg right_image_namespace)" name="$(arg right_image_node)" pkg="usb_cam" type="usb_cam_node" output="screen" > <param name="video_device" value="$(arg video_device_right)" /> <param name="image_width" value="$(arg image_width)" /> <param name="image_height" value="$(arg image_height)"/> <param name="pixel_format" value="yuyv" /> <param name="io_method" value="mmap"/> <remap from="/usb_cam/image_raw" to="$(arg image_topic_name_right)" /> <param name="framerate" value="$(arg framerate)"/> <!-- if camera_info is available, we will use it--> <param name="camera_frame_id" value="$(arg right_camera_frame_id)" if="$(arg camera_info)" /> <param name="camera_info_url" value="file://${ROS_HOME}/$(arg camera_info_path)/right.yaml" if="$(arg camera_info)"/> <param name="camera_name" value="narrow_stereo/$(arg right_camera_name)" if="$(arg camera_info)"/> <remap from="/usb_cam/camera_info" to="$(arg camera_info_topic_name_right)" if="$(arg camera_info)"/> </node> <node ns="$(arg left_image_namespace)" name="$(arg left_image_node)" pkg="usb_cam" type="usb_cam_node" output="screen" > <param name="video_device" value="$(arg video_device_left)" /> <param name="image_width" value="$(arg image_width)" /> <param name="image_height" value="$(arg image_height)"/> <param name="pixel_format" value="yuyv" /> <param name="io_method" value="mmap"/> <param name="framerate" value="$(arg framerate)"/> <remap from="/usb_cam/image_raw" to="$(arg image_topic_name_left)"/> <!-- if camera_info is available, we will use it--> <param name="camera_frame_id" value="$(arg left_camera_frame_id)" if="$(arg camera_info)"/> <param name="camera_name" value="narrow_stereo/$(arg left_camera_name)" if="$(arg camera_info)"/> <param name="camera_info_url" value="file://${ROS_HOME}/$(arg camera_info_path)/left.yaml" if="$(arg camera_info)"/> <remap from="/usb_cam/camera_info" to="$(arg camera_info_topic_name_left)" if="$(arg camera_info)"/> </node> </launch> |
2) Then run the following node to publish both cameras and camera info (calibration matrix)
1 |
roslaunch stereo_usb_cam_stream_publisher.launch video_device_right:=/dev/video1 video_device_left:=/dev/video2 image_width:=640 image_height:=480 left_camera_name:=left right_camera_name:=right camera_info:=true camera_info_path:=stereo_camera_info |
3) Run the
RGBD PCL point cloud from Stereo vision with ROS and OpenCV Read More »
In this tutorial, I’m gonna show you stereo camera calibration with ROS and OpenCV. So you need a pair of cameras, I bought a pair of this USB webcam which is okay for this task. 1)Save the following text under “stereo_usb_cam_stream_publisher.launch”
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 |
<launch> <arg name="video_device_right" default="/dev/video1" /> <arg name="video_device_left" default="/dev/video2" /> <arg name="image_width" default="640" /> <arg name="image_height" default="480" /> <arg name="right_image_namespace" default="stereo" /> <arg name="left_image_namespace" default="stereo" /> <arg name="right_image_node" default="right" /> <arg name="left_image_node" default="left" /> <arg name="image_topic_name_right" default="image_raw" /> <arg name="camera_info_topic_name_right" default="camera_info" /> <arg name="image_topic_name_left" default="image_raw" /> <arg name="camera_info_topic_name_left" default="camera_info" /> <arg name="left_camera_name" default="left" /> <arg name="right_camera_name" default="right" /> <arg name="left_camera_frame_id" default="left_camera" /> <arg name="right_camera_frame_id" default="right_camera" /> <arg name="framerate" default="30" /> <arg name="camera_info" default="false" /> <arg name="camera_info_path" default="stereo_camera_info" /> <node ns="$(arg right_image_namespace)" name="$(arg right_image_node)" pkg="usb_cam" type="usb_cam_node" output="screen" > <param name="video_device" value="$(arg video_device_right)" /> <param name="image_width" value="$(arg image_width)" /> <param name="image_height" value="$(arg image_height)"/> <param name="pixel_format" value="yuyv" /> <param name="io_method" value="mmap"/> <remap from="/usb_cam/image_raw" to="$(arg image_topic_name_right)" /> <param name="framerate" value="$(arg framerate)"/> <!-- if camera_info is available, we will use it--> <param name="camera_frame_id" value="$(arg right_camera_frame_id)" if="$(arg camera_info)" /> <param name="camera_info_url" value="file://${ROS_HOME}/$(arg camera_info_path)/right.yaml" if="$(arg camera_info)"/> <param name="camera_name" value="narrow_stereo/$(arg right_camera_name)" if="$(arg camera_info)"/> <remap from="/usb_cam/camera_info" to="$(arg camera_info_topic_name_right)" if="$(arg camera_info)"/> </node> <node ns="$(arg left_image_namespace)" name="$(arg left_image_node)" pkg="usb_cam" type="usb_cam_node" output="screen" > <param name="video_device" value="$(arg video_device_left)" /> <param name="image_width" value="$(arg image_width)" /> <param name="image_height" value="$(arg image_height)"/> <param name="pixel_format" value="yuyv" /> <param name="io_method" value="mmap"/> <param name="framerate" value="$(arg framerate)"/> <remap from="/usb_cam/image_raw" to="$(arg image_topic_name_left)"/> <!-- if camera_info is available, we will use it--> <param name="camera_frame_id" value="$(arg left_camera_frame_id)" if="$(arg camera_info)"/> <param name="camera_name" value="narrow_stereo/$(arg left_camera_name)" if="$(arg camera_info)"/> <param name="camera_info_url" value="file://${ROS_HOME}/$(arg camera_info_path)/left.yaml" if="$(arg camera_info)"/> <remap from="/usb_cam/camera_info" to="$(arg camera_info_topic_name_left)" if="$(arg camera_info)"/> </node> </launch> |
2)Then run the following node to publish both cameras.
1 |
roslaunch stereo_usb_cam_stream_publisher.launch video_device_right:=/dev/video1 video_device_left:=/dev/video2 image_width:=640 image_height:=480 left_camera_name:=left right_camera_name:=right |
3)Now call the calibration node:
Stereo Camera Calibration with ROS and OpenCV Read More »
Structure-from-Motion (SFM) is genuinely an interesting topic in computer vision, Basically making 3D structure from something 2D is absolutely mesmerizing 🙂 There two open source yet very robust tools for SFM, which sometimes compiling them might be complicated, here I will share my experience with you. 1)VisualSFM Prerequisite: 1)Glew Download the glew from SF at http://glew.sourceforge.net/. Do NOT get it from Github as
Open source Structure-from-Motion and Multi-View Stereo tools with C++ Read More »
There are two main approaches for computing optical flow, computing optical flow for all pixel or computing optical flow for corners. 1. Computing optical flow for all pixel 2. Computing optical flow for corners
Computing OpticalFlow with OpenCV Read More »
Solving a Homography problem leads to solving a set of homogeneous linear equations such below: \begin{equation} \left( \begin{array}{ccccccccc} -x1 & -y1 & -1 & 0 & 0 & 0 & x1*xp1 & y1*xp1 & xp1\\ 0 & 0 & 0 & -x1 & -y1 & -1 & x1*yp1 & y1*yp1 & yp1\\ -x2 & -y2 &