Skip to content

Instantly share code, notes, and snippets.

@iandewancker
Created April 15, 2019 16:32
Show Gist options
  • Save iandewancker/1945c09e9c6119d95c25d8221878f290 to your computer and use it in GitHub Desktop.
Save iandewancker/1945c09e9c6119d95c25d8221878f290 to your computer and use it in GitHub Desktop.
import glob
import skimage
import numpy as np
import matplotlib.pyplot as plt
from PIL import Image
import glob
import matplotlib.pyplot as plt
import numpy as np
from skimage.segmentation import felzenszwalb, slic, quickshift, watershed
from skimage.segmentation import mark_boundaries
from skimage.util import img_as_float
from skimage.filters.rank import entropy
from skimage.morphology import disk
from scipy import ndimage as nd
from skimage import feature
from skimage.color import rgb2hsv
import matplotlib.patches as patches
img1_list = glob.glob("*img1.jpg")
img2_list = glob.glob("*img2.jpg")
import PIL
import re
def natural_sort(l):
convert = lambda text: int(text) if text.isdigit() else text.lower()
alphanum_key = lambda key: [ convert(c) for c in re.split('([0-9]+)', key) ]
return sorted(l, key = alphanum_key)
img1s = natural_sort(img1_list)
img2s = natural_sort(img2_list)
for img1_name,img2_name in zip(img1s,img2s):
pil_image = PIL.Image.open(img1_name)
pil_image = pil_image.resize((int(pil_image.size[0]/2.0),int(pil_image.size[1]/2.0)), Image.ANTIALIAS)
rgb = np.array(pil_image)
gray = np.array(pil_image.convert('L'))
fig = plt.figure(figsize=(18,9))
ax1 = fig.add_subplot(1, 2, 1)
ax2 = fig.add_subplot(1, 2, 2)
ax1.imshow(rgb)
print(img1_name)
#segments_fz = felzenszwalb(rgb, scale=100, sigma=1.5, min_size=150) #min_size=150, sigma=1.5
#ax2.imshow(mark_boundaries(rgb, segments_fz))
#plt.title("Felzenszwalb Segments {}".format(np.unique(segments_fz).shape[0]))
entropy_img = entropy(gray, disk(25))
img1 = ax2.imshow(entropy_img, cmap=plt.cm.jet)
ax2.set_title('Entropy')
ax2.axis('off')
fig.colorbar(img1, ax=ax1)
plt.savefig(img1_name+"_segments.png", dpi=150, transparent=True, bbox_inches='tight')
plt.close()
fig = plt.figure(figsize=(18,9))
ax1 = fig.add_subplot(1,1,1)
peaks = feature.peak_local_max(entropy_img, min_distance=30, threshold_abs=0.1)
plt.imshow(rgb)
plt.plot(peaks[:, 1], peaks[:, 0], 'r.', linewidth=2.0)
for (y,x) in peaks:
print(y,x)
rect = patches.Rectangle((x-32,y-32),64,64,linewidth=1,edgecolor='r',facecolor='none')
# Add the patch to the Axes
ax1.add_patch(rect)
plt.savefig(img1_name+"_candidates.png", dpi=600, transparent=True, bbox_inches='tight')
plt.close()
pil_image = PIL.Image.open(img2_name)
pil_image = pil_image.resize((int(pil_image.size[0]/2.0),int(pil_image.size[1]/2.0)), Image.ANTIALIAS)
rgb = np.array(pil_image)
gray = np.array(pil_image.convert('L'))
fig = plt.figure(figsize=(18,9))
ax1 = fig.add_subplot(1, 2, 1)
ax2 = fig.add_subplot(1, 2, 2)
ax1.imshow(rgb)
print(img2_name)
#segments_fz = felzenszwalb(rgb, scale=100, sigma=1.5, min_size=150) #min_size=150, sigma=1.5
#ax2.imshow(mark_boundaries(rgb, segments_fz))
#plt.title("Felzenszwalb Segments {}".format(np.unique(segments_fz).shape[0]))
entropy_img = entropy(gray, disk(25))
img1 = ax2.imshow(entropy_img, cmap=plt.cm.jet)
ax2.set_title('Entropy')
ax2.axis('off')
fig.colorbar(img1, ax=ax1)
plt.savefig(img2_name+"_segments.png", dpi=150, transparent=True, bbox_inches='tight')
plt.close()
fig = plt.figure(figsize=(18,9))
ax1 = fig.add_subplot(1,1,1)
peaks = feature.peak_local_max(entropy_img, min_distance=30, threshold_abs=0.1)
plt.imshow(rgb)
plt.plot(peaks[:, 1], peaks[:, 0], 'r.', linewidth=2.0)
print(peaks)
for (y,x) in peaks:
print(y,x)
rect = patches.Rectangle((x-32,y-32),64,64,linewidth=1,edgecolor='r',facecolor='none')
# Add the patch to the Axes
ax1.add_patch(rect)
plt.savefig(img2_name+"_candidates.png", dpi=600, transparent=True, bbox_inches='tight')
plt.close()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment