Posts

Lab Software Development 3 - Scanning Probe Microscope Controller

Image
Motivation     For home-build scanning probe systems in labs, SpecsGroup's Nanonis system is often considered a good solution with various working modes for piezo stage control. However, its' price may not be very friendly for some SPM systems, which do not need a sophisticated feedback PID loop. It is overkill especially for the non-feedback laser microwave impedance microscopy system in our lab. We had a LabView program developed by former students, but it lacks the rotational degree of freedom and line scan mode. Also, the UI's inconvenience has always been painful for users. In order to add more flexibility, I rebuilt a new control system for the SPM with QtCreator with Python as the backend. Functionalities     For convenience, all functionalities are embedded on the same page. Multithreading was implemented for scanning, imaging, and data saving. Many of the functionalities are following the workflow of Park AFM system.      Scan: By clicking "Scan", the con

Lab Software Development 2 - free-carrier DIFFUSION analysis system

Image
Quick screenshot: Paper using the software: https://www.nature.com/articles/s41467-021-25311-1 Motivation: This is a much more challenging project than the free-carrier lifetime analysis system even though this one does not include hardware control or communication. The free carrier diffusion measurement was already established and is running well. However, it is always very troublesome to do the diffusion length extractions, as our tools require three major fittings - signal response curve fitting, laser profile fitting, and convoluted Gaussian diffusion fitting. It is not possible to find a convenient commercial tool in the market to do the analysis, and it was very time-consuming to do manual analysis with Origin, Python, and other tools. A GUI would be much more convenient to use and can without a double boost the working efficiency of the lab. Environment: Since there is no control system needed, there is no need to use the lab-oriented tool LabView. Instead, I chose QtCreator and

Lab Software Development 1 - free-carrier LIFETIME measurement and analysis system

Image
Quick Screenshot: Paper using the software: https://www.nature.com/articles/s41467-021-25311-1 Motivation As the designer for a new free-carrier lifetime measurement system, it is my job to do the software development --- designing a compact controlling system for I/O, data gathering, and data analysis GUI. During the hardware testing phase, I created a rough Python software to control and gather data from the oscilloscope in the lifetime measurement system. It worked without a problem but would be a trouble for other users who know little about Python or programming in general. So creating a PC software with GUI is essential to the new system. Environment Usually, the equipment control and data collecting can be easily done with LabView. However, since we want to add data analysis functionalities to the software, it would be better to use more flexible options, such as Python-based QtCreator. Since I already created some modules with python without GUI, it would be convenient to produ

Digit sequence detection of SVHN dataset

Image
  Unlike single digit detection problem like MNIST, images in SVHN dataset have more than one digit in series. SVHN Samples. Ref: http://ufldl.stanford.edu/housenumbers/ In this project, we used MSER detection and modified pre-trained VGG16 convolutional neural network to predict the digit sequence given a random image in SVHN dataset. Besides VGG16, we also used non-pre-trained VGG16 and self-built a much smaller CNN as comparisons. VGG16 Architecture. Ref: https://neurohive.io/en/popular-networks/vgg16/  Self-built CNN  The pipeline of the prediction is as: MSER detect blob regions →  CNN  find ROIs(regions of interest) → Combine overlapped/near ROIs →  CNN  Find Digits For training purposes, we mark each image with five integers as the label. The first four integers represent digits in the image, with 0 as no digit for that position and 1-10 representing 1-9 and 0. The fifth integer represents whether the area has any digit, with 0 represent a non-digit area and 1 as a window with d

Object tracking & Pedestrian detection

Image
  In this project, we are using Kalman and Particle filters to track motions of objects. (hands, pedestrians) With naive Kalman filter implementation, it is easy to track a moving pedestrian without major shape, or shadow change. Kalman filter (KF) tracking a pedestrian. Blue circle represent the distribution of the KF gaussian With particle filter, we track the face of Romney. The green frames enclose the target window, and blue points represent particles in particle filter (PF). The following frames are with different noise levels, but all get good face detections. As for tracking Romney’s left hand, things are not as trivial since the appearance of his hand keeps changing. Thus we take history into account and update the tracking window model continuously, following: Template( t ) =α Best(t) +(1-α) Template( t-1 ) Hand tracking with history updating Till now, we did not consider the change of size in tracking a target. In order to consider size, we need to let the particles in PF ha

Motion Detection Project

Image
The goal is to detect motions in a series of consecutive images. In this project, the pyramidal approach and hierarchical Lucas-Kanade algorithm are implemented. Frame interpolation is also executed with the help of the LK algorithm. We start with a simple motion towards the right. The “beginning” and “end” figures are the only two frames we have. The central block goes from the middle to the right by a certain range. We are going to extract the motions of pixels from those two figures as the green arrows show below. Two figures we have Motions extracted from the two figures From the motions we extracted, we could do frame interpolation based on the arithmetics below, and create the following dynamic gif animation. It interpolates the frames between the “beginning” and “end” figures show a consecutive motion of the central block towards the right. Then we implement another real world image interpolation. It is not perfect since the source frames (first frame and last frame shown in the

Augmented Reality Project

Image
  This project is from cs6476 computer vision. The main goal is to project images or videos onto a target video with a wall marked by corner templates. Homography transformation is the main theory used in the project. Results are displayed in the following images and videos. corners located correctly, frames marked as blue lines markers located in a noisy image image (UT tower) projected on the wall image projected on the wall with noises image projected on the wall:  Virtual TV on the wall: (penguin video from  BBC )