darktable
gimp
Python
Verwendete Pakete
NumPy
und SciPy
matplotlib
scikit-image
Die Quellen aller Pakete sind auf Github verfügbar.
Python-Distribution mit allem was man hier braucht:
Anaconda
In [1]:
%matplotlib inline
import numpy as np
from scipy import misc, ndimage
import matplotlib as mpl
import matplotlib.pyplot as plt
from skimage import (color, data, draw, exposure, filters, measure,
morphology, transform)
In [2]:
plt.imshow(misc.face())
Out[2]:
In [3]:
misc.imsave('face.png', misc.face())
In [4]:
with open('face.png', 'rb') as file:
print(file.read(20))
In [5]:
waschbär = misc.imread('face.png')
In [6]:
type(waschbär)
Out[6]:
In [7]:
waschbär.shape
Out[7]:
In [8]:
waschbär
Out[8]:
In [9]:
waschbär_sw = misc.face(gray=True)
In [10]:
waschbär_sw.shape
Out[10]:
In [11]:
waschbär_sw
Out[11]:
In [12]:
plt.imshow(waschbär_sw)
Out[12]:
Standardfarbskala von Matplotlib: cm.viridis
für Schwarz-Weiß-Bilder besser: cm.gray
In [13]:
plt.imshow(waschbär_sw, cmap=plt.cm.gray)
Out[13]:
In [14]:
gerahmtes_bild = np.zeros_like(waschbär_sw)
rand = 20
gerahmtes_bild[rand:-rand, rand:-rand] = waschbär_sw[rand:-rand, rand:-rand]
plt.imshow(gerahmtes_bild, cmap=plt.cm.gray)
Out[14]:
In [15]:
fig, (ax0, ax1) = plt.subplots(1, 2, figsize=(10.24, 7.68))
ax0.imshow(np.array(waschbär_sw[:, :, np.newaxis]*np.array([0.9, 0.9, 1.0]),
dtype=np.uint8))
ax1.imshow(waschbär_sw, cmap=plt.cm.gray)
Out[15]:
np.newaxis
)
In [16]:
maskierter_waschbär = waschbär_sw[:, :]
centerx, centery = 660, 300
radius = 230
sy, sx = waschbär_sw.shape
y, x = np.ogrid[:sy, :sx]
maske = ((y-centery)**2 + (x-centerx)**2) > radius**2
maskierter_waschbär[maske] = 0
plt.imshow(maskierter_waschbär, cmap=plt.cm.gray)
Out[16]:
True
: Punkt liegt außerhalb des gewählten KreisesFalse
: Punkt liegt innerhalb des gewählten Kreisesmaske
)
In [17]:
help(draw.ellipse)
In [18]:
maskierter_waschbär = np.ones_like(waschbär)*np.array([100, 80, 0], dtype=np.uint8)
e_rr, e_cc = draw.ellipse(250, 640, 250, 380, shape=waschbär.shape)
maskierter_waschbär[e_rr, e_cc, :] = waschbär[e_rr, e_cc, :]
plt.imshow(maskierter_waschbär)
Out[18]:
In [19]:
plt.imshow(ndimage.shift(waschbär, (100, 50, 0)))
Out[19]:
In [20]:
fig, (ax0, ax1) = plt.subplots(1, 2, figsize=(10, 10))
ax0.imshow(ndimage.zoom(waschbär, (2, 2, 1))[-250:, :250])
ax1.imshow(waschbär[-250:, :250])
Out[20]:
In [21]:
fig, (ax0, ax1) = plt.subplots(1, 2, figsize=(12, 8))
ax0.imshow(ndimage.rotate(waschbär, 30))
ax1.imshow(ndimage.rotate(waschbär, 30, reshape=False))
Out[21]:
In [22]:
lille = misc.imread('img/lille.png')
plt.imshow(lille, cmap=plt.cm.gray)
Out[22]:
In [23]:
def mapfunc(output_coords, *args):
xp, yp = output_coords
xmax, ymax = args[0]
fak = args[1]
yorig = (yp-(1-fak)*xp/xmax*0.5*ymax)/(fak+(1-fak)*(1-xp/xmax))
return (xp, yorig)
lille_trafo = ndimage.geometric_transform(lille, mapping=mapfunc,
extra_arguments=(lille.shape, 0.74))
fig, (ax0, ax1, ax2) = plt.subplots(1, 3, figsize=(15, 8))
ax0.imshow(lille, cmap=plt.cm.gray)
ax1.imshow(lille_trafo, cmap=plt.cm.gray)
ax2.imshow(lille_trafo[:, 120:780], cmap=plt.cm.gray)
Out[23]:
$u+\mathrm{i}v = \mathrm{e}^{x+\mathrm{i}y}$
In [24]:
def mapfunc(output_coords, *args):
xp, yp, zp = output_coords
xmax, ymax, _ = args[0]
xp = 3-6*xp/xmax
yp = 3-6*yp/ymax
xorig = 0.5*xmax*(1-np.log(xp**2+yp**2+1e-12)/(2*np.pi))
yorig = 0.5*ymax*(1+np.arctan2(xp, yp)/np.pi)
return (xorig, yorig, zp)
plt.imshow(ndimage.geometric_transform(waschbär, mapping=mapfunc,
extra_arguments=(waschbär.shape,)))
Out[24]:
In [25]:
text = data.text()
plt.imshow(text, cmap=plt.cm.gray)
Out[25]:
In [26]:
dst = np.array([[155, 15], [65, 40], [260, 130], [360, 95]])
plt.imshow(text, cmap=plt.cm.gray)
plt.plot(dst[:, 0], dst[:, 1], '.r')
Out[26]:
In [27]:
src = np.array([[0, 0], [0, 50], [300, 50], [300, 0]])
tform = transform.ProjectiveTransform()
tform.estimate(src, dst)
warped = transform.warp(text, tform, output_shape=(50, 300))
plt.imshow(warped, cmap=plt.cm.gray)
Out[27]:
In [28]:
for column, farbe in enumerate(('r', 'g', 'b')):
histogramm = ndimage.histogram(waschbär[:, :, column],
min=0, max=255, bins=256)
plt.plot(histogramm, farbe)
In [29]:
label = np.zeros(shape=waschbär.shape[:2])
label[np.logical_and(waschbär[:, :, 1] > waschbär[:, :, 0],
waschbär[:, :, 1] > waschbär[:, :, 2])] = 1
label[np.logical_and(waschbär[:, :, 2] > waschbär[:, :, 0],
waschbär[:, :, 2] > waschbär[:, :, 1])] = 2
colors = [(1, 0, 0), (0, 1, 0), (0, 0, 1)]
rgb = color.colorlabel.label2rgb(label, image=waschbär,
colors=colors, alpha=0.35, image_alpha=1)
plt.imshow(rgb)
Out[29]:
In [30]:
grün = color.colorconv.rgb2lab(np.array([0, 255, 0], dtype=np.uint8
).reshape(1, 1, 3))
In [31]:
waschbär_lab = color.colorconv.rgb2lab(waschbär)
In [32]:
diff = color.delta_e.deltaE_cie76(waschbär_lab, grün)
plt.plot(ndimage.histogram(diff, min=np.min(diff), max=np.max(diff), bins=100))
Out[32]:
In [33]:
schwelle = 115
waschbär_ohne_grün = np.zeros_like(waschbär)
waschbär_ohne_grün[diff > schwelle] = waschbär[diff > schwelle]
fig1, (ax0, ax1) = plt.subplots(1, 2, figsize=(10.24, 7.68))
ax0.imshow(waschbär)
ax1.imshow(waschbär_ohne_grün)
Out[33]:
siehe auch Scikit Image Gallery (http://scikit-image.org/docs/dev/auto_examples/)
In [34]:
münzen = misc.imread('img/euro_real.jpg')
plt.imshow(münzen, cmap=plt.cm.gray)
Out[34]:
In [35]:
plt.plot(ndimage.histogram(münzen, min=0, max=255, bins=256))
Out[35]:
In [36]:
schwelle = filters.threshold_otsu(münzen)
print(schwelle)
münzen_sw = münzen < schwelle
plt.imshow(münzen_sw, cmap=plt.cm.gray)
Out[36]:
In [37]:
größe = (3, 5, 20, 30)
fig, achsen = plt.subplots(1, len(größe), figsize=(12, 8))
for achse, g in zip(achsen, größe):
achse.imshow(morphology.closing(münzen_sw, morphology.square(g)),
cmap=plt.cm.gray)
In [38]:
münzen_sw_20 = morphology.closing(münzen_sw, morphology.square(20))
label_münzen = measure.label(münzen_sw_20)
münzen_label_overlay = color.label2rgb(label_münzen, image=münzen)
In [39]:
fig, ax = plt.subplots(figsize=(10, 6))
ax.imshow(münzen_label_overlay)
for region in measure.regionprops(label_münzen):
if region.area >= 100:
minr, minc, maxr, maxc = region.bbox
rect = mpl.patches.Rectangle((minc, minr), maxc - minc, maxr - minr,
fill=False, edgecolor='red', linewidth=2)
ax.add_patch(rect)
ax.set_axis_off()
plt.show()