# Rolling shutter effect simulation on matlab

Hi I'm doing a simulation of the rolling shutter effect on matlab,

in this case the image of the propeller is distorted, and I tried use a DC motor to simulate the plane's engine at home and filmed several sample video but I found the image I captured has shadow like this Therefore I'm think how do I add the shadow into the simulation, I guess it's caused by shutter time, it's like sampling the average value of each pixel on the sensor during a short period of time(exposure), but I don't know how to deal with it so can anyone give me some advice ?

This is the simulation I got with a 2 blade propeller

I modified a piece of code that done by someone else to make continuous image, it seems working properly at the moment.

    close all;
%% Propeller description
omega = 31; % Angular speed in rotations per second
length = 200; % Length of the blades in cm
width = 10; % Cross-section width in cm. (effective projection visible
from the camera. assumed constant.)
numBlades = 2; % number of blade pairs - assume even number of blades
discWidth = 0;
%% Camera description
frameSize = 600*[1 3/4]; % Width & height of the picture frame (in cm)
at the plane of the propeller (assuming the propeller is at the center
of the image)
sensorSize = 1024*[1 3/4]; % Sensor resolution in pixels
frameDuration = 1/30; % Time (in seconds) taken to scan all pixels in
the sensor
%% Initializations
initAngle = 0; % Initial orientation of the propeller. Can be assumed
to be anything without loss of generality.
numPixels = prod(sensorSize); % total number of pixels
tArrScan = [1:numPixels]'*frameDuration/numPixels; % Time instants at
which different pixels are sampled. Starting top-left.
% posPixels: position of the pixels. matrix of dimension numPixels x 2.
1 row for each pixel. 2 elements
% per pixel for X & Y coordinates.
posPixels = -0.5+[reshape(repmat([sensorSize(2):-1:1], sensorSize(1),
1), numPixels, 1)-sensorSize(2)/2 mod([0:numPixels-1]',
sensorSize(1))+1-sensorSize(1)/2];
posPixels = posPixels*frameSize(1)/sensorSize(1); % scaling to
translate the pixels on plane of the propeller.
distPixels = abs(posPixels * [1 i]'); % distance of the pixels from the
center of the frame.
angPixels = angle(posPixels * [i 1]'); % distance of the pixels from
the center of the frame.
figure(1);
%k = 0;                        %%to record specified number offrames
%filename='test'; % File name for video , you can change it
%combinedStr = strcat(filename,'.mp4');       %%combine name of video
to make it mp4
%vidObj = VideoWriter(combinedStr,'MPEG-4');  %%create video object and
tells type of video here type is .mp4
%vidObj.Quality = 100;         %%defines quality of video, more the
value better is quality (slower the process)
%vidObj.FrameRate = 60;        %%defines frame rate of video to be
stored
%open(vidObj);                 %%opens video object to record

while 1
%     %%Camera operation

img = zeros(numPixels,1); % initialization

for kk=0:numBlades-1 % do for each balde
angleBlade = (2*pi/numBlades*kk)+initAngle+2*pi*mod(tArrScan*omega, 1);
% position of the blade when the pixels are being scanned.
distPixel2Blade = sum(posPixels .* [-cos(angleBlade) sin(angleBlade)],
2); % distance of the pixels (when they are scanned) from the axis of
the
blade
distPixel2PerpOrigin = sum(posPixels .* [sin(angleBlade)
cos(angleBlade)], 2); % distance of the pixels from the axis
perpendicular to the blade at origin
distPixel2PerpOutEnd = distPixel2PerpOrigin - length; % distance of
the
pixels from the axis perpendicular to the blade at the ouward end of
the
blade
pixelIsBesideTheBlade = (distPixel2PerpOrigin .* distPixel2PerpOutEnd)
<= 0; % Pixel is within the two ends of the blade
img = img+ min(abs(distPixel2Blade)<width, pixelIsBesideTheBlade); %
add 1 to the pixels that are: (1) within distance width/2 from the line
of
axis of the blade, and (2) within the two ends of the blade.

end
%figure; imagesc(min([reshape(img, sensorSize(1),
sensorSize(2))]',1));
colormap(gray); axis equal; % convert the pixels to 2-D image
%% Create a video to show the results progressively

initAngle=initAngle+2*pi*mod(tArrScan(786432)*omega, 1);
pause(1/100000);
imagesc(min([reshape(img, sensorSize(1), sensorSize(2))]',1));
colormap(gray); axis equal;
%     imagesc(min([reshape(tmpimg+scnimg+bldimg, sensorSize(1), sensorSize(2))]',1)); colormap(gray); axis equal;
%  imagesc(min([reshape(max(max(2*tmpimg,scnimg),bldimg), sensorSize(1), sensorSize(2))]',1)); colormap(gray); axis equal;

end

%close(figure(1))
%k=k+1

%close(vidObj); %% close video object

• Outside in bright sunlight your shutter speed willbe much higher than indoors by room lighting. – Brian Drummond Feb 12 '18 at 20:33
• @BrianDrummond At the moment I'm thinking about adding the shutter speed into the simulation... – Yicheng Yang Feb 12 '18 at 20:44
• This is a very interesting experiment that you are performing. Utilizing image processing with the dynamics of a plane propeller and plotting its motion in real-time. However... I'm very confused what your graph is showing because there are no labels anywhere. Your code is also pretty messy because you have words that are scattered on different lines of your comments. However, that could just be our website messing up when you tried to place it inside a block of code. Good luck on your project though. This will pretty awesome if you get this to work. – user103380 Feb 12 '18 at 23:56
• First, make sure your camera has a rolling shutter. Next, get a fantastically bright light and use a bright "prop" so that you can get the fastest shutter speed practical from your camera. Finally, make sure your propeller's speed is proportional to that of the plane. – uint128_t Feb 13 '18 at 1:24
• @unit128_t Yes I'm sure my camera has rolling shutter, it is CMOS based imaging sensor, today I placed a white board behind the motor to make a clean background, I can see the shadow of the propeller blade more clearly. I think the matlab simulation gave a result at the condition that the shutter speed is at a sensible high value, but for my project I have to use goPro, which is quite subtle because the shutter speed is fixed. – Yicheng Yang Feb 13 '18 at 16:57