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.

Here is the link to notebook

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.