In [24]:
import numpy as np
import math
import cv2
import random
import matplotlib.pyplot as plt
from skimage.transform import probabilistic_hough_line as hough
In [2]:
def generateEasyLineImage(ySize, xSize):
image = np.zeros((ySize, xSize))
oX = xSize/2
oY = ySize/2
m = random.uniform(-3, 3)
b = random.randint(-ySize/5, ySize/5)
for xCenter in range(-xSize/2, xSize/2, 1):
yCenter = m*xCenter + b
xImage = xCenter + oX
yImage =ySize - (yCenter + oY)
if xImage > 0 and yImage > 0:
try:
image[int(yImage)][int(xImage)] = 1
except:
continue
return image, m, b
def generateHardLineImage(ySize, xSize):
image = np.zeros((ySize, xSize))
oX = xSize/2
oY = ySize/2
m = random.uniform(-3, 3)
b = random.randint(-ySize/5, ySize/5)
for xCenter in range(-xSize/2, xSize/2, 3):
yCenter = m*xCenter + b
xImage = xCenter + oX
yImage =ySize - (yCenter + oY)
if xImage > 0 and yImage > 0:
try:
image[int(yImage)][int(xImage)] = 1
except:
continue
return image, m, b
def introduceNoise(image, num):
for i in range(num):
y = random.randint(0, image.shape[0]-1)
x = random.randint(0, image.shape[1]-1)
image[y][x] = 1
return image
In [3]:
for test in range(5):
f, (ax1, ax2) = plt.subplots(1, 2, sharex = 'col', sharey = 'row')
i, m, b = generateEasyLineImage(100, 100)
ax1.set_title('y=' + str(m) + 'x+ ' + str(b))
ax1.imshow(i, cmap='gray')
i2 = introduceNoise(i, 300)
ax2.imshow(i2, cmap='gray')
ax2.set_title('With Noise')
plt.show()
In [4]:
for test in range(5):
f, (ax1, ax2) = plt.subplots(1, 2, sharex = 'col', sharey = 'row')
i, m, b = generateHardLineImage(100, 100)
ax1.set_title('y=' + str(m) + 'x+ ' + str(b))
ax1.imshow(i, cmap='gray')
i2 = introduceNoise(i, 500)
ax2.imshow(i2, cmap='gray')
ax2.set_title('With Noise')
plt.show()
In [63]:
def easySimTest():
f, (ax1, ax2, ax3) = plt.subplots(1, 3, sharex = 'col', sharey = 'row')
i, m, b = generateEasyLineImage(100, 100)
ax1.set_title('y=' + str(m) + 'x+ ' + str(b))
ax1.imshow(i, cmap='gray')
i2 = introduceNoise(i, 500)
ax2.imshow(i2, cmap='gray')
ax2.set_title('With Noise')
lines = hough(i2, threshold = 20)
for line in lines:
p0, p1 = line
ax3.plot((p0[0], p0[1]), (p1[0], p1[1]))
ax3.set_title('Output')
plt.show()
def hardSimTest():
f, (ax1, ax2, ax3) = plt.subplots(1, 3, sharex = 'col', sharey = 'row')
i, m, b = generateHardLineImage(100, 100)
ax1.set_title('y=' + str(m) + 'x+ ' + str(b))
ax1.imshow(i, cmap='gray')
i2 = introduceNoise(i, 500)
ax2.imshow(i2, cmap='gray')
ax2.set_title('With Noise')
lines = hough(i2, threshold = 5)
for line in lines:
p0, p1 = line
ax3.plot((p0[0], p0[1]), (p1[0], p1[1]))
ax3.set_title('Output')
plt.show()
In [ ]:
for test in range(10):
easySimTest()
In [62]:
for test in range(10):
hardSimTest()
In [ ]: