Äú¿ÉÒÔ¾èÖú£¬Ö§³ÖÎÒÃǵĹ«ÒæÊÂÒµ¡£

1Ôª 10Ôª 50Ôª





ÈÏÖ¤Â룺  ÑéÖ¤Âë,¿´²»Çå³þ?Çëµã»÷Ë¢ÐÂÑéÖ¤Âë ±ØÌî



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Model Center   Code  
»áÔ±   
   
 
     
   
 ¶©ÔÄ
  ¾èÖú
pythonÊý×ÖͼÏñ´¦ÀíÖ®¹Ç¼ÜÌáÈ¡Óë·ÖË®ÁëËã·¨
 
  3608  次浏览      29
 2019-4-29 
 
±à¼­ÍƼö:
À´Ô´phpÖÐÎÄÍø ,ÕâÆªÎÄÕÂÖ÷Òª½éÉÜÁËpythonÊý×ÖͼÏñ´¦ÀíÖ®¹Ç¼ÜÌáÈ¡Óë·ÖË®ÁëËã·¨£¬ÏÖÔÚ·ÖÏí¸ø´ó¼Ò£¬Ò²¸ø´ó¼Ò×ö¸ö²Î¿¼¡£Ò»Æð¹ýÀ´¿´¿´°É

¹Ç¼ÜÌáÈ¡Óë·ÖË®ÁëËã·¨Ò²ÊôÓÚÐÎ̬ѧ´¦Àí·¶³ë£¬¶¼·ÅÔÚmorphology×ÓÄ£¿éÄÚ¡£

1¡¢¹Ç¼ÜÌáÈ¡

¹Ç¼ÜÌáÈ¡£¬Ò²½Ð¶þֵͼÏñϸ»¯¡£ÕâÖÖËã·¨Äܽ«Ò»¸öÁ¬Í¨ÇøÓòϸ»¯³ÉÒ»¸öÏñËØµÄ¿í¶È£¬ÓÃÓÚÌØÕ÷ÌáÈ¡ºÍÄ¿±êÍØÆË±íʾ¡£

morphology×ÓÄ£¿éÌṩÁËÁ½¸öº¯ÊýÓÃÓڹǼÜÌáÈ¡£¬·Ö±ðÊÇSkeletonize£¨£©º¯ÊýºÍmedial_axis£¨£©º¯Êý¡£ÎÒÃÇÏÈÀ´¿´Skeletonize£¨£©º¯Êý¡£

¸ñʽΪ£ºskimage.morphology.skeletonize(image)

ÊäÈëºÍÊä³ö¶¼ÊÇÒ»·ù¶þֵͼÏñ¡£

Àý1£º

from skimage import morphology,draw

import numpy as np

import matplotlib.pyplot as plt

#´´½¨Ò»¸ö¶þֵͼÏñÓÃÓÚ²âÊÔ

image = np.zeros((400, 400))

#Éú³ÉÄ¿±ê¶ÔÏó1(°×É«UÐÍ)

image[10:-10, 10:100] = 1

image[-100:-10, 10:-10] = 1

image[10:-10, -100:-10] = 1

#Éú³ÉÄ¿±ê¶ÔÏó2£¨XÐÍ£©

rs, cs = draw.line(250, 150, 10, 280)

for i in range(10):

image[rs + i, cs] = 1

rs, cs = draw.line(10, 150, 250, 280)

for i in range(20):

image[rs + i, cs] = 1

#Éú³ÉÄ¿±ê¶ÔÏó3£¨OÐÍ£©

ir, ic = np.indices(image.shape)

circle1 = (ic - 135)**2 + (ir - 150)**2 < 30**2

circle2 = (ic - 135)**2 + (ir - 150)**2 < 20**2

image[circle1] = 1

image[circle2] = 0

#ʵʩ¹Ç¼ÜËã·¨

skeleton =morphology.skeletonize(image)

#ÏÔʾ½á¹û

fig, (ax1, ax2) = plt.subplots(nrows=1, ncols=2, figsize=(8, 4))

ax1.imshow(image, cmap=plt.cm.gray)

ax1.axis('off')

ax1.set_title('original', fontsize=20)

ax2.imshow(skeleton, cmap=plt.cm.gray)

ax2.axis('off')

ax2.set_title('skeleton', fontsize=20)

fig.tight_layout()

plt.show()

 

 

Éú³ÉÒ»·ù²âÊÔͼÏñ£¬ÉÏÃæÓÐÈý¸öÄ¿±ê¶ÔÏ󣬷ֱð½øÐйǼÜÌáÈ¡£¬½á¹ûÈçÏ£º

Àý2£ºÀûÓÃϵͳ×Ô´øµÄÂíͼƬ½øÐйǼÜÌáÈ¡

from skimage import morphology,data,color

import matplotlib.pyplot as plt

image=color.rgb2gray(data.horse())

image=1-image #·´Ïà

#ʵʩ¹Ç¼ÜËã·¨

skeleton =morphology.skeletonize(image)

#ÏÔʾ½á¹û

fig, (ax1, ax2) = plt.subplots(nrows=1, ncols=2, figsize=(8, 4))

ax1.imshow(image, cmap=plt.cm.gray)

ax1.axis('off')

ax1.set_title('original', fontsize=20)

ax2.imshow(skeleton, cmap=plt.cm.gray)

ax2.axis('off')

ax2.set_title('skeleton', fontsize=20)

fig.tight_layout()

plt.show()

 

medial_axis¾ÍÊÇÖÐÖáµÄÒâ˼£¬ÀûÓÃÖÐÖá±ä»»·½·¨¼ÆËãǰ¾°£¨1Öµ£©Ä¿±ê¶ÔÏóµÄ¿í¶È£¬¸ñʽΪ£º

skimage.morphology.medial_axis (image,mask=None, return_distance=False)

mask: ÑÚÄ£¡£Ä¬ÈÏΪNone, Èç¹û¸ø¶¨Ò»¸öÑÚÄ££¬ÔòÔÚÑÚÄ£ÄÚµÄÏñËØÖµ²ÅÖ´ÐйǼÜËã·¨¡£

return_distance: boolÐÍÖµ£¬Ä¬ÈÏΪFalse. Èç¹ûΪTrue, Ôò³ýÁË·µ»Ø¹Ç¼Ü£¬»¹½«¾àÀë±ä»»ÖµÒ²Í¬Ê±·µ»Ø¡£ÕâÀïµÄ¾àÀëÖ¸µÄÊÇÖÐÖáÏßÉϵÄËùÓеãÓë±³¾°µãµÄ¾àÀë¡£

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=64) #Éú³É²âÊÔͼÏñ

#¼ÆËãÖÐÖáºÍ¾àÀë±ä»»Öµ

skel, distance =morphology.medial_axis(data, return_distance=True)

#ÖÐÖáÉϵĵ㵽±³¾°ÏñËØµãµÄ¾àÀë

dist_on_skel = distance * skel

fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(8, 4))

ax1.imshow(data, cmap=plt.cm.gray, interpolation='nearest')

#ÓùâÆ×É«ÏÔʾÖÐÖá

ax2.imshow(dist_on_skel, cmap=plt.cm.spectral, interpolation='nearest')

ax2.contour(data, [0.5], colors='w') #ÏÔʾÂÖÀªÏß

fig.tight_layout()

plt.show()

2¡¢·ÖË®ÁëËã·¨

·ÖË®ÁëÔÚµØÀíѧÉϾÍÊÇÖ¸Ò»¸öɽ¼¹£¬Ë®Í¨³£»áÑØ×Åɽ¼¹µÄÁ½±ßÁ÷Ïò²»Í¬µÄ¡°»ãË®Å衱¡£·ÖË®ÁëËã·¨ÊÇÒ»ÖÖÓÃÓÚͼÏñ·Ö¸îµÄ¾­µäËã·¨£¬ÊÇ»ùÓÚÍØÆËÀíÂÛµÄÊýѧÐÎ̬ѧµÄ·Ö¸î·½·¨¡£Èç¹ûͼÏñÖеÄÄ¿±êÎïÌåÊÇÁ¬ÔÚÒ»ÆðµÄ£¬Ôò·Ö¸îÆðÀ´»á¸üÀ§ÄÑ£¬·ÖË®ÁëËã·¨¾­³£ÓÃÓÚ´¦ÀíÕâÀàÎÊÌ⣬ͨ³£»áÈ¡µÃ±È½ÏºÃµÄЧ¹û¡£

·ÖË®ÁëËã·¨¿ÉÒԺ;àÀë±ä»»½áºÏ£¬Ñ°ÕÒ¡°»ãË®ÅèµØ¡±ºÍ¡°·ÖË®Áë½çÏÞ¡±£¬´Ó¶ø¶ÔͼÏñ½øÐзָ¶þֵͼÏñµÄ¾àÀë±ä»»¾ÍÊÇÿһ¸öÏñËØµãµ½×î½ü·ÇÁãÖµÏñËØµãµÄ¾àÀ룬ÎÒÃÇ¿ÉÒÔʹÓÃscipy°üÀ´¼ÆËã¾àÀë±ä»»¡£

ÔÚÏÂÃæµÄÀý×ÓÖУ¬ÐèÒª½«Á½¸öÖØµþµÄÔ²·Ö¿ª¡£ÎÒÃÇÏȼÆËãÔ²ÉϵÄÕâЩ°×É«ÏñËØµãµ½ºÚÉ«±³¾°ÏñËØµãµÄ¾àÀë±ä»»£¬Ñ¡³ö¾àÀë±ä»»ÖеÄ×î´óÖµ×÷Ϊ³õʼ±ê¼Çµã£¨Èç¹ûÊÇ·´É«µÄ»°£¬ÔòÊÇÈ¡×îСֵ£©£¬´ÓÕâЩ±ê¼Çµã¿ªÊ¼µÄÁ½¸ö»ãË®ÅèÔ½¼¯Ô½´ó£¬×îºóÏཻÓÚ·ÖɽÁë¡£´Ó·ÖɽÁë´¦¶Ï¿ª£¬ÎÒÃǾ͵õ½ÁËÁ½¸ö·ÖÀëµÄÔ²¡£

Àý1£º»ùÓÚ¾àÀë±ä»»µÄ·ÖɽÁëͼÏñ·Ö¸î

import numpy as np

import matplotlib.pyplot as plt

from scipy import ndimage as ndi

from skimage import morphology,feature

#´´½¨Á½¸ö´øÓÐÖØµþÔ²µÄͼÏñ

x, y = np.indices((80, 80))

x1, y1, x2, y2 = 28, 28, 44, 52

r1, r2 = 16, 20

mask_circle1 = (x - x1)**2 + (y - y1)**2 < r1**2

mask_circle2 = (x - x2)**2 + (y - y2)**2 < r2**2

image = np.logical_or(mask_circle1, mask_circle2)

#ÏÖÔÚÎÒÃÇÓ÷ÖË®ÁëËã·¨·ÖÀëÁ½¸öÔ²

distance = ndi.distance_transform_edt(image) #¾àÀë±ä»»

local_maxi =feature.peak_local_max(distance, indices=False, footprint=np.ones((3, 3)),

labels=image) #ѰÕÒ·åÖµ

markers = ndi.label(local_maxi)[0] #³õʼ±ê¼Çµã

labels =morphology.watershed(-distance, markers, mask=image) #»ùÓÚ¾àÀë±ä»»µÄ·ÖË®ÁëËã·¨

fig, axes = plt.subplots(nrows=2, ncols=2, figsize=(8, 8))

axes = axes.ravel()

ax0, ax1, ax2, ax3 = axes

ax0.imshow(image, cmap=plt.cm.gray, interpolation='nearest')

ax0.set_title("Original")

ax1.imshow(-distance, cmap=plt.cm.jet, interpolation='nearest')

ax1.set_title("Distance")

ax2.imshow(markers, cmap=plt.cm.spectral, interpolation='nearest')

ax2.set_title("Markers")

ax3.imshow(labels, cmap=plt.cm.spectral, interpolation='nearest')

ax3.set_title("Segmented")

for ax in axes:

ax.axis('off')

fig.tight_layout()

plt.show()

 

·ÖË®ÁëËã·¨Ò²¿ÉÒÔºÍÌݶÈÏà½áºÏ£¬À´ÊµÏÖͼÏñ·Ö¸î¡£Ò»°ãÌݶÈͼÏñÔÚ±ßÔµ´¦ÓнϸߵÄÏñËØÖµ£¬¶øÔÚÆäËüµØ·½ÔòÓнϵ͵ÄÏñËØÖµ£¬ÀíÏëÇé¿ö Ï£¬·ÖɽÁëÇ¡ºÃÔÚ±ßÔµ¡£Òò´Ë£¬ÎÒÃÇ¿ÉÒÔ¸ù¾ÝÌݶÈÀ´Ñ°ÕÒ·ÖɽÁë¡£

Àý2£º»ùÓÚÌݶȵķÖË®ÁëͼÏñ·Ö¸î

import matplotlib.pyplot as plt

from scipy import ndimage as ndi

from skimage import morphology,color,data,filter

image =color.rgb2gray(data.camera())

denoised = filter.rank.median(image, morphology.disk(2)) #¹ýÂËÔëÉù

#½«ÌݶÈÖµµÍÓÚ10µÄ×÷Ϊ¿ªÊ¼±ê¼Çµã

markers = filter.rank.gradient(denoised, morphology.disk(5)) <10

markers = ndi.label(markers)[0]

gradient = filter.rank.gradient(denoised, morphology.disk(2)) #¼ÆËãÌݶÈ

labels =morphology.watershed(gradient, markers, mask=image) #»ùÓÚÌݶȵķÖË®ÁëËã·¨

fig, axes = plt.subplots(nrows=2, ncols=2, figsize=(6, 6))

axes = axes.ravel()

ax0, ax1, ax2, ax3 = axes

ax0.imshow(image, cmap=plt.cm.gray, interpolation='nearest')

ax0.set_title("Original")

ax1.imshow(gradient, cmap=plt.cm.spectral, interpolation='nearest')

ax1.set_title("Gradient")

ax2.imshow(markers, cmap=plt.cm.spectral, interpolation='nearest')

ax2.set_title("Markers")

ax3.imshow(labels, cmap=plt.cm.spectral, interpolation='nearest')

ax3.set_title("Segmented")

for ax in axes:

ax.axis('off')

fig.tight_layout()

plt.show()

 

 

   
3608 ´Îä¯ÀÀ       29
Ïà¹ØÎÄÕÂ

»ùÓÚͼ¾í»ýÍøÂçµÄͼÉî¶Èѧϰ
×Ô¶¯¼ÝÊ»ÖеÄ3DÄ¿±ê¼ì²â
¹¤Òµ»úÆ÷ÈË¿ØÖÆÏµÍ³¼Ü¹¹½éÉÜ
ÏîĿʵս£ºÈçºÎ¹¹½¨ÖªÊ¶Í¼Æ×
 
Ïà¹ØÎĵµ

5GÈ˹¤ÖÇÄÜÎïÁªÍøµÄµäÐÍÓ¦ÓÃ
Éî¶ÈѧϰÔÚ×Ô¶¯¼ÝÊ»ÖеÄÓ¦ÓÃ
ͼÉñ¾­ÍøÂçÔÚ½»²æÑ§¿ÆÁìÓòµÄÓ¦ÓÃÑо¿
ÎÞÈË»úϵͳԭÀí
Ïà¹Ø¿Î³Ì

È˹¤ÖÇÄÜ¡¢»úÆ÷ѧϰ&TensorFlow
»úÆ÷ÈËÈí¼þ¿ª·¢¼¼Êõ
È˹¤ÖÇÄÜ£¬»úÆ÷ѧϰºÍÉî¶Èѧϰ
ͼÏñ´¦ÀíËã·¨·½·¨Óëʵ¼ù