2023-01-23 22:27:26 -08:00
|
|
|
# pip install pillow scikit-image
|
|
|
|
# or
|
|
|
|
# sudo apt install python3-pil python3-skimage
|
|
|
|
|
|
|
|
from PIL import Image
|
|
|
|
from skimage.measure import find_contours
|
|
|
|
from matplotlib import pyplot
|
|
|
|
import numpy
|
|
|
|
|
2023-04-07 18:08:42 -07:00
|
|
|
from masque import Pattern, Polygon
|
2023-01-23 22:27:26 -08:00
|
|
|
from masque.file.gdsii import writefile
|
|
|
|
|
|
|
|
#
|
|
|
|
# Read the image into a numpy array
|
|
|
|
#
|
|
|
|
im = Image.open('./Desktop/Camera/IMG_20220626_091101.jpg')
|
|
|
|
|
|
|
|
aa = numpy.array(im.convert(mode='L').getdata()).reshape(im.height, im.width)
|
|
|
|
|
|
|
|
threshold = (aa.max() - aa.min()) / 2
|
|
|
|
|
|
|
|
#
|
|
|
|
# Find edge contours and plot them
|
|
|
|
#
|
|
|
|
contours = find_contours(aa, threshold)
|
|
|
|
|
|
|
|
pyplot.imshow(aa)
|
|
|
|
for contour in contours:
|
|
|
|
pyplot.plot(contour[:, 1], contour[:, 0], linewidth=2)
|
|
|
|
pyplot.show(block=False)
|
|
|
|
|
|
|
|
#
|
|
|
|
# Create the layout from the contours
|
|
|
|
#
|
|
|
|
pat = Pattern()
|
2023-07-17 20:22:04 -07:00
|
|
|
pat.shapes[(0, 0)].extend([
|
|
|
|
Polygon(vertices=vv) for vv in contours if len(vv) < 1_000
|
|
|
|
])
|
2023-01-23 22:27:26 -08:00
|
|
|
|
|
|
|
lib = {}
|
|
|
|
lib['my_mask_name'] = pat
|
|
|
|
|
|
|
|
writefile(lib, 'test_contours.gds', meters_per_unit=1e-9)
|