±à¼ÍƼö: |
ÕâÆªÎÄÕÂÖ÷Òª½éÉÜÁËpythonÊý×ÖͼÏñ´¦ÀíÖ®¸ß¼¶ÐÎ̬ѧ´¦Àí
, Ï£Íû¶ÔÄúµÄѧϰÓÐËù°ïÖú¡£
±¾ÎÄÀ´×ÔÓÚÖÐÎÄÍø£¬ÓÉ»ðÁú¹ûÈí¼þAlice±à¼£¬ÍƼö¡£ |
|
ÐÎ̬ѧ´¦Àí£¬³ýÁË×î»ù±¾µÄÅòÕÍ¡¢¸¯Ê´¡¢¿ª/±ÕÔËËã¡¢ºÚ/°×ñ´¦ÀíÍ⣬»¹ÓÐһЩ¸ü¸ß¼¶µÄÔËÓã¬Èç͹°ü£¬Á¬Í¨ÇøÓò±ê¼Ç£¬É¾³ýС¿éÇøÓòµÈ¡£
1¡¢Í¹°ü
͹°üÊÇÖ¸Ò»¸ö͹¶à±ßÐΣ¬Õâ¸ö͹¶à±ßÐν«Í¼Æ¬ÖÐËùÓеİ×É«ÏñËØµã¶¼°üº¬ÔÚÄÚ¡£
º¯ÊýΪ£º
skimage.morphology.convex_hull_image(image)
|
ÊäÈëΪ¶þֵͼÏñ£¬Êä³öÒ»¸öÂß¼¶þֵͼÏñ¡£ÔÚ͹°üÄڵĵãΪTrue, ·ñÔòΪFalse
Àý£º
import matplotlib.pyplot
as plt
from skimage import data,color,morphology
#Éú³É¶þÖµ²âÊÔͼÏñ
img=color.rgb2gray(data.horse())
img=(img<0.5)*1
chull = morphology.convex_hull_image(img)
#»æÖÆÂÖÀª
fig, axes = plt.subplots(1,2,figsize=(8,8))
ax0, ax1= axes.ravel()
ax0.imshow(img,plt.cm.gray)
ax0.set_title('original image')
ax1.imshow(chull,plt.cm.gray)
ax1.set_title('convex_hull image')
|

convex_hull_image()Êǽ«Í¼Æ¬ÖеÄËùÓÐÄ¿±ê¿´×÷Ò»¸öÕûÌ壬Òò´Ë¼ÆËã³öÀ´Ö»ÓÐÒ»¸ö×îС͹¶à±ßÐΡ£Èç¹ûͼÖÐÓжà¸öÄ¿±êÎïÌ壬ÿһ¸öÎïÌåÐèÒª¼ÆËãÒ»¸ö×îС͹¶à±ßÐΣ¬ÔòÐèҪʹÓÃconvex_hull_object£¨£©º¯Êý¡£
º¯Êý¸ñʽ£ºskimage.morphology.convex_hull_object(image,neighbors=8)
ÊäÈë²ÎÊýimageÊÇÒ»¸ö¶þֵͼÏñ£¬neighbors±íʾÊDzÉÓÃ4Á¬Í¨»¹ÊÇ8Á¬Í¨£¬Ä¬ÈÏΪ8Á¬Í¨¡£
Àý£º
import matplotlib.pyplot
as plt
from skimage import data,color,morphology,feature
#Éú³É¶þÖµ²âÊÔͼÏñ
img=color.rgb2gray(data.coins())
#¼ì²âcanny±ßÔµ,µÃµ½¶þֵͼƬ
edgs=feature.canny(img, sigma=3, low_threshold=10,
high_threshold=50)
chull = morphology.convex_hull_object(edgs)
#»æÖÆÂÖÀª
fig, axes = plt.subplots(1,2,figsize=(8,8))
ax0, ax1= axes.ravel()
ax0.imshow(edgs,plt.cm.gray)
ax0.set_title('many objects')
ax1.imshow(chull,plt.cm.gray)
ax1.set_title('convex_hull image')
plt.show()
|

2¡¢Á¬Í¨ÇøÓò±ê¼Ç
ÔÚ¶þֵͼÏñÖУ¬Èç¹ûÁ½¸öÏñËØµãÏàÁÚÇÒÖµÏàͬ£¨Í¬Îª0»òͬΪ1£©£¬ÄÇô¾ÍÈÏΪÕâÁ½¸öÏñËØµãÔÚÒ»¸öÏ໥Á¬Í¨µÄÇøÓòÄÚ¡£¶øÍ¬Ò»¸öÁ¬Í¨ÇøÓòµÄËùÓÐÏñËØµã£¬¶¼ÓÃͬһ¸öÊýÖµÀ´½øÐбê¼Ç£¬Õâ¸ö¹ý³Ì¾Í½ÐÁ¬Í¨ÇøÓò±ê¼Ç¡£ÔÚÅжÏÁ½¸öÏñËØÊÇ·ñÏàÁÚʱ£¬ÎÒÃÇͨ³£²ÉÓÃ4Á¬Í¨»ò8Á¬Í¨Åжϡ£ÔÚͼÏñÖУ¬×îСµÄµ¥Î»ÊÇÏñËØ£¬Ã¿¸öÏñËØÖÜΧÓÐ8¸öÁÚ½ÓÏñËØ£¬³£¼ûµÄÁÚ½Ó¹ØÏµÓÐ2ÖÖ£º4ÁÚ½ÓÓë8ÁÚ½Ó¡£4ÁÚ½ÓÒ»¹²4¸öµã£¬¼´ÉÏÏÂ×óÓÒ£¬ÈçÏÂ×óͼËùʾ¡£8ÁڽӵĵãÒ»¹²ÓÐ8¸ö£¬°üÀ¨Á˶ԽÇÏßλÖõĵ㣬ÈçÏÂÓÒͼËùʾ¡£

ÔÚskimage°üÖУ¬ÎÒÃDzÉÓÃmeasure×ÓÄ£¿éϵÄlabel£¨£©º¯ÊýÀ´ÊµÏÖÁ¬Í¨ÇøÓò±ê¼Ç¡£
º¯Êý¸ñʽ£º
skimage.measure.label£¨image,connectivity=None)
|
²ÎÊýÖеÄimage±íʾÐèÒª´¦ÀíµÄ¶þֵͼÏñ£¬connectivity±íʾÁ¬½ÓµÄģʽ£¬1´ú±í4ÁÚ½Ó£¬2´ú±í8ÁÚ½Ó¡£
Êä³öÒ»¸ö±ê¼ÇÊý×飨labels), ´Ó0¿ªÊ¼±ê¼Ç¡£
import numpy
as np
import scipy.ndimage as ndi
from skimage import measure,color
import matplotlib.pyplot as plt
#±àдһ¸öº¯ÊýÀ´Éú³ÉÔʼ¶þֵͼÏñ
def microstructure(l=256):
n = 5
x, y = np.ogrid[0:l, 0:l] #Éú³ÉÍøÂç
mask = np.zeros((l, l))
generator = np.random.RandomState(1) #Ëæ»úÊýÖÖ×Ó
points = l * generator.rand(2, n**2)
mask[(points[0]).astype(np.int), (points[1]).astype(np.int)]
= 1
mask = ndi.gaussian_filter(mask, sigma=l/(4.*n))
#¸ß˹Â˲¨
return mask > mask.mean()
data = microstructure(l=128)*1 #Éú³É²âÊÔͼƬ
labels=measure.label(data,connectivity=2) #8Á¬Í¨ÇøÓò±ê¼Ç
dst=color.label2rgb(labels) #¸ù¾Ý²»Í¬µÄ±ê¼ÇÏÔʾ²»Í¬µÄÑÕÉ«
print('regions number:',labels.max()+1) #ÏÔʾÁ¬Í¨ÇøÓò¿éÊý(´Ó0¿ªÊ¼±ê¼Ç)
fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(8,
4))
ax1.imshow(data, plt.cm.gray, interpolation='nearest')
ax1.axis('off')
ax2.imshow(dst,interpolation='nearest')
ax2.axis('off')
fig.tight_layout()
plt.show()
|
ÔÚ´úÂëÖУ¬ÓÐЩµØ·½³ËÒÔ1£¬Ôò¿ÉÒÔ½«boolÊý×é¿ìËÙµØ×ª»»ÎªintÊý×é¡£
½á¹ûÈçͼ£ºÓÐ10¸öÁ¬Í¨µÄÇøÓò£¬±ê¼ÇΪ0-9

Èç¹ûÏë·Ö±ð¶Ôÿһ¸öÁ¬Í¨ÇøÓò½øÐвÙ×÷£¬±ÈÈç¼ÆËãÃæ»ý¡¢Íâ½Ó¾ØÐΡ¢Í¹°üÃæ»ýµÈ£¬ÔòÐèÒªµ÷ÓÃmeasure×ÓÄ£¿éµÄregionprops£¨£©º¯Êý¡£¸Ãº¯Êý¸ñʽΪ£º
skimage.measure.regionprops(label_image)
|
·µ»ØËùÓÐÁ¬Í¨Çø¿éµÄÊôÐÔÁÐ±í£¬³£ÓõÄÊôÐÔÁбíÈçÏÂ±í£º

ÓÐЩʱºò£¬ÎÒÃÇÖ»ÐèҪһЩ´ó¿éÇøÓò£¬ÄÇЩÁãÉ¢µÄ¡¢Ð¡¿éµÄÇøÓò£¬ÎÒÃǾÍÐèҪɾ³ýµô£¬Ôò¿ÉÒÔʹÓÃmorphology×ÓÄ£¿éµÄremove_small_objects£¨)º¯Êý¡£
º¯Êý¸ñʽ£ºskimage.morphology.remove_small_objects(ar,min_size=64,connectivity=1,in_place=False)
²ÎÊý£º
ar: ´ý²Ù×÷µÄboolÐÍÊý×é¡£
min_size: ×îСÁ¬Í¨ÇøÓò³ß´ç£¬Ð¡ÓڸóߴçµÄ¶¼½«±»É¾³ý¡£Ä¬ÈÏΪ64.
connectivity: ÁÚ½Óģʽ£¬1±íʾ4ÁÚ½Ó£¬2±íʾ8ÁÚ½Ó
in_place: boolÐÍÖµ£¬Èç¹ûΪTrue,±íʾֱ½ÓÔÚÊäÈëͼÏñÖÐɾ³ýС¿éÇøÓò£¬·ñÔò½øÐи´ÖƺóÔÙɾ³ý¡£Ä¬ÈÏΪFalse.
·µ»ØÉ¾³ýÁËС¿éÇøÓòµÄ¶þֵͼÏñ¡£
import numpy
as np
import scipy.ndimage as ndi
from skimage import morphology
import matplotlib.pyplot as plt
#±àдһ¸öº¯ÊýÀ´Éú³ÉÔʼ¶þֵͼÏñ
def microstructure(l=256):
n = 5
x, y = np.ogrid[0:l, 0:l] #Éú³ÉÍøÂç
mask = np.zeros((l, l))
generator = np.random.RandomState(1) #Ëæ»úÊýÖÖ×Ó
points = l * generator.rand(2, n**2)
mask[(points[0]).astype(np.int), (points[1]).astype(np.int)]
= 1
mask = ndi.gaussian_filter(mask, sigma=l/(4.*n))
#¸ß˹Â˲¨
return mask > mask.mean()
data = microstructure(l=128) #Éú³É²âÊÔͼƬ
dst=morphology.remove_small_objects(data,min_size=300,connectivity=1)
fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(8,
4))
ax1.imshow(data, plt.cm.gray, interpolation='nearest')
ax2.imshow(dst,plt.cm.gray,interpolation='nearest')
fig.tight_layout()
plt.show()
|
ÔÚ´ËÀýÖУ¬ÎÒÃǽ«Ãæ»ýСÓÚ300µÄС¿éÇøÓòɾ³ý£¨ÓÉ1±äΪ0£©£¬½á¹ûÈçÏÂͼ£º

4¡¢×ÛºÏʾÀý£ºãÐÖµ·Ö¸î+±ÕÔËËã+Á¬Í¨ÇøÓò±ê¼Ç+ɾ³ýÐ¡Çø¿é+·ÖÉ«ÏÔʾ
import numpy
as np
import matplotlib.pyplot as plt
import matplotlib.patches as mpatches
from skimage import data,filter,segmentation,measure,morphology,color
#¼ÓÔØ²¢²Ã¼ôÓ²±ÒͼƬ
image = data.coins()[50:-50, 50:-50]
thresh =filter.threshold_otsu(image) #ãÐÖµ·Ö¸î
bw =morphology.closing(image > thresh, morphology.square(3))
#±ÕÔËËã
cleared = bw.copy() #¸´ÖÆ
segmentation.clear_border(cleared) #Çå³ýÓë±ß½çÏàÁ¬µÄÄ¿±êÎï
label_image =measure.label(cleared) #Á¬Í¨ÇøÓò±ê¼Ç
borders = np.logical_xor(bw, cleared) #Òì»ò
label_image[borders] = -1
image_label_overlay =color.label2rgb(label_image,
image=image) #²»Í¬±ê¼ÇÓò»Í¬ÑÕÉ«ÏÔʾ
fig,(ax0,ax1)= plt.subplots(1,2, figsize=(8,
6))
ax0.imshow(cleared,plt.cm.gray)
ax1.imshow(image_label_overlay
for region in measure.regionprops(label_image):
#Ñ»·µÃµ½Ã¿Ò»¸öÁ¬Í¨ÇøÓòÊôÐÔ¼¯
#ºöÂÔÐ¡ÇøÓò
if region.area < 100:
continue
#»æÖÆÍâ°ü¾ØÐÎ
minr, minc, maxr, maxc = region.bbox
rect = mpatches.Rectangle((minc, minr), maxc
- minc, maxr - minr,
fill=False, edgecolor='red', linewidth=2)
ax1.add_patch(rect)
fig.tight_layout()
plt.show()
|

|