예제 #1
0
def CheckAngleNear(angles_img, point, border_angle, oldangle):
    for i in [-1, 0, 1]:
        for j in [-1, 0, 1]:
            new_p = (point[0] + i, point[1] + j)
            if checkbound(new_p, angles_img):
                angle = angles_img[new_p[0], new_p[1]]
                diff = SWT_Support.anglediff(oldangle, angle)
                if abs(diff) > (border_angle):
                    return True 
    
    return False
예제 #2
0
파일: SWT_lite.py 프로젝트: Daiver/carplate
def CheckAngleNear(angles_img, point, border_angle, oldangle):
    for i in [-1, 0, 1]:
        for j in [-1, 0, 1]:
            new_p = (point[0] + i, point[1] + j)
            if checkbound(new_p, angles_img):
                angle = angles_img[new_p[0], new_p[1]]
                diff = SWT_Support.anglediff(oldangle, angle)
                if abs(diff) > (border_angle):
                    return True

    return False
예제 #3
0
파일: SWT_lite.py 프로젝트: Daiver/carplate
def Stroke(image, angles_img, point, dx, dy, search_direction=-1):
    MAX_RAY_LEN = 100
    stroke = []
    if not checkbound_sq(point, image): return
    oldangle = angles_img[point[0], point[1]]  #Получаем угол
    angle = oldangle
    if (oldangle == None) or (numpy.isnan(oldangle)): return

    selector = Bresenham.Selector(
        point[0], point[1],
        point[0] + search_direction * dy[point[0], point[1]],
        point[1] + search_direction * dx[point[0], point[1]])

    diff = SWT_Support.anglediff(oldangle, angle)
    stroke.append(point)
    new_point = selector.GetPoint()
    stroke.append(new_point)
    new_point = selector.GetPoint()
    if point == new_point: return
    point = new_point
    if not checkbound_sq(point, image):  # or mask[point[0], point[1]] == 255:
        return
    i = 0
    #Пока не уткнемся в градиент различающийся с нашим более чем в 30* ползем в направлении step
    #Из-за кривого шага на больших расстояниях дает нехороший результат
    while image[point[0], point[
            1]] == 0:  #not ContourNear(image, point):# image[point[0], point[1]] == 0:
        stroke.append(point)
        point = selector.GetPoint()
        i += 1
        #Если уткнулись в край картинки - считаем луч ошибочным
        if not checkbound_sq(
                point, image
        ) or i > MAX_RAY_LEN:  # or mask[point[0], point[1]] == 255:
            return
    if CheckAngleNear(angles_img, point, numpy.pi / 3, oldangle):
        return stroke
    else:
        return
예제 #4
0
def Stroke(image, angles_img, point, dx, dy, search_direction=-1):
    MAX_RAY_LEN = 100
    stroke = []
    if not checkbound_sq(point, image): return 
    oldangle = angles_img[point[0], point[1]]#Получаем угол
    angle = oldangle
    if (oldangle == None) or (numpy.isnan(oldangle)): return 

    selector = Bresenham.Selector(
        point[0], point[1],
        point[0] + search_direction*dy[point[0],
        point[1]], point[1] + search_direction*dx[point[0], point[1]]
    )

    diff = SWT_Support.anglediff(oldangle, angle) 
    stroke.append(point)
    new_point = selector.GetPoint()
    stroke.append(new_point)
    new_point = selector.GetPoint()
    if point == new_point: return
    point = new_point
    if not checkbound_sq(point, image):# or mask[point[0], point[1]] == 255:
        return 
    i = 0
    #Пока не уткнемся в градиент различающийся с нашим более чем в 30* ползем в направлении step
    #Из-за кривого шага на больших расстояниях дает нехороший результат
    while image[point[0], point[1]] == 0:#not ContourNear(image, point):# image[point[0], point[1]] == 0:
        stroke.append(point)
        point = selector.GetPoint()
        i += 1
        #Если уткнулись в край картинки - считаем луч ошибочным
        if not checkbound_sq(point, image) or i > MAX_RAY_LEN:# or mask[point[0], point[1]] == 255:
            return 
    if CheckAngleNear(angles_img, point, numpy.pi / 3, oldangle):
        return stroke
    else:
        return