Measuring Retroreflectivity for Traffic Signs
Retroreflectivity is an optical phenomena where a surface returns directed light back at its source. Without retroreflectivity, traffic signs would not be visible at night when headlights hit the sign’s surface. The MUTCD outlines that the retroreflectivity of signs shall be replaced if it fails retroreflectivity tests.
To record the retroreflectivity of traffic signs, a device called a retroreflectometer was used. It is a device that measures the light reflecting properties of signs accurately and reliably.
The purpose of the retroreflectivity Project status is to assess the retroreflectivity of traffic signs to determine whether these sample traffic signs should be replaced. Furthermore, this will also serve as a benchmark for determining sign condition as well.
Standard
“Public agencies or officials having jurisdiction shall use an assessment or management method that is designed to maintain sign retroreflectivity at or above the minimum levels in Table2A-3.”
import pandas as pd
import matplotlib
file_path = "Files/Sign_Reflectivity_Sample_FY19.xlsx"
df = pd.read_excel(file_path,index_col="Sign ID")
df['Sign Colors'] = df['Legend Color'] + ' on ' + df['Background Color']
df = df.set_index('Sign Colors')
mutcd = pd.read_excel(file_path,sheet_name='MUTCD',index_col='Sign')
display(mutcd)
Background Color | Legend Color | Background Standard | Legend Standard | Standards | Additional Criteria | |
---|---|---|---|---|---|---|
Sign | ||||||
White on Green | Green | White | 15 | 120 | W ≥ 120; G ≥ 15 | Post-mounted |
Black on Yellow | Yellow | Black | 50 | 0 | Y ≥ 50; O ≥ 50 | Signs measuring at least 48 inches |
Black on Orange | Orange | Black | 75 | 0 | Y ≥ 75; O ≥ 75 | Signs measuring less than 48 inches |
White on Red | Red | White | 7 | 35 | W ≥ 35; R ≥ 7 | Sign standard ratio ≥ 3:1 (W/R) |
Black on White | White | Black | 50 | 0 | W ≥ 50 | NaN |
Table 2A-3.
# go thrrough every row in the table
for index,row in df.iterrows():
legend = int(row['Legend Ra 0.2'])
bg = int(row['Background Ra 0.2'])
# No retroreflective standard on No truck or Stop Ahead legend
if index == 'Red on White' or index == 'Red on Yellow':
df.loc[index,'Condition'] = 'Pass'
else:
# Set the standards base on legend color
# and background color according to MUTCD
bg_standard = mutcd.at[index,'Background Standard']
legend_standard = mutcd.at[index,'Legend Standard']
# Check if passes standards
if legend >= legend_standard and bg >= bg_standard:
if index == 'White on Red' and (legend_standard/bg_standard) < 3:
df.loc[index,'Condition'] = 'Fail'
else:
pass
df.loc[index,'Condition'] = 'Pass'
else:
df.loc[index,'Condition'] = 'Fail'
Report
Here is the number of signs measured for reflectivity:
signs = df.groupby('MUTCD').count()[['User']].rename(
columns={'User':'Sign Totals'}).sort_values(
by=['Sign Totals'],ascending=False)
display(signs)
signs.to_csv('Files/sign_total.csv')
Sign Totals | |
---|---|
MUTCD | |
Stop Sign | 13 |
No Truck | 4 |
School Pedestrian Crossing | 3 |
Speed Limit | 2 |
End School Zone | 1 |
Handicap Sign | 1 |
No Outlet | 1 |
Stop Ahead | 1 |
Street Name Sign | 1 |
W1-3 | 1 |
Yield | 1 |
Below is the data collected from the field using the retroreflectometer from May and September. Two retroreflectometers’s were used for collection. 29 sign samples were collected total, and 71 sign samples will be collected this week.
cols = ['MUTCD','Road','User','Legend Color','Legend Ra 0.2',
'Background Color','Background Ra 0.2',
'Direction', 'Sheeting Legend','Condition']
display(df.filter(cols).reset_index())
Sign Colors | MUTCD | Road | User | Legend Color | Legend Ra 0.2 | Background Color | Background Ra 0.2 | Condition | |
---|---|---|---|---|---|---|---|---|---|
0 | White on Red | Stop Sign | Bissonett & Guadalupe | Kati Alcantara | White | 377.233327 | Red | 91.733332 | Pass |
1 | White on Red | Stop Sign | Bissonett & Guadalupe | Kati Alcantara | White | 213.699997 | Red | 70.866666 | Pass |
2 | White on Red | Stop Sign | Croslin & Guadalupe | Kati Alcantara | White | 698.866659 | Red | 140.766668 | Pass |
3 | Black on White | Speed Limit | Croslin near Guadalupe | Kati Alcantara | Black | 5.600000 | White | 189.866669 | Pass |
4 | White on Red | Stop Sign | Kenniston & Guadalupe | Kati Alcantara | White | 207.233332 | Red | 49.266666 | Pass |
5 | Red on White | No Truck | Kenniston & Guadalupe | Kati Alcantara | Red | 245.066671 | White | 369.700012 | Pass |
6 | Red on White | No Truck | Kenniston & Guadalupe | Kati Alcantara | Red | 110.833333 | White | 557.566661 | Pass |
7 | Black on White | No Truck | Swàynee & Isabelle | Kati Alcantara | Black | 0.066667 | White | 202.599996 | Pass |
8 | White on Green | Street Name Sign | Swàynee & Isabelle | Kati Alcantara | White | 704.133321 | Green | 141.933334 | Pass |
9 | White on Red | Stop Sign | Quail Park & Quail Field | Christina Tremel | White | 306.874992 | Red | 72.349999 | Pass |
10 | White on Red | Stop Sign | Collinfield & Quail Park | Christina Tremel | White | 605.124992 | Red | 216.574997 | Pass |
Conclusions
All 29 signs collected in the field passed retroreflectivity standards according to the MUTCD. The project is 29% completed. Measuring retroreflectivity of 1 sign takes about 5-10 minutes not including travel time, so it should be possible to collect all 100 signs within next week.
There are some signs that are suspected to be in poor condition, even though the sign fulfills retroreflective MUTCD standards. After project completion, we can create a new sign condition standard.