|
Algorithm: Shadow Classification for Vehicle |
|
Input: |
|
|
|
A mask image of the vehicle (binary values of 0 and 255). |
|
Four keypoints corresponding to the bottom-most points of the vehicle's tires: front-left, front-right, rear-left, rear-right. These are crucial for shadow generation. |
|
Steps: |
|
Step 1: Input and Preprocessing |
|
Take the vehicle mask (M) as input, which is a binary matrix where each pixel has a value of 0 (background) or 255 (vehicle). |
|
The four keypoints (K_fl, K_fr, K_rl, K_rr) are provided as pixel coordinates: |
|
πΎ |
|
π |
|
π |
|
= |
|
( |
|
π₯ |
|
π |
|
π |
|
, |
|
π¦ |
|
π |
|
π |
|
) |
|
K |
|
fl |
|
β |
|
=(x |
|
fl |
|
β |
|
,y |
|
fl |
|
β |
|
) |
|
πΎ |
|
π |
|
π |
|
= |
|
( |
|
π₯ |
|
π |
|
π |
|
, |
|
π¦ |
|
π |
|
π |
|
) |
|
K |
|
rl |
|
β |
|
=(x |
|
rl |
|
β |
|
,y |
|
rl |
|
β |
|
) |
|
Step 2: Calculate the Angle Between Keypoints |
|
Use the front-left and rear-left keypoints to calculate the angle the vehicle makes with the x-axis: |
|
|
|
π |
|
= |
|
tan |
|
β‘ |
|
β |
|
1 |
|
( |
|
π¦ |
|
π |
|
π |
|
β |
|
π¦ |
|
π |
|
π |
|
π₯ |
|
π |
|
π |
|
β |
|
π₯ |
|
π |
|
π |
|
) |
|
ΞΈ=tan |
|
β1 |
|
( |
|
x |
|
fl |
|
β |
|
βx |
|
rl |
|
β |
|
|
|
y |
|
fl |
|
β |
|
βy |
|
rl |
|
β |
|
|
|
β |
|
) |
|
This gives the angle |
|
π |
|
ΞΈ in radians, which indicates how much the vehicle is inclined relative to the x-axis. |
|
Step 3: Rotate the Mask |
|
Rotate the mask M clockwise by angle |
|
π |
|
ΞΈ to align the vehicle along the x-axis. The rotation can be done using a rotation matrix or a simple image rotation function (e.g., using OpenCV's warpAffine). |
|
|
|
Mathematically, each pixel's new coordinates after rotation: |
|
|
|
( |
|
π₯ |
|
β² |
|
π¦ |
|
β² |
|
) |
|
= |
|
( |
|
cos |
|
β‘ |
|
( |
|
π |
|
) |
|
sin |
|
β‘ |
|
( |
|
π |
|
) |
|
β |
|
sin |
|
β‘ |
|
( |
|
π |
|
) |
|
cos |
|
β‘ |
|
( |
|
π |
|
) |
|
) |
|
( |
|
π₯ |
|
π¦ |
|
) |
|
( |
|
x |
|
β² |
|
|
|
y |
|
β² |
|
|
|
β |
|
)=( |
|
cos(ΞΈ) |
|
βsin(ΞΈ) |
|
β |
|
|
|
sin(ΞΈ) |
|
cos(ΞΈ) |
|
β |
|
)( |
|
x |
|
y |
|
β |
|
) |
|
Step 4: Recalculate Rear-left Keypoint |
|
After the mask rotation, recalculate the new position of the rear-left keypoint. Apply the same rotation transformation to get the new coordinates: |
|
|
|
πΎ |
|
π |
|
π |
|
β² |
|
= |
|
( |
|
π₯ |
|
π |
|
π |
|
β² |
|
, |
|
π¦ |
|
π |
|
π |
|
β² |
|
) |
|
K |
|
rl |
|
β² |
|
β |
|
=(x |
|
rl |
|
β² |
|
β |
|
,y |
|
rl |
|
β² |
|
β |
|
) |
|
Where: |
|
|
|
π₯ |
|
π |
|
π |
|
β² |
|
= |
|
π₯ |
|
π |
|
π |
|
cos |
|
β‘ |
|
( |
|
π |
|
) |
|
β |
|
π¦ |
|
π |
|
π |
|
sin |
|
β‘ |
|
( |
|
π |
|
) |
|
x |
|
rl |
|
β² |
|
β |
|
=x |
|
rl |
|
β |
|
cos(ΞΈ)βy |
|
rl |
|
β |
|
sin(ΞΈ) |
|
π¦ |
|
π |
|
π |
|
β² |
|
= |
|
π₯ |
|
π |
|
π |
|
sin |
|
β‘ |
|
( |
|
π |
|
) |
|
+ |
|
π¦ |
|
π |
|
π |
|
cos |
|
β‘ |
|
( |
|
π |
|
) |
|
y |
|
rl |
|
β² |
|
β |
|
=x |
|
rl |
|
β |
|
sin(ΞΈ)+y |
|
rl |
|
β |
|
cos(ΞΈ) |
|
Step 5: Crop the Mask |
|
Center the cropped region around the new rear-left keypoint |
|
πΎ |
|
π |
|
π |
|
β² |
|
K |
|
rl |
|
β² |
|
β |
|
and crop a square of size |
|
( |
|
π€ |
|
π |
|
π |
|
π‘ |
|
β |
|
= |
|
β |
|
π |
|
π |
|
π |
|
β |
|
π‘ |
|
= |
|
100 |
|
Β pixels |
|
) |
|
(width=height=100Β pixels). |
|
|
|
Crop dimensions: |
|
|
|
π₯ |
|
π |
|
π |
|
π |
|
= |
|
π₯ |
|
π |
|
π |
|
β² |
|
β |
|
50 |
|
, |
|
π₯ |
|
π |
|
π |
|
π₯ |
|
= |
|
π₯ |
|
π |
|
π |
|
β² |
|
+ |
|
50 |
|
x |
|
min |
|
β |
|
=x |
|
rl |
|
β² |
|
β |
|
β50,x |
|
max |
|
β |
|
=x |
|
rl |
|
β² |
|
β |
|
+50 |
|
π¦ |
|
π |
|
π |
|
π |
|
= |
|
π¦ |
|
π |
|
π |
|
β² |
|
β |
|
50 |
|
, |
|
π¦ |
|
π |
|
π |
|
π₯ |
|
= |
|
π¦ |
|
π |
|
π |
|
β² |
|
+ |
|
50 |
|
y |
|
min |
|
β |
|
=y |
|
rl |
|
β² |
|
β |
|
β50,y |
|
max |
|
β |
|
=y |
|
rl |
|
β² |
|
β |
|
+50 |
|
Step 6: Find Bottom-most Point |
|
In the cropped mask, identify the bottom-most point |
|
π΅ |
|
= |
|
( |
|
π₯ |
|
π |
|
, |
|
π¦ |
|
π |
|
) |
|
B=(x |
|
b |
|
β |
|
,y |
|
b |
|
β |
|
), where the pixel value is 255. |
|
|
|
π¦ |
|
π |
|
= |
|
max |
|
β‘ |
|
{ |
|
π¦ |
|
β£ |
|
π |
|
( |
|
π₯ |
|
, |
|
π¦ |
|
) |
|
= |
|
255 |
|
} |
|
y |
|
b |
|
β |
|
=max{yβ£M(x,y)=255} |
|
Step 7: Calculate Distance |
|
Compute the Euclidean distance |
|
π· |
|
D between the new rear-left keypoint |
|
πΎ |
|
π |
|
π |
|
β² |
|
K |
|
rl |
|
β² |
|
β |
|
and the bottom-most point |
|
π΅ |
|
B: |
|
|
|
π· |
|
= |
|
( |
|
π₯ |
|
π |
|
π |
|
β² |
|
β |
|
π₯ |
|
π |
|
) |
|
2 |
|
+ |
|
( |
|
π¦ |
|
π |
|
π |
|
β² |
|
β |
|
π¦ |
|
π |
|
) |
|
2 |
|
D= |
|
(x |
|
rl |
|
β² |
|
β |
|
βx |
|
b |
|
β |
|
) |
|
2 |
|
+(y |
|
rl |
|
β² |
|
β |
|
βy |
|
b |
|
β |
|
) |
|
2 |
|
|
|
β |
|
|
|
Step 8: Shadow Classification |
|
If |
|
π· |
|
> |
|
50 |
|
D>50 pixels, classify the shadow as bad (unrealistic or incorrect). Otherwise, classify the shadow as good. |
|
Mathematical Justification: |
|
Rotation is used to align the vehicle to the x-axis, ensuring that the keypoints are more easily analyzed. |
|
The distance threshold of 50 pixels helps determine if the shadow is too far from the vehicleβs edge (indicating that it might be unrealistic). |
|
This refined version adds mathematical clarity to each step and ensures the algorithm is robust in detecting unrealistic shadows. |