Welcome to my webpage: Dara Singh

From a summer of 2023 day, behind my desk

A little bit about myself:

I am a mechanical engineer who also enjoys writing codes in various languages, including C++, Python, MATLAB, C#, R, etc. I have also worked in the field of biomedical image processing and data science during my postdoc training. I am also a good chess player, usually playing it online. I speak English, Hindi, and Persian fluently.

My education:

Ph.D. in Mechanical Engineering from the University of Kentucky, Kentucky, USA. M.Sc. in Mechanical Engineering from the Sharif University of Technology, Iran. B.Sc. in Mechanical Engineering from the Sharif University of Technology, Iran.

Notes on my education:

During my graduate studies, I was passionate about classical problems in Mechanics. I took courses including vibrations, non-linear oscillations, continuum mechanics, advanced dynamics, and composites, to name a few. Unfortunately, present-day engineering problems are more complicated and require advanced computational methods, including Finite Element Methods (FEM) and Computational Fluid Mechanics (CFD), for their solution. To succeed in the field, I advanced my skills by completing my Ph.D. dissertation and master's thesis using FEM and CFD tools, respectively. I was also the Teaching Assistant of the FEM class for twelve semesters at the University of Kentucky, during my Ph.D.

My postdoctoral trainings:

College of Engineering, Morehead State University, Kentucky, USA. Biomedical Enginering Department, University of Kentucky, Kentucky, USA.

Notes on postdoctoral trainings:

I gained a lot of experience in procedural programming With MATLAB during my graduate studies. However, during my postdoc at Morehead State University, I dived deep into Object-Oriented Programming (OOP) by using C# in my virtual reality project. I developed a virtual training package to help use a forklift with the help of Unity's game engine. At the Biomedical Optics Lab in the Biomedical Engineering Department of the University of Kentucky, I sharpened my data analysis tools by developing various image processing algorithms in Python and MATLAB. The biggest challenge was denoising the images from living subjects because of their movements. In addition, due to the fast acquisition rate of the scientific cameras, more noise got its way in through faulty pixels. Every type of noise requires a different approach. For myself, I got to practice various concepts in biomedical signal processing. I crafted kernels since some of my filters were linear. It saved much of the processing time by eliminating for-loops. I also used autoencoders and Convolutional Neural Networks to catch unexpected noises in the images taken over time. Even though I wasn't required to, I also took a course on Statistics during this period. I also studied Statistical Learning Methods.

Similarities between chess, programming, and data analysis:

Firstly, they are all fun. Secondly, the rules are simple, but their combination becomes complex. Thirdly, you must study other people's creations to improve your skills. Lastly, they are still fun.

A fun code:

We can summarize higher-order space information to a lower-order space by selecting the more dominant principle axis of the higher dimension. This basic concept has applications in mechanical engineering, including in design, when you want to only look at the dominant vibration modes in your system. Then you find Eigenvalues and Eigenvectors and study the effect of more dominant modes superimposed onto each other. In the fun code below, I have implemented the same mathematical concept on an image to see the principle in action. At first, I decomposed the image [which is a matrix of m-by-n] by the Singular Value Decomposition method. Then I selected a fraction of the highest modes in the S-matrix, which holds the Eigenvalues. Then I put back the image. You can verify the concept with your picture to see that just 10% of your Eigenvalues are enough to reconstruct an acceptable representation of the original image. Please note that for simplicity and demonstration purposes, I have used only the first channel of the RGB image of my profile.

From a summer of 2023 day, behind my desk
Reconstruction using 3% of eigenvalues
From a summer of 2023 day, behind my desk
Reconstruction using 5% of eigenvalues
From a summer of 2023 day, behind my desk
Reconstruction using 10% of eigenvalues
From a summer of 2023 day, behind my desk
Reconstruction using 30% of eigenvalues
From a summer of 2023 day, behind my desk
Reconstruction using 100% of eigenvalues

% ------------------------------------------------------------------------- % Title: daraSVD_Gray.m % Author: Dara Singh, Ph.D. % Date: 05/22/2023 % % Description: This MATLAB code generates singular value decomposition of an % image in gray-scale and after selecting desired dominant modes, % reconstructs the image. Removing the highest frequency modes can imply % the removal of noise. Using very few top eigenvalues and their % correspoding eigen vectors can be a mean of storing large information but % this method is not a practical way of image compression. Hence you can % think of this code as a fun code. % % All Rights Reserved. % ------------------------------------------------------------------------- clc; clear all; close all; daraImage=imread("daraImage_1.jpg"); figure(1) daraImage=daraImage(:,:,1); imshow(daraImage) daraImage=double(daraImage); [U,S,V] = svd(daraImage); % Breaking down image matrix into S,V and D. daraImageR=U*S*V'; % Putting S,V and D to back together to get daraImage. figure(2) imshow(uint8(daraImageR)) % Visuaually verified. percentage=[3,5,10,30,50,100]; for i=1:length(percentage) s=floor(size(S,1)*percentage(i)/100); daraImageR=U(:,1:s)*S(1:s,1:s)*V(:,1:s)'; figure(i+2) imageGenerated=uint8(daraImageR); imshow(imageGenerated); pause(3); imageTitle=strcat("daraImageR",num2str(percentage(i)),'.png'); imwrite(imageGenerated,imageTitle); end