JOIV : Int. Inform. Visualization, 9. - March 2025 699-707 INTERNATIONAL JOURNAL ON INFORMATICS VISUALIZATION INTERNATIONAL JOURNAL ON INFORMATICS VISUALIZATION journal homepage : w. org/index. php/joiv Bike Fitting System Based on Digital Image Processing on Road Bike Tigor Hamonangan Nasution a,*. Andreas Sitohang a. Seniman b. Soeharwinto a Department of Electrical Engineering. Universitas Sumatera Utara. Medan. Indonesia Department of Technology Information. Universitas Sumatera Utara. Medan. Indonesia Corresponding author: *tigor. nasution@usu. AbstractAiThis research aims to develop a bike fitting system based on digital image processing for road bikes. The method used in this study involves using the OpenCV and MediaPipe libraries in the Python programming language to detect the rider's body pose from a video stream captured using a webcam. The body pose data is then used to calculate important angles such as elbow, hip, knee, and ankle range related to the correct riding position for road bikes. In this research, a comparison is made between the body angles obtained and the angle range considered ideal for bike fitting on road bikes. If the body angles fall within the desired range, the system will label it as "FitAy. if the body angles are outside the selected range, the system will label it as "Not Fit. " The results of this study indicate that the bike fitting system based on digital image processing using a webcam can provide helpful visual feedback in improving the rider's body position for road bikes. By observing the body angles produced and seeing the "Fit" or "Not Fit" label, cyclists can adjust their position to match the ideal position in bike fitting. The system test results show a low error rate, with elbow angle having an average error of 0. 81%, hip angle of 1. 37%, knee angle of 0. 83%, and ankle range of 1. Thus, this research contributes significantly to supporting cyclists in achieving a position appropriate to their inseam height. KeywordsAiBike. bike fitting. MediaPipe. OpenCV. road bike. Manuscript received 8 Jun. revised 29 Aug. accepted 6 Mar. Date of publication 31 Mar. International Journal on Informatics Visualization is licensed under a Creative Commons Attribution-Share Alike 4. 0 International License. INTRODUCTION Bicycles are a means of transportation that is widely used throughout the world. Besides being used for sports activities, bicycles are also an environmentally friendly transportation alternative and can help reduce traffic jams in big cities . , . , . They are increasing public interest in cycling as a recreation and a routine activity to maintain body health. However, many still make mistakes in determining the correct position when cycling. This can result in discomfort when cycling and even injury to the body . , . , . The basic principle of balancing a bike fitting from a side perspective is determining the engine room's height and the cockpit's position so that the rider's tilt is optimal . If this is wrong, the racer will lean too far forward or back, as seen in Fig. The body position appropriate for the bike fitting based on the average measurements and range of the bike fitting can be seen in Fig. One solution to overcome this problem is to use a bike fitting system, which can help choose the right bicycle size. The bike fit process adjusts the bicycle to the user's body to determine whether the body and bicycle position suit the user so that the user gets a comfortable position when cycling. Fig. 1 Comparison of Body Positions in Bike Fitting Fig. 2 Body position according to bike fitting model, and the mp_drawing component, which is used to draw pose landmarks. However, the bike fitting system requires special equipment and is relatively expensive . In previous research, an appropriate bike system was also carried out using digital image processing. However, in this research, the bike-proper system still uses unique cameras and sensors in the digital image processing of the bike-appropriate system . In this research, a bike fitting system is developed to make it more accessible and affordable by utilizing digital image processing. Using a webcam, this system took an image of the user on a road bike and then analyzed the image to measure the angle of several parameters in body position on the bicycle being used. The results of this system are expected to help users increase comfort and effectiveness when cycling. A bike fitting system using digital image processing is a technology that can help improve efficiency and accuracy in the bike fit process. Hopefully, this research can contribute to developing digital image processing technology that can be applied in various fields and facilitate using bicycles as a more environmentally friendly and healthy transportation alternative. System Design The stages in designing a bike fitting system based on digital image processing on road bikes are divided into several The system design begins with taking a video stream, which could later be processed on a computer with the help of several libraries, such as open CV and media pipe. These libraries were used to obtain angle values for several parts of the bicycle user, which follow predetermined measurement Before designing a bike fitting system based on digital image processing on road bikes, several Python libraries are needed to make it easier for researchers to call functions that support this image processing. The libraries needed are: OpenCV (Open Source Computer Vision Librar. is a popular image and video processing library . , . , . In a bike fitting system based on digital image processing on road bikes. OpenCV is used to read and display video frames, change image color schemes, write text on images, save images, and draw landmark poses using functions such as cvtColor, imwrite, putText, imshow, and others. MediaPipe is a media processing library developed by Google. , . , . MediaPipe provides tools and models for object detection and tracking in imagery and In a bike fitting system based on digital image processing on road bikes. MediaPipe detects human poses in images using the mp pose component, which provides a pose estimation model, and the mp_drawing component, which is used to draw pose landmarks. Math is a standard Python library for mathematical operations. , . In a bike fitting system based on digital image processing on road bikes, math is used to perform mathematical operations, such as calculating arctans and converting angles from radians to degrees. NumPy is a popular library for numerical computing in Python. , . In a bike fitting system based on digital image processing on road bikes. NumPy performs mathematical operations on arrays, such as calculating angles and applying an average filter to angle data. II. MATERIAL AND METHODS System Overview This research generally requires a computer to run the bike fitting system using digital image processing. In this research, the system uses the Python 3. 3 programming language using the OpenCV library in the video image processing OpenCV has been widely used in research related to Computer Vision in recent years . , . , . The system block diagram can be seen in Fig. Fig. 3 System Block Diagram In designing a bike fitting system using image processing on a road bike, several things need to be prepared, such as a webcam which is tasked with taking a video stream of the bicycle user when using the road bike, which the bicycle could later use a trainer to facilitate the data testing process. OpenCV as the library used to help, a webcam can be connected to a laptop and take a video stream and Mediapipe is tasked with detecting poses for bicycle users and assisting in measuring angles for bicycle users. Several libraries were used in system design, namely Open CV OpenCV (Open Source Computer Vision Librar. , a popular library for image and video processing . , . , . In a bike fitting system based on digital image processing on road bikes. OpenCV is used to read and display video frames, change image color schemes, write text on images, save images, and draw landmark poses using functions such as cvtColor, imwrite, putText, imshow, and others. MediaPipe is a media processing library developed by Google . , . , . MediaPipe provides tools and models for object detection and tracking in imagery and video. In a bike fitting system based on digital image processing on road bikes. MediaPipe is used to detect human poses in images using the mp_pose component, which provides a pose estimation . Video Stream Capture: Video stream capture uses a camera connected to the IP Webcam system. Video capture is carried out by recording video of the cyclist while he is in a relevant position for angle The program code snippet in Fig. 4 shows the use of OpenCV to set the video source as an external webcam with index 1. In the first line, use the cv2. VideoCapture() function to create a stamp object that could be used to access the video source. In this case, an argument of 1 is passed to this function, indicating that it wants to use an external camera with index 1. cap = cv2. VideoCapture. Fig. 4 Program code snippet for the use of OpenCV . Changing Image Format to RGB: Next, the image taken with the webcam could be converted to RGB using the OpenCV library. Fig. 5 shows a snippet of program code in Python that uses the OpenCV . library to change the image color format. # Setup instance mediapipe mp_pose = mp. mp_drawing = mp. drawing_utils # Recolor image to RGB image = cv2. cvtColor. rame, cv2. COLOR_BGR2RGB) writeable = False Fig. 7 Program Code snippet for Pose Detection Using MediaPipe The mp_pose object is an instance of the mp. class is used to detect human poses in videos or images. These objects provide a method for recognizing and tracking landmarks or essential points on the human body, such as hands, feet, elbows, etc. The mp_drawing object is an instance of the mp. drawing_utils class that provides utilities for drawing landmarks and lines associated with human This object can easily remove and connect landmarks to form a detected human pose. By setting up this MediaPipe instance, you can use the functions and utilities provided by MediaPipe to see, track, and draw human poses on your video or image stream. Fig. 5 Program Code Snippets for Converting Images to RGB In the first line, the image whose color format you want to change is stored in the frame variable. Then, the second line explains the process of changing the image color format from BGR (Blue-Green-Re. to RGB (Red-Green-Blu. The BGR color format is the default color format used by OpenCV, while the RGB color format is more commonly used in image processing and visual displays. In this example, the cvtColor() function converts color format with the parameter cv2. COLOR_BGR2RGB indicates the conversion BGR RGB. Flags. Writeable=False is used to change the writeable status of the image variable to non-writable. This optimizes memory usage because the image variable could not change during subsequent processing. The system can efficiently manage the image variable's memory by changing the writeable state to False. Thus, the program above wholly changes the image color format from BGR to RGB using OpenCV so that the image can be processed and displayed in the appropriate color format. Landmark Extraction: At this stage, landmark extraction is performed to identify relevant body points for measuring angles in the bike fitting In this study, the points identified included the elbows, hips, knees, and ankles. The program code snippet in Fig. 8 is used to access and obtain pose landmark coordinates from pose detection results using the MediaPipe library. Each pose landmark is an essential point on the human body detected in an image or video. Pose Detection Using MediaPipe: Fig. 6 shows the landmarks on the media pipe, which in this study used several landmark points in detecting and measuring body angles for bicycle users. This research used several libraries, namely Math, a standard Python library for mathematical operations. In a bike fitting system based on digital image processing on road bikes, math is used to perform mathematical operations, such as calculating arctan and converting angles from radians to degrees. NumPy is a popular library for Python numerical computing. In a bike fitting system based on digital image processing on road bikes. NumPy performs mathematical operations on arrays, such as calculating angles and applying an average filter to angle data. , . #Getcoordinates right_hip=. p_pose. PoseLandmark. RIGHT_HIP. x,landmarks. p_pose. PoseLandmark. RIGHT_HIP. right_elbow=. p_pose. PoseLandmark. RIGHT_ELB OW. x,landmarks. p_pose. PoseLandmark. RIGHT_ELBO right_knee=. p_pose. PoseLandmark. RIGHT_KNEE x,landmarks. p_pose. PoseLandmark. RIGHT_KNEE. right_ankle=. p_pose. PoseLandmark. RIGHT_ANK LE. x,landmarks. p_pose. PoseLandmark. RIGHT_ANKL right_shoulder=. p_pose. PoseLandmark. RIGHT_ SHOULDER. x,landmarks. p_pose. PoseLandmark. RIGH T_SHOULDER. right_wrist=. p_pose. PoseLandmark. RIGHT_WRI ST. x,landmarks. p_pose. PoseLandmark. RIGHT_WRIS right_foot_index=. p_pose. PoseLandmark. RIGH T_FOOT_INDEX. x,landmarks. p_pose. PoseLandmark. RIGHT_FOOT_INDEX. right_heel=. p_pose. PoseLandmark. RIGHT_HEEL x,landmarks. p_pose. PoseLandmark. RIGHT_HEEL. Fig. 8 Program Code snippet for Landmark Extraction Fig. 6 Landmarks in MediaPipe Pose In this example, take several vital landmarks related to body position when cycling, such as the right hip (RIGHT_HIP), right elbow (RIGHT_ELBOW), right knee (RIGHT_KNEE), right ankle (RIGHT_ANKLE), and right toe (RIGHT_FOOT_INDEX). By accessing each landmark's x and y coordinates, we can further analyze the body positions and angles required for the bike fitting system. For example, by measuring the angles between the hip, elbow, and knee points, we can evaluate the suitability of the body position At this stage, pose detection was performed on the cyclist who is being recorded using a webcam connected to a computer, as shown in the program code snippet in Fig. Fig. 7 shows the process of setting up or initializing an instance of the MediaPipe library. First, import the MediaPipe library using the import mediapipe as mp command. Then, use the mp_pose and mp_drawing objects to access the functions and utilities provided by the MediaPipe library. The apply_average_filter function is used to apply an average filter to the obtained angle data. This average filter aims to smooth out gradual changes in angle values and reduce noise that may be present in the data. This function accepts three arguments: data, which is the angle value to be prev_data, which is the previous angle value before the filter is applied. and filter_factor, which is the filter factor. In the process of using the average filter, the angle value to be filtered . is multiplied by filter_factor, while the previous angle value . rev_dat. is multiplied by . - filter_facto. Then, the two multiplication results are combined to produce the filtered angle value . iltered_dat. Using this average filter, changes in angular values could occur slowly and in a controlled manner, resulting in smoother and more stable angular movements. This is useful in reducing fluctuations in angle values that may occur due to noise or insignificant Thus, we can get more accurate and consistent information from the filtered angle data. with the bicycle. These landmark coordinates help obtain relevant data to determine whether the cyclist is in the correct position or needs adjustments. Thus, using the code above provides the ability to access and utilize landmark pose data in implementing a bike fitting system based on digital image . Angle Measurement: Once the body points are identified, the angles between the relevant points are measured. The angles between elbows, hips, knees, ankles, and toes are calculated using the calculate_angle function defined in the program code. This angle measurement provides information about the cyclist's The program code snippet in Fig. 9 implements the calculate_angle function, which calculates the angle between three points based on each point's x and y coordinates. This function utilizes the NumPy and math libraries to perform mathematical operations. First, point a point b, and suggest c coordinates are converted into a NumPy array to facilitate Then, the angle is calculated using the math. function to calculate the arctan from the difference in y and x coordinates between points c and b, minus the arctan from the difference in y and x coordinates between points a and b. Next, the angle in radians is converted to an angle in degrees by multiplying by the constant 180. 0/np. This is done because of the math. atan2 function produces angles in Fig. 9 Function to calculate the angle between three points . Labeling Angle Measurement Results: Based on the angle range the bike fitting expert determines, a label "Fit" or "Not Fit" is given for each angle measurement. In the program code snippet in Fig. 11, there is a function called get_fit_label, which is used to provide a label "Fit" or "Not Fit" based on the given angle value. This function uses four parameters, namely elbow_angle, hip_angle, knee_angle, and ankle_range, which are angles that have been calculated previously. In this function, several conditions must be met for someone to be categorized as "Fit. " If the hip_angle angle value is in the range between 60 to 110 degrees, elbow_angle is in the range between 150 to 160 degrees, knee_angle is in the range between 65 to 145 degrees, and ankle_range is in the range between 115 to 180 degrees, then the label given is "Fit. " However, if one or more of the four angle values does not meet the specified conditions, the label is "Not Fit. " The get_fit_label function shows whether someone is considered "Fit" or "Not Fit" based on the measured angle value. A check is carried out using the if condition to ensure the resulting angle is 0-180 degrees. If the angle is more than 180 degrees, it is corrected by subtracting it from 360 degrees. Finally, the calculated angle is returned as the function's With the calculate_angle function, we can calculate the angle between three points, which can later be used to analyze posture and body position in the bike fitting system. def get_fit_label. lbow_angle, hip_angle, knee_angle, ankling_rang. if 60 <= hip_angle <= 110 and 150 <= elbow_angle <= 160 and 65 <= knee_angle <= 145 and 115 <= ankling_range <= 180: return "Fit" return "Not Fit" def calculate_angle. , b, . a = np. b = np. c = np. radians = math. -b. , c. -b. ) math. -b. , a. -b. ) angle = np. adians*180. 0/np. if angle > 180. angle = 360 - angle . Average Filter: An average filter is applied to the measured angle data to produce more stable angle data. This average filter uses an adjustable filter_factor to regulate how previous angle data affects the measured results. This program code snippet can be seen in Fig. Fig. 11 Function to label " Fit" or "Not Fit" . Displaying Frame Image with Angle and Labeling Information: Frame images that have passed the image processing stage could display the results of angle measurements and labeling. Fig. 12 shows the bike fitting system using digital image processing on a road bike. It was designed using Python programming language and the OpenCV and MediaPipe libraries to detect human body pose in an image or video stream and display angle information on the image. In the initial part of the program, several conditions are checked to determine whether the angles at the elbows, hips, knees, and ankles are within the desired range. If the angles are within the selected range, the text containing the angle values will be def apply_average_filter. ata, prev_data, filter_facto. filtered_data = . ata * filter_facto. rev_data * . - filter_facto. ) return filtered_data Fig. 10 Function to apply an average filter to corner data i. RESULTS AND DISCUSSION Otherwise, the text will be displayed in red. Overall, this system detects the pose of the human body, calculates the angles at the elbows, hips, knees, and ankles, and displays this angle information on the image, as well as visualization of body pose landmarks. This system helps monitor human body In this research, a bike fitting system based on digital image processing on a road bike was tested. Later, data will be tested from road bike cyclists who will take angle measurements using digital image processing that has been designed. results of the angle measurements will later be adjusted to the measurement reference from literacy. After measuring the angle and the results are not close to the measurement reference, the bicycle will be adjusted to obtain test results that match the measurement reference so that the bicycle user can get an efficient and comfortable position when using the road bike. Preparatory Phase The following things must be prepared before image processing on the bike fitting system. Prepare the testing requirements for the road bike, webcam, laptop, trainer, goniometer, and laptop. Setting the position of the webcam camera on a road Adjusting the position of road bike users to make it easier to capture video streams. Running Programs The first thing that needs to be prepared is a road bike installed with a trainer and webcam for recording video streams and a laptop for image processing. Then, set the webcam position with the road bike. The following is a measurement reference for a bike fitting system using digital image processing on a road bike. The bike fitting system uses digital image processing to measure the angles of several body points. The measurement results could be adjusted to the angle measurement reference to get the results 'Fit' or 'Not Fit. ' Several points on the body are used as measurement references, namely as follows. Elbow Angle has an angle range of 150 to 160 degrees. Hip Angle (Hip Angl. has an angle range of 60 to 110 Knee Angle (Elbow Angl. has an angle range of 65 to 145 degrees. Ankling Range has an angle range of 115 to 180 degrees. Fig. 12 View of the Bike Fitting System Using Digital Image Processing . Take and Save Images: At this stage, the image is processed, and angle measurements and labeling are obtained, taken, and saved in a computer/laptop file. A snippet of program code is shown in Fig. mp_drawing. draw_landmarks. mage,results. pose_landmar ks,mp_pose. POSE_CONNECTIONS,mp_drawing. DrawingSpec. ,117,. , thickness=2, circle_radius=. ,mp_drawing. DrawingSpec. ,6 6,. , thickness=2, circle_radius=. ) imshow('Mediapipe Feed', imag. # Add logic to take an image when the 's' key is key = cv2. waitKey. if key == ord('s'): save_image. if key == ord('q'): destroyAllWindows() Fig. 13 Program Code Snippet "Take and Save Image" Fig. 13 is the final part of the Python code, which uses the OpenCV and MediaPipe libraries to detect human body pose in a video stream. In this section, the program adds logic to take a picture when the 's' key is pressed. The code waitKey. waits for a keyboard key to be pressed for one millisecond and returns a value representing the key packed. If the 's' key is pressed . epresented by ord('s')), then the program will call the save_image() function to save the currently displayed image. Next, the program checks whether the 'q' key is pressed. If the 'q' button is pressed . epresented by ord('q')), then the program will exit the main loop and proceed to the following line of code. Once the loop is complete, the program will free the video stream resources using cap. release() and close all windows opened by OpenCV using cv2. destroyAllWindows(). Overall, the program provides additional functionality for the user, namely the ability to capture images from the video stream when the 's' key is pressed and the ability to stop the program by pressing the 'q' key. Data Testing Results Using Image Processing Data testing using image processing on the bike fitting system uses a laptop and several other supporting tools such as a webcam, trainer, and road bike. The display of data testing using image processing can be seen in Fig. Fig. 14 Data Testing Using Image Processing TABLE II DATA USING MANUAL MEASUREMENTS Data Testing Results with Manual Measurements Data testing using manual measurements on the bike fitting system uses a measuring instrument to measure angles, namely a goniometer. A goniometer measured angles on body parts according to the measurement reference. The data testing using manual measurements can be seen in Fig. Data Data Before Fit They are testing data on the bike fitting system based on image processing on road bikes when the bike condition is not yet fit, whereas road bikes have the following frame sizes. Vertical Tube: 46 cm Horizontal Tube: 50 cm Saddle height: 72 cm Power length: 12. 5 cm Handlebar: 40 cm At this stage, data was collected on image processing of the road bike fitting system. The data test results can be seen in Table 1. In Table 1, the data testing results using image processing were obtained by testing ten times, and the test results were labeled AuNot Fit,Ay which provides information on whether the bicycle frame used is unsuitable for bicycle users. Hence, it is necessary to change the size of the bicycle frame. Testing DATA USING IMAGE PROCESSING Hip Angle Knee Angle Ankling Range Knee Angle Ankling Range Labeling Not Fit Not Fit Not Fit Not Fit Not Fit Not Fit Not Fit Not Fit Not Fit Not Fit TABLE i DATA USING IMAGE PROCESSING TABLE I Data Hip Angle Data After Fit Data collection for the bike fitting system is based on image processing on the road bike when it is in a fit condition. The saddle height of the road bike will be changed to 68. 874 cm, which is obtained by multiplying the cyclist's inseam height, namely 78 cm and 0. 883, so that the bike has the following frame size. Vertical Tube: 46 cm Horizontal Tube: 50 cm Saddle height: 68. 874 cm Power length: 12. 5 cm Handlebar: 40 cm At this stage, data was tested on image processing of the road bike fitting system. The data testing results using image processing can be seen in Table 3. In Table 3, the data testing results using image processing were obtained by carrying out the test 10 times. the test results included some data labeled AuFit,Ay which provides information about whether the bicycle frame is suitable for the bicycle user. In the next stage, data testing was carried out using manual road bike fitting system measurements. The data test results are shown in Table 4. Fig. 15 Testing Data Using Manual Measurements Elbow Angle Elbow Angle Labeling Not Fit Not Fit Not Fit Not Fit Not Fit Not Fit Not Fit Not Fit Not Fit Not Fit Elbow Angle Hip Angle Knee Angle Ankling Range Labeling Fit Fit Fit Fit Fit Fit Fit Fit Fit Fit TABLE IV DATA USING MANUAL MEASUREMENTS Testing In the next stage, data was collected using measurements of the manual road bike fitting system. The test results are in Table 2. In Table 2 above, the results of data testing using image processing were obtained by testing ten times, and where the test results showed that some data was labeled AuNot FitAy. The test results were marked AuNot FitAy, which provides information if the bicycle frame used is unsuitable for the bicycle user, so it is necessary to change the size of the bicycle Elbow Angle Hip Angle Knee Angle Ankling Range Labeling Fit Fit Fit Fit Fit Fit Fit Fit Fit Fit In Table 4, the results of data testing using image processing were obtained by testing ten times, and where the test results obtained some data labeled AuFitAy. processing on the road bike fitting system by comparing the results of the hip angle of bicycle users. TABLE VI COMPARATIVE RESULTS OF MANUAL MEASUREMENTS WITH IMAGE Discussion In data analysis, a comparison was made between measurements using image processing and manual The following are the things that need to be analyzed to measure accuracy between measurements using image processing and manual measurements. After taking data on the road bike fitting system, at this stage, the absolute difference between the manual measurement results and the image processing results for each sample was measured. After calculating the fundamental difference, the percentage error was measured by calculating the percentage error between the manual measurement results and the image processing results for each sample. Next, a comparison was made between manual measurements and image processing on the bike fitting road bike system by comparing the angle results at the elbow angle of bicycle users, which can be seen in Table 5. PROCESSING RESULTS AT HIP ANGLE Testing TABLE V COMPARISON RESULTS OF MANUAL MEASUREMENTS WITH IMAGE PROCESSING RESULTS AT ELBOW ANGLE Testing Elbow Angle Image Absolute Manual Difference Mean Percentage Error (MPE) Error Percentage Hip Angle Image Absolute Manual Difference Mean Percentage Error (MPE) Error Percentage TABLE VII COMPARISON RESULTS OF MANUAL MEASUREMENTS WITH IMAGE PROCESSING RESULTS AT KNEE ANGLE Testing Comparing manual measurements with image processing results at right angles obtained an average error percentage of The most considerable absolute difference occurred in test 5 with a difference of 3. 5, and the most minor fundamental difference appeared in test 20 with a difference The following are the results of a comparison between manual measurements and image processing on the bike fitting road bike system by comparing the results of the hip angle of bicycle users, which can be seen in Table 6. Comparing manual measurements with image processing results on hip angles obtained an average error percentage of The most considerable absolute difference occurred in test 16, with a difference of 4. 07, and the smallest one in test 3, with a fundamental difference of 0. Table 7 shows the comparison results between manual measurements and image Knee Angle Image Absolute Manual Difference Mean Percentage Error (MPE) Error Percentage Comparing manual measurements with image processing results on knee angles obtained an average error percentage The most considerable absolute difference occurred in test 1 with a difference of 3. 17, and the most minor fundamental difference appeared in test 2 with a difference of Table 8 compares manual measurements and image processing on the road bike fitting system by comparing the angle results on the ankle range of bicycle users. TABLE Vi COMPARISON RESULTS OF MANUAL MEASUREMENTS WITH IMAGE PROCESSING RESULTS AT THE ANKLING RANGE Testing Ankling Range Image Absolute Manual Difference Mean Percentage Error (MPE) Error Percentage . Comparing manual measurements with image processing results at the ankle angle obtained an average error percentage The most considerable absolute difference occurred in test 13, with a difference of 5. 31, and the minor fundamental difference appeared in test 7, with a difference . IV. CONCLUSION From the results of testing and analysis in this research, it can be concluded that the bike fitting system that uses image processing has succeeded in providing objective information regarding angle measurements at elbow angle, hip angle, knee angle, and ankle range for cyclists. Image processing and pose analysis methods have helped determine whether the rider has achieved the ideal position for comfort and efficiency. The system test results show a low error rate, with elbow angle having an average error of 0. 81%, hip angle of 1. 37%, knee angle of 0. 83%, and ankle range of 1. Thus, this research contributes significantly to supporting cyclists in achieving a position appropriate to their inseam height, as illustrated by the example of a cyclist with an inseam height of 78 cm and a suitable bicycle specification. In conclusion, this image processing-based bike fitting system has great potential to improve the comfort and efficiency of bicycle riding. ACKNOWLEDGMENT This research was supported by the Universitas Sumatera Utara through the 2024 TALENTA Research Grant Applied Research scheme. Contract Number 143/UN5. 1/PPM/KPTALENTA/R/2023. REFERENCES