Hi,
I filmed a pendulum swinging. I've taken a frame out of the video, and the image looks like this:
Now, I used the following code to get a nice black line:
thresh = 0.7701;%HSV Color space
I = imread('frame4.jpg');H = rgb2hsv(I);H_plane=H(:,:,1);S_plane=H(:,:,2);V_plane=H(:,:,3);imshow(S_plane);BW = S_plane < thresh;imshow(BW)
So far so good.
However, when I run regionprops to get an angle, as follows:
% Carrying out regionprops to calculate the ellipse which will give an
% angle.
stats = regionprops(BW, {'Area', 'Orientation','Centroid','BoundingBox'}); [~,I] = max([stats(:).Area]); props = stats(I); qR = -999; % lastAngle = 0;
if(isempty(props) == 0) qR = props.BoundingBox(1) + props.BoundingBox(3)/2 < props.Centroid(1); end % Using these values, a vertical line returns an angle of 180, while a
% horizontal line returns an angle of 270.
if( qR == 1) theta = 270-props.Orientation; %%(was 270)
elseif (qR == 0) theta = 90-props.Orientation; %%(was 90)
% else
% theta = lastAngle;
endtheta
I get a value of 90.0188.
Other stills taken at different angles return a very similar value, or a value very close to 270.
What is going wrong here?
Edit: Thanks to Walter. In fact, I realised that around the same time that you posted. However, now I'm analysing 20 frames at once and I'd really like when the line is in the vertical position to be zero: Anything to the left would then be negative, anything to the right would be positive.
I've been trying various methods of achieving this, none of which are working.
Any ideas?
Best Answer