Beispiel #1
0
    def get_ll_spike_positions(thresh, num_of_iterations=2, signal_row_start=235,
                               signal_row_end=120, signal_col_start=0, signal_col_end=64,
                               row_thresh=150, dbg=False, image=None):
        if dbg:
            print("     ########################## LEFT LANE ##########################     ")
        spike_positions = []
        no_spike_rows_count = 0
        for signal_row_number in xrange(signal_row_start, signal_row_end, -2):
            row = NumUtils.getImageRow(thresh, signal_row_number)
            ud_spikes = OneDHWTLaneDetectorV2.get_up_down_spikes(row, signal_col_start, signal_col_end,
                                                                 num_of_iterations, signal_row_number)

            # If no spikes gets detected the scan line rotated by 1 pixel,
            # the last (64th) pixel is the average of 62nd and 63rd pixels

            if len(ud_spikes) == 0:
                temp_row = row[1:]
                temp_row.append((temp_row[-1] + temp_row[-2])/2)
                ud_spikes = OneDHWTLaneDetectorV2.get_up_down_spikes(temp_row, signal_col_start,
                                                                     signal_col_end,
                                                                     num_of_iterations, signal_row_number)

            # If there are no spikes detected, incrementing the counter

            if len(ud_spikes) == 0:
                no_spike_rows_count += 1

            # If no spikes gets detected for consecutive 5 rows, then
            # scan line will be shifted by 7 pixels and tries to detect spikes

            if len(ud_spikes) == 0 and no_spike_rows_count >= 5:
                temp_signal_col_start = signal_col_start
                temp_signal_col_end = signal_col_end

                # The shifting continues until it reaches row_thresh

                while temp_signal_col_end < row_thresh:
                    temp_signal_col_start += 7
                    temp_signal_col_end += 7
                    row = NumUtils.getImageRow(thresh, signal_row_number)
                    ud_spikes = OneDHWTLaneDetectorV2.get_up_down_spikes(row, temp_signal_col_start,
                                                                         temp_signal_col_end,
                                                                         num_of_iterations, signal_row_number)
                    if len(ud_spikes) > 0:
                        signal_col_start = temp_signal_col_start
                        signal_col_end = temp_signal_col_end
                    # drawing buffer lines
                    if dbg:
                        cv2.line(image, (temp_signal_col_start, signal_row_number),
                                 (temp_signal_col_end, signal_row_number), (255, 0, 0), 1)

            if len(ud_spikes) > 0:
                no_spike_rows_count = 0
                if dbg:
                    print("LL: detected spikes: " + str(len(ud_spikes)))
                    for spike in ud_spikes:
                        print spike
                # Needs improvement
                spike_position = (OneDHWTLaneDetectorV2.optimum_spike_x(ud_spikes), signal_row_number)

                if dbg:
                    print("LL: Spike position: " + str(spike_position))
                '''
                spike_position = ((ud_spikes[0].getSigStartOfUpRun() + ud_spikes[0].getSigLenOfUpRun() / 2),
                                  signal_row_number)
                '''
                # setting previous spike position as mid point as the scan line

                delta = spike_position[0] - (signal_col_start + signal_col_end) / 2
                if delta > 0:
                    signal_col_start += delta
                    signal_col_end += delta
                spike_positions.append(spike_position)
            # drawing the scan lines
            if dbg:
                cv2.line(image, (signal_col_start, signal_row_number),
                         (signal_col_end, signal_row_number), (255, 255, 255), 1)
                print("LL: " + str(signal_row_number) + " , " + str(len(ud_spikes)))
                NumUtils.draw_spikes(image, ud_spikes, signal_row_number)
        return spike_positions
Beispiel #2
0
    def get_ll_spike_positions(thresh,
                               num_of_iterations=2,
                               signal_row_start=235,
                               signal_row_end=120,
                               signal_col_start=0,
                               signal_col_end=64,
                               row_thresh=150,
                               dbg=False,
                               image=None):
        if dbg:
            print(
                "     ########################## LEFT LANE ##########################     "
            )
        spike_positions = []
        no_spike_rows_count = 0
        for signal_row_number in xrange(signal_row_start, signal_row_end, -2):
            row = NumUtils.getImageRow(thresh, signal_row_number)
            ud_spikes = OneDHWTLaneDetectorV2.get_up_down_spikes(
                row, signal_col_start, signal_col_end, num_of_iterations,
                signal_row_number)

            # If no spikes gets detected the scan line rotated by 1 pixel,
            # the last (64th) pixel is the average of 62nd and 63rd pixels

            if len(ud_spikes) == 0:
                temp_row = row[1:]
                temp_row.append((temp_row[-1] + temp_row[-2]) / 2)
                ud_spikes = OneDHWTLaneDetectorV2.get_up_down_spikes(
                    temp_row, signal_col_start, signal_col_end,
                    num_of_iterations, signal_row_number)

            # If there are no spikes detected, incrementing the counter

            if len(ud_spikes) == 0:
                no_spike_rows_count += 1

            # If no spikes gets detected for consecutive 5 rows, then
            # scan line will be shifted by 7 pixels and tries to detect spikes

            if len(ud_spikes) == 0 and no_spike_rows_count >= 5:
                temp_signal_col_start = signal_col_start
                temp_signal_col_end = signal_col_end

                # The shifting continues until it reaches row_thresh

                while temp_signal_col_end < row_thresh:
                    temp_signal_col_start += 7
                    temp_signal_col_end += 7
                    row = NumUtils.getImageRow(thresh, signal_row_number)
                    ud_spikes = OneDHWTLaneDetectorV2.get_up_down_spikes(
                        row, temp_signal_col_start, temp_signal_col_end,
                        num_of_iterations, signal_row_number)
                    if len(ud_spikes) > 0:
                        signal_col_start = temp_signal_col_start
                        signal_col_end = temp_signal_col_end
                    # drawing buffer lines
                    if dbg:
                        cv2.line(image,
                                 (temp_signal_col_start, signal_row_number),
                                 (temp_signal_col_end, signal_row_number),
                                 (255, 0, 0), 1)

            if len(ud_spikes) > 0:
                no_spike_rows_count = 0
                if dbg:
                    print("LL: detected spikes: " + str(len(ud_spikes)))
                    for spike in ud_spikes:
                        print spike
                # Needs improvement
                spike_position = (
                    OneDHWTLaneDetectorV2.optimum_spike_x(ud_spikes),
                    signal_row_number)

                if dbg:
                    print("LL: Spike position: " + str(spike_position))
                '''
                spike_position = ((ud_spikes[0].getSigStartOfUpRun() + ud_spikes[0].getSigLenOfUpRun() / 2),
                                  signal_row_number)
                '''
                # setting previous spike position as mid point as the scan line

                delta = spike_position[0] - (signal_col_start +
                                             signal_col_end) / 2
                if delta > 0:
                    signal_col_start += delta
                    signal_col_end += delta
                spike_positions.append(spike_position)
            # drawing the scan lines
            if dbg:
                cv2.line(image, (signal_col_start, signal_row_number),
                         (signal_col_end, signal_row_number), (255, 255, 255),
                         1)
                print("LL: " + str(signal_row_number) + " , " +
                      str(len(ud_spikes)))
                NumUtils.draw_spikes(image, ud_spikes, signal_row_number)
        return spike_positions