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

1Ôª 10Ôª 50Ôª





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



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Model Center   Code  
»áÔ±   
   
 
     
   
 ¶©ÔÄ
  ¾èÖú
pythonͼÏñ´¦Àí½ÏÎªÈ«Ãæ
 
  3414  次浏览      45
 2019-4-18  
 
±à¼­ÍƼö:

±¾ÎÄÀ´×Ôcsdn£¬±¾Õ½²½â²Ù×÷ºÍ´¦ÀíͼÏñµÄ»ù´¡ÖªÊ¶£¬½«Í¨¹ý´óÁ¿Ê¾Àý½éÉÜ´¦ÀíͼÏñËùÐèµÄ Python ¹¤¾ß°ü£¬²¢½éÉÜÓÃÓÚ¶ÁȡͼÏñ¡¢Í¼Ïñת»»ºÍËõ·Å¡¢¼ÆËãµ¼Êý¡¢»­Í¼ºÍ±£´æ½á¹ûµÈµÄ»ù±¾¹¤¾ß¡£ÕâЩ¹¤¾ßµÄʹÓý«¹á´©±¾ÊéµÄÊ£ÓàÕ½ڡ£

µÚ 1 Õ¡¡»ù±¾µÄͼÏñ²Ù×÷ºÍ´¦Àí

1.1¡¡PIL£ºPythonͼÏñ´¦ÀíÀà¿â

PIL£¨Python Imaging Library Python£¬Í¼Ïñ´¦ÀíÀà¿â£©ÌṩÁËͨÓõÄͼÏñ´¦Àí¹¦ÄÜ£¬ÒÔ¼°´óÁ¿ÓÐÓõĻù±¾Í¼Ïñ²Ù×÷£¬±ÈÈçͼÏñËõ·Å¡¢²Ã¼ô¡¢Ðýת¡¢ÑÕɫת»»µÈ¡£PIL ÊÇÃâ·ÑµÄ£¬¿ÉÒÔ´Ó ÏÂÔØ¡£

ÀûÓà PIL Öеĺ¯Êý£¬ÎÒÃÇ¿ÉÒÔ´Ó´ó¶àÊýͼÏñ¸ñʽµÄÎļþÖжÁÈ¡Êý¾Ý£¬È»ºóдÈë×î³£¼ûµÄͼÏñ¸ñʽÎļþÖС£PIL ÖÐ×îÖØÒªµÄÄ£¿éΪ Image¡£Òª¶Áȡһ·ùͼÏñ£¬¿ÉÒÔʹÓãº

from PIL import Image

pil_im = Image.open('empire.jpg')

 

ÉÏÊö´úÂëµÄ·µ»ØÖµ pil_im ÊÇÒ»¸ö PIL ͼÏñ¶ÔÏó¡£

ͼÏñµÄÑÕɫת»»¿ÉÒÔʹÓà convert() ·½·¨À´ÊµÏÖ¡£Òª¶Áȡһ·ùͼÏñ£¬²¢½«Æäת»»³É»Ò¶ÈͼÏñ£¬Ö»ÐèÒª¼ÓÉÏ convert('L')£¬ÈçÏÂËùʾ£º

pil_im = Image.open('empire.jpg').convert('L')

 

ÔÚ PIL ÎĵµÖÐÓÐһЩÀý×Ó£¬²Î¼û ¡£ÕâЩÀý×ÓµÄÊä³ö½á¹ûÈçͼ 1-1 Ëùʾ¡£

ͼ 1-1£ºÓà PIL ´¦ÀíͼÏñµÄÀý×Ó

1.1.1¡¡×ª»»Í¼Ïñ¸ñʽ

ͨ¹ý save() ·½·¨£¬PIL ¿ÉÒÔ½«Í¼Ïñ±£´æ³É¶àÖÖ¸ñʽµÄÎļþ¡£ÏÂÃæµÄÀý×Ó´ÓÎļþÃûÁÐ±í£¨filelist£©ÖжÁÈ¡ËùÓеÄͼÏñÎļþ£¬²¢×ª»»³É JPEG ¸ñʽ£º

from PIL import Image
import os

for infile in filelist:
outfile = os.path.splitext(infile)[0] + ".jpg"
if infile != outfile:
try:
Image.open(infile).save(outfile)
except IOError:
print "cannot convert", infile

 

PIL µÄ open() º¯ÊýÓÃÓÚ´´½¨ PIL ͼÏñ¶ÔÏó£¬save() ·½·¨ÓÃÓÚ±£´æÍ¼Ïñµ½¾ßÓÐÖ¸¶¨ÎļþÃûµÄÎļþ¡£³ýÁ˺ó׺±äΪ¡°.jpg¡±£¬ÉÏÊö´úÂëµÄÐÂÎļþÃûºÍÔ­ÎļþÃûÏàͬ¡£PIL ÊǸö×ã¹»ÖÇÄܵÄÀà¿â£¬¿ÉÒÔ¸ù¾ÝÎļþÀ©Õ¹ÃûÀ´Åж¨Í¼ÏñµÄ¸ñʽ¡£PIL º¯Êý»á½øÐмòµ¥µÄ¼ì²é£¬Èç¹ûÎļþ²»ÊÇ JPEG ¸ñʽ£¬»á×Ô¶¯½«Æäת»»³É JPEG ¸ñʽ£»Èç¹ûת»»Ê§°Ü£¬Ëü»áÔÚ¿ØÖÆÌ¨Êä³öÒ»Ìõ±¨¸æÊ§°ÜµÄÏûÏ¢¡£

±¾Êé»á´¦Àí´óÁ¿Í¼ÏñÁÐ±í¡£ÏÂÃæ½«´´½¨Ò»¸ö°üº¬Îļþ¼ÐÖÐËùÓÐͼÏñÎļþµÄÎļþÃûÁÐ±í¡£Ê×ÏÈн¨Ò»¸öÎļþ£¬ÃüÃûΪ imtools.py£¬À´´æ´¢Ò»Ð©¾­³£Ê¹ÓõÄͼÏñ²Ù×÷£¬È»ºó½«ÏÂÃæµÄº¯ÊýÌí¼Ó½øÈ¥£º

import os
def get_imlist(path):

""" ·µ»ØÄ¿Â¼ÖÐËùÓÐJPG ͼÏñµÄÎļþÃûÁбí"""

return [os.path.join(path,f) for f in os.listdir(path) if f.endswith('.jpg')]

 

ÏÖÔÚ£¬»Øµ½ PIL¡£

1.1.2¡¡´´½¨ËõÂÔͼ

ʹÓà PIL ¿ÉÒԺܷ½±ãµØ´´½¨Í¼ÏñµÄËõÂÔͼ¡£thumbnail() ·½·¨½ÓÊÜÒ»¸öÔª×é²ÎÊý£¨¸Ã²ÎÊýÖ¸¶¨Éú³ÉËõÂÔͼµÄ´óС£©£¬È»ºó½«Í¼Ïñת»»³É·ûºÏÔª×é²ÎÊýÖ¸¶¨´óСµÄËõÂÔͼ¡£ÀýÈ磬´´½¨×±ßΪ 128 ÏñËØµÄËõÂÔͼ£¬¿ÉÒÔʹÓÃÏÂÁÐÃüÁ

pil_im.thumbnail((128,128))

 

1.1.3¡¡¸´ÖƺÍÕ³ÌùͼÏñÇøÓò

ʹÓà crop() ·½·¨¿ÉÒÔ´ÓÒ»·ùͼÏñÖвüôÖ¸¶¨ÇøÓò£º

box = (100,100,400,400)
region = pil_im.crop(box)

 

¸ÃÇøÓòʹÓÃËÄÔª×éÀ´Ö¸¶¨¡£ËÄÔª×éµÄ×ø±êÒÀ´ÎÊÇ£¨×ó£¬ÉÏ£¬ÓÒ£¬Ï£©¡£PIL ÖÐÖ¸¶¨×ø±êϵµÄ×óÉϽÇ×ø±êΪ£¨0£¬0£©¡£ÎÒÃÇ¿ÉÒÔÐýתÉÏÃæ´úÂëÖлñÈ¡µÄÇøÓò£¬È»ºóʹÓà paste() ·½·¨½«¸ÃÇøÓò·Å»ØÈ¥£¬¾ßÌåʵÏÖÈçÏ£º

region = region.transpose(Image.ROTATE_180)
pil_im.paste(region,box)

 

1.1.4¡¡µ÷Õû³ß´çºÍÐýת

Òªµ÷ÕûÒ»·ùͼÏñµÄ³ß´ç£¬ÎÒÃÇ¿ÉÒÔµ÷Óà resize() ·½·¨¡£¸Ã·½·¨µÄ²ÎÊýÊÇÒ»¸öÔª×飬ÓÃÀ´Ö¸¶¨ÐÂͼÏñµÄ´óС£º

out = pil_im.resize((128,128))

 

ÒªÐýתһ·ùͼÏñ£¬¿ÉÒÔʹÓÃÄæÊ±Õ뷽ʽ±íʾÐýת½Ç¶È£¬È»ºóµ÷Óà rotate() ·½·¨£º

out = pil_im.rotate(45)

 

ÉÏÊöÀý×ÓµÄÊä³ö½á¹ûÈçͼ 1-1 Ëùʾ¡£×î×ó¶ËÊÇԭʼͼÏñ£¬È»ºóÊǻҶÈͼÏñ¡¢Õ³ÌùÓÐÐýתºó²Ã¼ôͼÏñµÄԭʼͼÏñ£¬×îºóÊÇËõÂÔͼ¡£

1.2¡¡Matplotlib

ÎÒÃÇ´¦ÀíÊýѧÔËËã¡¢»æÖÆÍ¼±í£¬»òÕßÔÚͼÏñÉÏ»æÖƵ㡢ֱÏߺÍÇúÏßʱ£¬Matplotlib ÊǸöºÜºÃµÄÀà¿â£¬¾ßÓÐ±È PIL ¸üÇ¿´óµÄ»æÍ¼¹¦ÄÜ¡£Matplotlib ¿ÉÒÔ»æÖƳö¸ßÖÊÁ¿µÄͼ±í£¬¾ÍÏñ±¾ÊéÖеÄÐí¶à²åͼһÑù¡£Matplotlib ÖÐµÄ PyLab ½Ó¿Ú°üº¬ºÜ¶à·½±ãÓû§´´½¨Í¼ÏñµÄº¯Êý¡£Matplotlib ÊÇ¿ªÔ´¹¤¾ß£¬¿ÉÒÔ´Ó Ãâ·ÑÏÂÔØ¡£¸ÃÁ´½ÓÖаüº¬·Ç³£Ï꾡µÄʹÓÃ˵Ã÷ºÍ½Ì³Ì¡£ÏÂÃæµÄÀý×ÓչʾÁ˱¾ÊéÖÐÐèҪʹÓõĴ󲿷ֺ¯Êý¡£

1.2.1¡¡»æÖÆÍ¼Ïñ¡¢µãºÍÏß

¾¡¹Ü Matplotlib ¿ÉÒÔ»æÖƳö½ÏºÃµÄÌõÐÎͼ¡¢±ý״ͼ¡¢É¢µãͼµÈ£¬µ«ÊǶÔÓÚ´ó¶àÊý¼ÆËã»úÊÓ¾õÓ¦ÓÃÀ´Ëµ£¬½ö½öÐèÒªÓõ½¼¸¸ö»æÍ¼ÃüÁî¡£×îÖØÒªµÄÊÇ£¬ÎÒÃÇÏëÓõãºÍÏßÀ´±íʾһЩÊÂÎ±ÈÈçÐËȤµã¡¢¶ÔÓ¦µãÒÔ¼°¼ì²â³öµÄÎïÌå¡£ÏÂÃæÊÇÓü¸¸öµãºÍÒ»ÌõÏß»æÖÆÍ¼ÏñµÄÀý×Ó£º


from PIL import Image
from pylab import *

# ¶ÁȡͼÏñµ½Êý×éÖÐ
im = array(Image.open('empire.jpg'))

# »æÖÆÍ¼Ïñ
imshow(im)

# һЩµã
x = [100,100,400,400]
y = [200,500,200,500]

# ʹÓúìÉ«ÐÇ×´±ê¼Ç»æÖƵã
plot(x,y,'r*')

# »æÖÆÁ¬½ÓǰÁ½¸öµãµÄÏß
plot(x[:2],y[:2])

# Ìí¼Ó±êÌ⣬ÏÔʾ»æÖƵÄͼÏñ
title('Plotting: "empire.jpg"')
show()

 

ÉÏÃæµÄ´úÂëÊ×ÏÈ»æÖƳöԭʼͼÏñ£¬È»ºóÔÚ x ºÍ y ÁбíÖиø¶¨µãµÄ x ×ø±êºÍ y ×ø±êÉÏ»æÖƳöºìÉ«ÐÇ×´±ê¼Çµã£¬×îºóÔÚÁ½¸öÁбí±íʾµÄǰÁ½¸öµãÖ®¼ä»æÖÆÒ»ÌõÏ߶Σ¨Ä¬ÈÏΪÀ¶É«£©¡£¸ÃÀý×ӵĻæÖƽá¹ûÈçͼ 1-2 Ëùʾ¡£show() ÃüÁîÊ×ÏÈ´ò¿ªÍ¼ÐÎÓû§½çÃæ£¨GUI£©£¬È»ºóн¨Ò»¸öͼÏñ´°¿Ú¡£¸ÃͼÐÎÓû§½çÃæ»áÑ­»·×è¶Ï½Å±¾£¬È»ºóÔÝÍ££¬Ö±µ½×îºóÒ»¸öͼÏñ´°¿Ú¹Ø±Õ¡£ÔÚÿ¸ö½Å±¾ÀÄãÖ»Äܵ÷ÓÃÒ»´Î show() ÃüÁ¶øÇÒͨ³£ÊÇÔڽű¾µÄ½áβµ÷Óá£×¢Ò⣬ÔÚ PyLab ¿âÖУ¬ÎÒÃÇÔ¼¶¨Í¼ÏñµÄ×óÉϽÇÎª×ø±êÔ­µã¡£

ͼÏñµÄ×ø±êÖáÊÇÒ»¸öºÜÓÐÓõĵ÷ÊÔ¹¤¾ß£»µ«ÊÇ£¬Èç¹ûÄãÏë»æÖÆ³ö½ÏÃÀ¹ÛµÄͼÏñ£¬¼ÓÉÏÏÂÁÐÃüÁî¿ÉÒÔÊ¹×ø±êÖá²»ÏÔʾ£º

axis('off')

 

ÉÏÃæµÄÃüÁ»æÖƳöÈçͼ 1-2 ÓÒ±ßËùʾµÄͼÏñ¡£

ͼ 1-2£ºMatplotlib »æÍ¼Ê¾Àý¡£´øÓÐ×ø±êÖáºÍ²»´ø×ø±êÖáµÄ°üº¬µãºÍÒ»ÌõÏ߶εÄͼÏñ

ÔÚ»æÍ¼Ê±£¬ÓкܶàÑ¡Ïî¿ÉÒÔ¿ØÖÆÍ¼ÏñµÄÑÕÉ«ºÍÑùʽ¡£×îÓÐÓõÄһЩ¶ÌÃüÁîÈç±í 1-1¡¢±í 1-2 ºÍ±í 1-3 Ëùʾ¡£Ê¹Ó÷½·¨¼ûÏÂÃæµÄÀý×Ó£º

plot(x,y) # ĬÈÏΪÀ¶É«ÊµÏß
plot(x,y,'r*') # ºìÉ«ÐÇ×´±ê¼Ç
plot(x,y,'go-') # ´øÓÐԲȦ±ê¼ÇµÄÂÌÏß
plot(x,y,'ks:') # ´øÓÐÕý·½Ðαê¼ÇµÄºÚÉ«ÐéÏß

 

±í1-1£ºÓÃPyLab¿â»æÍ¼µÄ»ù±¾ÑÕÉ«¸ñʽÃüÁî

ÑÕÉ«
'b' À¶É«
'g' ÂÌÉ«
'r' ºìÉ«
'c' ÇàÉ«
'm' Æ·ºì
'y' »ÆÉ«
'k' ºÚÉ«
'w' °×É«

 

±í1-2£ºÓÃPyLab¿â»æÍ¼µÄ»ù±¾ÏßÐ͸ñʽÃüÁî

ÏßÐÍ
'.' ʵÏß
'--' ÐéÏß
':' µãÏß

 

 

±í1-3£ºÓÃPyLab¿â»æÍ¼µÄ»ù±¾»æÖƱê¼Ç¸ñʽÃüÁî

񈬀
'.' µã
'o' ԲȦ
's' Õý·½ÐÎ
'*' ÐÇÐÎ
'+' ¼ÓºÅ
'x' ²æºÅ

 

 

1.2.2¡¡Í¼ÏñÂÖÀªºÍÖ±·½Í¼

ÏÂÃæÀ´¿´Á½¸öÌØ±ðµÄ»æÍ¼Ê¾Àý£ºÍ¼ÏñµÄÂÖÀªºÍÖ±·½Í¼¡£»æÖÆÍ¼ÏñµÄÂÖÀª£¨»òÕ߯äËû¶þάº¯ÊýµÄµÈÂÖÀªÏߣ©ÔÚ¹¤×÷Öзdz£ÓÐÓá£ÒòΪ»æÖÆÂÖÀªÐèÒª¶Ôÿ¸ö×ø±ê [x, y] µÄÏñËØÖµÊ©¼Óͬһ¸öãÐÖµ£¬ËùÒÔÊ×ÏÈÐèÒª½«Í¼Ïñ»Ò¶È»¯£º

from PIL import Image
from pylab import *

# ¶ÁȡͼÏñµ½Êý×éÖÐ
im = array(Image.open('empire.jpg').convert('L'))

# н¨Ò»¸öͼÏñ
figure()
# ²»Ê¹ÓÃÑÕÉ«ÐÅÏ¢
gray()
# ÔÚÔ­µãµÄ×óÉϽÇÏÔʾÂÖÀªÍ¼Ïñ
contour(im, origin='image')
axis('equal')
axis('off')

 

Ïñ֮ǰµÄÀý×ÓÒ»Ñù£¬ÕâÀïÓà PIL µÄ convert() ·½·¨½«Í¼Ïñת»»³É»Ò¶ÈͼÏñ¡£

ͼÏñµÄÖ±·½Í¼ÓÃÀ´±íÕ÷¸ÃͼÏñÏñËØÖµµÄ·Ö²¼Çé¿ö¡£ÓÃÒ»¶¨ÊýÄ¿µÄÐ¡Çø¼ä£¨bin£©À´Ö¸¶¨±íÕ÷ÏñËØÖµµÄ·¶Î§£¬Ã¿¸öÐ¡Çø¼ä»áµÃµ½ÂäÈë¸ÃÐ¡Çø¼ä±íʾ·¶Î§µÄÏñËØÊýÄ¿¡£¸Ã£¨»Ò¶È£©Í¼ÏñµÄÖ±·½Í¼¿ÉÒÔʹÓà hist() º¯Êý»æÖÆ£º

figure()
hist(im.flatten(),128)
show()

 

hist() º¯ÊýµÄµÚ¶þ¸ö²ÎÊýÖ¸¶¨Ð¡Çø¼äµÄÊýÄ¿¡£ÐèҪעÒâµÄÊÇ£¬ÒòΪ hist() Ö»½ÓÊÜһάÊý×é×÷ΪÊäÈ룬ËùÒÔÎÒÃÇÔÚ»æÖÆÍ¼ÏñÖ±·½Í¼Ö®Ç°£¬±ØÐëÏȶÔͼÏñ½øÐÐѹƽ´¦Àí¡£flatten() ·½·¨½«ÈÎÒâÊý×é°´ÕÕÐÐÓÅÏÈ×¼Ôòת»»³ÉһάÊý×顣ͼ 1-3 ΪµÈÂÖÀªÏߺÍÖ±·½Í¼Í¼Ïñ¡£

ͼ 1-3£ºÓà Matplotlib »æÖÆÍ¼ÏñµÈÂÖÀªÏߺÍÖ±·½Í¼

1.2.3¡¡½»»¥Ê½±ê×¢

ÓÐʱÓû§ÐèÒªºÍijЩӦÓý»»¥£¬ÀýÈçÔÚÒ»·ùͼÏñÖбê¼ÇһЩµã£¬»òÕß±êעһЩѵÁ·Êý¾Ý¡£PyLab ¿âÖÐµÄ ginput() º¯Êý¾Í¿ÉÒÔʵÏÖ½»»¥Ê½±ê×¢¡£ÏÂÃæÊÇÒ»¸ö¼ò¶ÌµÄÀý×Ó£º


from PIL import Image
from pylab import *

im = array(Image.open('empire.jpg'))
imshow(im)
print 'Please click 3 points'
x = ginput(3)
print 'you clicked:',x
show()

 

ÉÏÃæµÄ½Å±¾Ê×ÏÈ»æÖÆÒ»·ùͼÏñ£¬È»ºóµÈ´ýÓû§ÔÚ»æÍ¼´°¿ÚµÄͼÏñÇøÓòµã»÷Èý´Î¡£³ÌÐò½«ÕâЩµã»÷µÄ×ø±ê [x, y] ×Ô¶¯±£´æÔÚ x ÁбíÀï¡£

1.3¡¡NumPy

NumPyÊǷdz£ÓÐÃûµÄ Python ¿ÆÑ§¼ÆË㹤¾ß°ü£¬ÆäÖаüº¬ÁË´óÁ¿ÓÐÓõÄ˼Ï룬±ÈÈçÊý×é¶ÔÏó£¨ÓÃÀ´±íʾÏòÁ¿¡¢¾ØÕó¡¢Í¼ÏñµÈ£©ÒÔ¼°ÏßÐÔ´úÊýº¯Êý¡£NumPy ÖеÄÊý×é¶ÔÏ󼸺õ¹á´©ÓÃÓÚ±¾ÊéµÄËùÓÐÀý×ÓÖÐ 1 Êý×é¶ÔÏó¿ÉÒÔ°ïÖúÄãʵÏÖÊý×éÖÐÖØÒªµÄ²Ù×÷£¬±ÈÈç¾ØÕó³Ë»ý¡¢×ªÖᢽⷽ³Ìϵͳ¡¢ÏòÁ¿³Ë»ýºÍ¹éÒ»»¯£¬ÕâΪͼÏñ±äÐΡ¢¶Ô±ä»¯½øÐн¨Ä£¡¢Í¼Ïñ·ÖÀࡢͼÏñ¾ÛÀàµÈÌṩÁË»ù´¡¡£

1PyLab ʵ¼ÊÉϰüº¬ NumPy µÄһЩÄÚÈÝ£¬ÈçÊý×éÀàÐÍ¡£ÕâÒ²ÊÇÎÒÃÇÄܹ»ÔÚ 1.2 ½ÚʹÓÃÊý×éÀàÐ͵ÄÔ­Òò¡£

NumPy ¿ÉÒÔ´Ó Ãâ·ÑÏÂÔØ£¬ÔÚÏß˵Ã÷Îĵµ°üº¬ÁËÄã¿ÉÄÜÓöµ½µÄ´ó¶àÊýÎÊÌâµÄ´ð°¸¡£¹ØÓÚ NumPy µÄ¸ü¶àÄÚÈÝ£¬Çë²Î¿¼¿ªÔ´Êé¼® [24]¡£

1.3.1¡¡Í¼ÏñÊý×é±íʾ

ÔÚÏÈǰµÄÀý×ÓÖУ¬µ±ÔØÈëͼÏñʱ£¬ÎÒÃÇͨ¹ýµ÷Óà array() ·½·¨½«Í¼Ïñת»»³É NumPy µÄÊý×é¶ÔÏ󣬵«µ±Ê±²¢Ã»ÓнøÐÐÏêϸ½éÉÜ¡£NumPy ÖеÄÊý×é¶ÔÏóÊǶàάµÄ£¬¿ÉÒÔÓÃÀ´±íʾÏòÁ¿¡¢¾ØÕóºÍͼÏñ¡£Ò»¸öÊý×é¶ÔÏóºÜÏñÒ»¸öÁÐ±í£¨»òÕßÊÇÁбíµÄÁÐ±í£©£¬µ«ÊÇÊý×éÖÐËùÓеÄÔªËØ±ØÐë¾ßÓÐÏàͬµÄÊý¾ÝÀàÐÍ¡£³ý·Ç´´½¨Êý×é¶ÔÏóʱָ¶¨Êý¾ÝÀàÐÍ£¬·ñÔòÊý¾ÝÀàÐͻᰴÕÕÊý¾ÝµÄÀàÐÍ×Ô¶¯È·¶¨¡£

¶ÔÓÚͼÏñÊý¾Ý£¬ÏÂÃæµÄÀý×Ó²ûÊöÁËÕâÒ»µã£º

im = array(Image.open('empire.jpg'))
print im.shape, im.dtype

im = array(Image.open('empire.jpg').convert('L'),'f')
print im.shape, im.dtype

 

¿ØÖÆÌ¨Êä³ö½á¹ûÈçÏÂËùʾ£º

(800, 569, 3) uint8
(800, 569) float32

 

ÿÐеĵÚÒ»¸öÔª×é±íʾͼÏñÊý×éµÄ´óС£¨ÐС¢ÁС¢ÑÕɫͨµÀ£©£¬½ô½Ó×ŵÄ×Ö·û´®±íʾÊý×éÔªËØµÄÊý¾ÝÀàÐÍ¡£ÒòΪͼÏñͨ³£±»±àÂë³ÉÎÞ·ûºÅ°ËλÕûÊý£¨uint8£©£¬ËùÒÔÔÚµÚÒ»ÖÖÇé¿öÏ£¬ÔØÈëͼÏñ²¢½«Æäת»»µ½Êý×éÖУ¬Êý×éµÄÊý¾ÝÀàÐÍΪ¡°uint8¡±¡£ÔÚµÚ¶þÖÖÇé¿öÏ£¬¶ÔͼÏñ½øÐлҶȻ¯´¦Àí£¬²¢ÇÒÔÚ´´½¨Êý×éʱʹÓöîÍâµÄ²ÎÊý¡°f¡±£»¸Ã²ÎÊý½«Êý¾ÝÀàÐÍת»»Îª¸¡µãÐÍ¡£¹ØÓÚ¸ü¶àÊý¾ÝÀàÐÍÑ¡Ï¿ÉÒԲο¼Í¼Êé [24]¡£×¢Ò⣬ÓÉÓÚ»Ò¶ÈͼÏñûÓÐÑÕÉ«ÐÅÏ¢£¬ËùÒÔÔÚÐÎ×´Ôª×éÖУ¬ËüÖ»ÓÐÁ½¸öÊýÖµ¡£

Êý×éÖеÄÔªËØ¿ÉÒÔʹÓÃϱê·ÃÎÊ¡£Î»ÓÚ×ø±ê i¡¢j£¬ÒÔ¼°ÑÕɫͨµÀ k µÄÏñËØÖµ¿ÉÒÔÏñÏÂÃæÕâÑù·ÃÎÊ£º

value = im[i,j,k]

¶à¸öÊý×éÔªËØ¿ÉÒÔʹÓÃÊý×éÇÐÆ¬·½Ê½·ÃÎÊ¡£ÇÐÆ¬·½Ê½·µ»ØµÄÊÇÒÔÖ¸¶¨¼ä¸ôϱê·ÃÎʸÃÊý×éµÄÔªËØÖµ¡£ÏÂÃæÊÇÓйػҶÈͼÏñµÄһЩÀý×Ó£º


im[i,:] = im[j,:] # ½«µÚ j ÐеÄÊýÖµ¸³Öµ¸øµÚ i ÐÐ
im[:,i] = 100 # ½«µÚ i ÁеÄËùÓÐÊýÖµÉèΪ100
im[:100,:50].sum() # ¼ÆËãǰ100 ÐС¢Ç° 50 ÁÐËùÓÐÊýÖµµÄºÍ
im[50:100,50:100] # 50~100 ÐУ¬50~100 ÁУ¨²»°üÀ¨µÚ 100 ÐÐºÍµÚ 100 ÁУ©
im[i].mean() # µÚ i ÐÐËùÓÐÊýÖµµÄƽ¾ùÖµ
im[:,-1] # ×îºóÒ»ÁÐ
im[-2,:] (or im[-2]) # µ¹ÊýµÚ¶þÐÐ

 

×¢Ò⣬ʾÀý½ö½öʹÓÃÒ»¸öϱê·ÃÎÊÊý×é¡£Èç¹û½öʹÓÃÒ»¸öϱ꣬Ôò¸ÃϱêΪÐÐϱꡣעÒ⣬ÔÚ×îºó¼¸¸öÀý×ÓÖУ¬¸ºÊýÇÐÆ¬±íʾ´Ó×îºóÒ»¸öÔªËØÄæÏò¼ÆÊý¡£ÎÒÃǽ«»áƵ·±µØÊ¹ÓÃÇÐÆ¬¼¼Êõ·ÃÎÊÏñËØÖµ£¬ÕâÒ²ÊÇÒ»¸öºÜÖØÒªµÄ˼Ïë¡£

ÎÒÃÇÓкܶà²Ù×÷ºÍ·½·¨À´´¦ÀíÊý×é¶ÔÏó¡£±¾Ê齫ÔÚʹÓõ½µÄµØ·½ÖðÒ»½éÉÜ¡£Äã¿ÉÒÔ²éÔÄÔÚÏßÎĵµ»òÕß¿ªÔ´Í¼Êé [24] »ñÈ¡¸ü¶àÐÅÏ¢¡£

1.3.2¡¡»Ò¶È±ä»»

½«Í¼Ïñ¶ÁÈë NumPy Êý×é¶ÔÏóºó£¬ÎÒÃÇ¿ÉÒÔ¶ÔËüÃÇÖ´ÐÐÈÎÒâÊýѧ²Ù×÷¡£Ò»¸ö¼òµ¥µÄÀý×Ó¾ÍÊÇͼÏñµÄ»Ò¶È±ä»»¡£¿¼ÂÇÈÎÒ⺯Êý f£¬Ëü½« 0...255 Çø¼ä£¨»òÕß 0...1 Çø¼ä£©Ó³Éäµ½×ÔÉí£¨Òâ˼ÊÇ˵£¬Êä³öÇø¼äµÄ·¶Î§ºÍÊäÈëÇø¼äµÄ·¶Î§Ïàͬ£©¡£ÏÂÃæÊǹØÓڻҶȱ任µÄһЩÀý×Ó£º


from PIL import Image
from numpy import *

im = array(Image.open('empire.jpg').convert('L'))

im2 = 255 - im # ¶ÔͼÏñ½øÐз´Ïà´¦Àí

im3 = (100.0/255) * im + 100 # ½«Í¼ÏñÏñËØÖµ±ä»»µ½100...200 Çø¼ä

im4 = 255.0 * (im/255.0)**2 # ¶ÔͼÏñÏñËØÖµÇ󯽷½ºóµÃµ½µÄͼÏñ

 

µÚÒ»¸öÀý×Ó½«»Ò¶ÈͼÏñ½øÐз´Ïà´¦Àí£»µÚ¶þ¸öÀý×Ó½«Í¼ÏñµÄÏñËØÖµ±ä»»µ½ 100...200 Çø¼ä£»µÚÈý¸öÀý×Ó¶ÔͼÏñʹÓöþ´Îº¯Êý±ä»»£¬Ê¹½Ï°µµÄÏñËØÖµ±äµÃ¸üС¡£Í¼ 1-4 ΪËùʹÓõı任º¯ÊýͼÏñ¡£Í¼ 1-5 ÊÇÊä³öµÄͼÏñ½á¹û¡£Äã¿ÉÒÔʹÓÃÏÂÃæµÄÃüÁî²é¿´Í¼ÏñÖеÄ×îСºÍ×î´óÏñËØÖµ£º

print int(im.min()), int(im.max())

ͼ 1-4£º»Ò¶È±ä»»Ê¾Àý¡£Èý¸öÀý×ÓÖÐËùʹÓú¯ÊýµÄͼÏñ£¬ÆäÖÐÐéÏß±íʾºãµÈ±ä»»

ͼ 1-5£º»Ò¶È±ä»»¡£¶ÔͼÏñÓ¦ÓÃͼ 1-4 Öеĺ¯Êý£ºf(x)=255-x ¶ÔͼÏñ½øÐз´Ïà´¦Àí£¨×󣩣»f(x)=(100/255)x+100 ¶ÔͼÏñ½øÐб任£¨ÖУ©£»f(x)=255(x/255)2 ¶ÔͼÏñ×ö¶þ´Î±ä»»£¨ÓÒ£©

Èç¹ûÊÔ×ŶÔÉÏÃæÀý×Ӳ鿴×îСֵºÍ×î´óÖµ£¬¿ÉÒԵõ½ÏÂÃæµÄÊä³ö½á¹û£º


2 255
0 253
100 200
0 255

 

array() ±ä»»µÄÏà·´²Ù×÷¿ÉÒÔʹÓà PIL µÄ fromarray() º¯ÊýÍê³É£º

pil_im = Image.fromarray(im)

 

Èç¹ûÄãͨ¹ýһЩ²Ù×÷½«¡°uint8¡±Êý¾ÝÀàÐÍת»»ÎªÆäËûÊý¾ÝÀàÐÍ£¬±ÈÈç֮ǰÀý×ÓÖÐµÄ im3 »òÕß im4£¬ÄÇôÔÚ´´½¨ PIL ͼÏñ֮ǰ£¬ÐèÒª½«Êý¾ÝÀàÐÍת»»»ØÀ´£º

pil_im = Image.fromarray(uint8(im))

 

Èç¹ûÄã²¢²»Ê®·ÖÈ·¶¨ÊäÈëÊý¾ÝµÄÀàÐÍ£¬°²È«Æð¼û£¬Ó¦¸ÃÏÈת»»»ØÀ´¡£×¢Ò⣬NumPy ×ÜÊǽ«Êý×éÊý¾ÝÀàÐÍת»»³ÉÄܹ»±íʾÊý¾ÝµÄ¡°×îµÍ¡±Êý¾ÝÀàÐÍ¡£¶Ô¸¡µãÊý×ö³Ë»ý»ò³ý·¨²Ù×÷»áʹÕûÊýÀàÐ͵ÄÊý×é±ä³É¸¡µãÀàÐÍ¡£

1.3.3¡¡Í¼ÏñËõ·Å

NumPy µÄÊý×é¶ÔÏóÊÇÎÒÃÇ´¦ÀíͼÏñºÍÊý¾ÝµÄÖ÷Òª¹¤¾ß¡£ÏëÒª¶ÔͼÏñ½øÐÐËõ·Å´¦ÀíûÓÐÏֳɼòµ¥µÄ·½·¨¡£ÎÒÃÇ¿ÉÒÔʹÓÃ֮ǰ PIL ¶ÔͼÏñ¶ÔÏóת»»µÄ²Ù×÷£¬Ð´Ò»¸ö¼òµ¥µÄÓÃÓÚͼÏñËõ·ÅµÄº¯Êý¡£°ÑÏÂÃæµÄº¯ÊýÌí¼Óµ½ imtool.py ÎļþÀ

def imresize(im,sz):
""" ʹÓÃPIL ¶ÔÏóÖØÐ¶¨ÒåͼÏñÊý×éµÄ´óС"""
pil_im = Image.fromarray(uint8(im))

return array(pil_im.resize(sz))

 

ÎÒÃǽ«»áÔÚ½ÓÏÂÀ´µÄÄÚÈÝÖÐʹÓÃÕâ¸öº¯Êý¡£

1.3.4¡¡Ö±·½Í¼¾ùºâ»¯

ͼÏñ»Ò¶È±ä»»ÖÐÒ»¸ö·Ç³£ÓÐÓõÄÀý×Ó¾ÍÊÇÖ±·½Í¼¾ùºâ»¯¡£Ö±·½Í¼¾ùºâ»¯ÊÇÖ¸½«Ò»·ùͼÏñµÄ»Ò¶ÈÖ±·½Í¼±äƽ£¬Ê¹±ä»»ºóµÄͼÏñÖÐÿ¸ö»Ò¶ÈÖµµÄ·Ö²¼¸ÅÂʶ¼Ïàͬ¡£ÔÚ¶ÔͼÏñ×ö½øÒ»²½´¦Àí֮ǰ£¬Ö±·½Í¼¾ùºâ»¯Í¨³£ÊǶÔͼÏñ»Ò¶ÈÖµ½øÐйéÒ»»¯µÄÒ»¸ö·Ç³£ºÃµÄ·½·¨£¬²¢ÇÒ¿ÉÒÔÔöǿͼÏñµÄ¶Ô±È¶È¡£

ÔÚÕâÖÖÇé¿öÏ£¬Ö±·½Í¼¾ùºâ»¯µÄ±ä»»º¯ÊýÊÇͼÏñÖÐÏñËØÖµµÄÀÛ»ý·Ö²¼º¯Êý£¨cumulative distribution function£¬¼òдΪ cdf£¬½«ÏñËØÖµµÄ·¶Î§Ó³É䵽Ŀ±ê·¶Î§µÄ¹éÒ»»¯²Ù×÷£©¡£

ÏÂÃæµÄº¯ÊýÊÇÖ±·½Í¼¾ùºâ»¯µÄ¾ßÌåʵÏÖ¡£½«Õâ¸öº¯ÊýÌí¼Óµ½ imtool.py À

def histeq(im,nbr_bins=256):
""" ¶ÔÒ»·ù»Ò¶ÈͼÏñ½øÐÐÖ±·½Í¼¾ùºâ»¯"""

# ¼ÆËãͼÏñµÄÖ±·½Í¼
imhist,bins = histogram(im.flatten(),nbr_bins,normed=True)
cdf = imhist.cumsum() # cumulative distribution function
cdf = 255 * cdf / cdf[-1] # ¹éÒ»»¯

# ʹÓÃÀÛ»ý·Ö²¼º¯ÊýµÄÏßÐÔ²åÖµ£¬¼ÆËãеÄÏñËØÖµ
im2 = interp(im.flatten(),bins[:-1],cdf)

return im2.reshape(im.shape), cdf

 

¸Ãº¯ÊýÓÐÁ½¸öÊäÈë²ÎÊý£¬Ò»¸öÊǻҶÈͼÏñ£¬Ò»¸öÊÇÖ±·½Í¼ÖÐʹÓÃÐ¡Çø¼äµÄÊýÄ¿¡£º¯Êý·µ»ØÖ±·½Í¼¾ùºâ»¯ºóµÄͼÏñ£¬ÒÔ¼°ÓÃÀ´×öÏñËØÖµÓ³ÉäµÄÀÛ»ý·Ö²¼º¯Êý¡£×¢Ò⣬º¯ÊýÖÐʹÓõ½ÀÛ»ý·Ö²¼º¯ÊýµÄ×îºóÒ»¸öÔªËØ£¨Ï±êΪ -1£©£¬Ä¿µÄÊǽ«Æä¹éÒ»»¯µ½ 0...1 ·¶Î§¡£Äã¿ÉÒÔÏñÏÂÃæÕâÑùʹÓøú¯Êý£º


from PIL import Image
from numpy import *

im = array(Image.open('AquaTermi_lowcontrast.jpg').convert('L'))
im2,cdf = imtools.histeq(im)

 

ͼ 1-6 ºÍͼ 1-7 ΪÉÏÃæÖ±·½Í¼¾ùºâ»¯Àý×ӵĽá¹û¡£ÉÏÃæÒ»ÐÐÏÔʾµÄ·Ö±ðÊÇÖ±·½Í¼¾ùºâ»¯Ö®Ç°ºÍÖ®ºóµÄ»Ò¶ÈÖ±·½Í¼£¬ÒÔ¼°ÀÛ»ý¸ÅÂÊ·Ö²¼º¯ÊýÓ³ÉäͼÏñ¡£¿ÉÒÔ¿´µ½£¬Ö±·½Í¼¾ùºâ»¯ºóͼÏñµÄ¶Ô±È¶ÈÔöÇ¿ÁË£¬Ô­ÏÈͼÏñ»ÒÉ«ÇøÓòµÄϸ½Ú±äµÃÇåÎú¡£

ͼ 1-6£ºÖ±·½Í¼¾ùºâ»¯Ê¾Àý¡£×ó²àΪԭʼͼÏñºÍÖ±·½Í¼£¬ÖмäͼΪ»Ò¶È±ä»»º¯Êý£¬ÓÒ²àΪֱ·½Í¼¾ùºâ»¯ºóµÄͼÏñºÍÏàÓ¦Ö±·½Í¼

ͼ 1-7£ºÖ±·½Í¼¾ùºâ»¯Ê¾Àý¡£×ó²àΪԭʼͼÏñºÍÖ±·½Í¼£¬ÖмäͼΪ»Ò¶È±ä»»º¯Êý£¬ÓÒ²àΪֱ·½Í¼¾ùºâ»¯ºóµÄͼÏñºÍÏàÓ¦Ö±·½Í¼

1.3.5¡¡Í¼Ïñƽ¾ù

ͼÏñƽ¾ù²Ù×÷ÊǼõÉÙͼÏñÔëÉùµÄÒ»ÖÖ¼òµ¥·½Ê½£¬Í¨³£ÓÃÓÚÒÕÊõÌØÐ§¡£ÎÒÃÇ¿ÉÒÔ¼òµ¥µØ´ÓͼÏñÁбíÖмÆËã³öÒ»·ùƽ¾ùͼÏñ¡£¼ÙÉèËùÓеÄͼÏñ¾ßÓÐÏàͬµÄ´óС£¬ÎÒÃÇ¿ÉÒÔ½«ÕâЩͼÏñ¼òµ¥µØÏà¼Ó£¬È»ºó³ýÒÔͼÏñµÄÊýÄ¿£¬À´¼ÆËãÆ½¾ùͼÏñ¡£ÏÂÃæµÄº¯Êý¿ÉÒÔÓÃÓÚ¼ÆËãÆ½¾ùͼÏñ£¬½«ÆäÌí¼Óµ½ imtool.py ÎļþÀ


def compute_average(imlist):
""" ¼ÆËãͼÏñÁбíµÄƽ¾ùͼÏñ"""

# ´ò¿ªµÚÒ»·ùͼÏñ£¬½«Æä´æ´¢ÔÚ¸¡µãÐÍÊý×éÖÐ
averageim = array(Image.open(imlist[0]), 'f')

for imname in imlist[1:]:
try:
averageim += array(Image.open(imname))
except:
print imname + '...skipped'
averageim /= len(imlist)

# ·µ»Øuint8 ÀàÐÍµÄÆ½¾ùͼÏñ
return array(averageim, 'uint8')

 

¸Ãº¯Êý°üÀ¨Ò»Ð©»ù±¾µÄÒì³£´¦Àí¼¼ÇÉ£¬¿ÉÒÔ×Ô¶¯Ìø¹ý²»ÄÜ´ò¿ªµÄͼÏñ¡£ÎÒÃÇ»¹¿ÉÒÔʹÓà mean() º¯Êý¼ÆËãÆ½¾ùͼÏñ¡£mean() º¯ÊýÐèÒª½«ËùÓеÄͼÏñ¶Ñ»ýµ½Ò»¸öÊý×éÖУ»Ò²¾ÍÊÇ˵£¬Èç¹ûÓкܶàͼÏñ£¬¸Ã´¦Àí·½Ê½ÐèÒªÕ¼ÓúܶàÄÚ´æ¡£ÎÒÃǽ«»áÔÚÏÂÒ»½ÚÖÐʹÓøú¯Êý¡£

1.3.6¡¡Í¼ÏñµÄÖ÷³É·Ö·ÖÎö£¨PCA£©

PCA£¨Principal Component Analysis£¬Ö÷³É·Ö·ÖÎö£©ÊÇÒ»¸ö·Ç³£ÓÐÓõĽµÎ¬¼¼ÇÉ¡£Ëü¿ÉÒÔÔÚʹÓþ¡¿ÉÄÜÉÙάÊýµÄǰÌáÏ£¬¾¡Á¿¶àµØ±£³ÖѵÁ·Êý¾ÝµÄÐÅÏ¢£¬ÔÚ´ËÒâÒåÉÏÊÇÒ»¸ö×î¼Ñ¼¼ÇÉ¡£¼´Ê¹ÊÇÒ»·ù 100¡Á100 ÏñËØµÄС»Ò¶ÈͼÏñ£¬Ò²ÓÐ 10 000 ά£¬¿ÉÒÔ¿´³É 10 000 ά¿Õ¼äÖеÄÒ»¸öµã¡£Ò»Õ×ÏñËØµÄͼÏñ¾ßÓаÙÍòά¡£ÓÉÓÚͼÏñ¾ßÓкܸߵÄάÊý£¬ÔÚÐí¶à¼ÆËã»úÊÓ¾õÓ¦ÓÃÖУ¬ÎÒÃǾ­³£Ê¹ÓýµÎ¬²Ù×÷¡£PCA ²úÉúµÄͶӰ¾ØÕó¿ÉÒÔ±»ÊÓΪ½«Ô­Ê¼×ø±ê±ä»»µ½ÏÖÓеÄ×ø±êϵ£¬×ø±êϵÖеĸ÷¸ö×ø±ê°´ÕÕÖØÒªÐԵݼõÅÅÁС£

ΪÁ˶ÔͼÏñÊý¾Ý½øÐÐ PCA ±ä»»£¬Í¼ÏñÐèҪת»»³ÉһάÏòÁ¿±íʾ¡£ÎÒÃÇ¿ÉÒÔʹÓà NumPy Àà¿âÖÐµÄ flatten() ·½·¨½øÐб任¡£

½«±äƽµÄͼÏñ¶Ñ»ýÆðÀ´£¬ÎÒÃÇ¿ÉÒԵõ½Ò»¸ö¾ØÕ󣬾ØÕóµÄÒ»Ðбíʾһ·ùͼÏñ¡£ÔÚ¼ÆËãÖ÷·½Ïò֮ǰ£¬ËùÓеÄÐÐͼÏñ°´ÕÕÆ½¾ùͼÏñ½øÐÐÁËÖÐÐÄ»¯¡£ÎÒÃÇͨ³£Ê¹Óà SVD£¨Singular Value Decomposition£¬ÆæÒìÖµ·Ö½â£©·½·¨À´¼ÆËãÖ÷³É·Ö£»µ«µ±¾ØÕóµÄάÊýºÜ´óʱ£¬SVD µÄ¼ÆËã·Ç³£Âý£¬ËùÒÔ´Ëʱͨ³£²»Ê¹Óà SVD ·Ö½â¡£ÏÂÃæ¾ÍÊÇ PCA ²Ù×÷µÄ´úÂ룺

from PIL import Image
from numpy import *

def pca(X):
""" Ö÷³É·Ö·ÖÎö£º
ÊäÈ룺¾ØÕóX £¬ÆäÖиþØÕóÖд洢ѵÁ·Êý¾Ý£¬Ã¿Ò»ÐÐΪһÌõѵÁ·Êý¾Ý
·µ»Ø£ºÍ¶Ó°¾ØÕ󣨰´ÕÕά¶ÈµÄÖØÒªÐÔÅÅÐò£©¡¢·½²îºÍ¾ùÖµ"""

# »ñȡάÊý
num_data,dim = X.shape

# Êý¾ÝÖÐÐÄ»¯
mean_X = X.mean(axis=0)
X = X - mean_X

if dim>num_data:
# PCA- ʹÓýôÖ¼¼ÇÉ
M = dot(X,X.T) # Э·½²î¾ØÕó
e,EV = linalg.eigh(M) # ÌØÕ÷ÖµºÍÌØÕ÷ÏòÁ¿
tmp = dot(X.T,EV).T # Õâ¾ÍÊǽôÖ¼¼ÇÉ
V = tmp[::-1] # ÓÉÓÚ×îºóµÄÌØÕ÷ÏòÁ¿ÊÇÎÒÃÇËùÐèÒªµÄ£¬ËùÒÔÐèÒª½«ÆäÄæ×ª
S = sqrt(e)[::-1] # ÓÉÓÚÌØÕ÷ÖµÊǰ´ÕÕµÝÔö˳ÐòÅÅÁеģ¬ËùÒÔÐèÒª½«ÆäÄæ×ª
for i in range(V.shape[1]):
V[:,i] /= S
else:
# PCA- ʹÓÃSVD ·½·¨
U,S,V = linalg.svd(X)
V = V[:num_data] # ½ö½ö·µ»ØÇ°nun_data άµÄÊý¾Ý²ÅºÏÀí

# ·µ»ØÍ¶Ó°¾ØÕó¡¢·½²îºÍ¾ùÖµ
return V,S,mean_X

 

¸Ãº¯ÊýÊ×ÏÈͨ¹ý¼õȥÿһάµÄ¾ùÖµ½«Êý¾ÝÖÐÐÄ»¯£¬È»ºó¼ÆËãЭ·½²î¾ØÕó¶ÔÓ¦×î´óÌØÕ÷ÖµµÄÌØÕ÷ÏòÁ¿£¬´Ëʱ¿ÉÒÔʹÓüòÃ÷µÄ¼¼ÇÉ»òÕß SVD ·Ö½â¡£ÕâÀïÎÒÃÇʹÓÃÁË range() º¯Êý£¬¸Ãº¯ÊýµÄÊäÈë²ÎÊýΪһ¸öÕûÊý n£¬º¯Êý·µ»ØÕûÊý 0...(n-1) µÄÒ»¸öÁÐ±í¡£ÄãÒ²¿ÉÒÔʹÓà arange() º¯ÊýÀ´·µ»ØÒ»¸öÊý×飬»òÕßʹÓà xrange() º¯Êý·µ»ØÒ»¸ö²úÉúÆ÷£¨¿ÉÄÜ»áÌáÉýËÙ¶È£©¡£ÎÒÃÇÔÚ±¾ÊéÖйᴩʹÓà range() º¯Êý¡£

Èç¹ûÊý¾Ý¸öÊýСÓÚÏòÁ¿µÄάÊý£¬ÎÒÃDz»Óà SVD ·Ö½â£¬¶øÊǼÆËãάÊý¸üСµÄЭ·½²î¾ØÕó XXT µÄÌØÕ÷ÏòÁ¿¡£Í¨¹ý½ö¼ÆËã¶ÔӦǰ k£¨k ÊǽµÎ¬ºóµÄάÊý£©×î´óÌØÕ÷ÖµµÄÌØÕ÷ÏòÁ¿£¬¿ÉÒÔʹÉÏÃæµÄ PCA ²Ù×÷¸ü¿ì¡£ÓÉÓÚÆª·ùËùÏÞ£¬ÓÐÐËȤµÄ¶ÁÕß¿ÉÒÔ×ÔÐÐ̽Ë÷¡£¾ØÕó V µÄÿÐÐÏòÁ¿¶¼ÊÇÕý½»µÄ£¬²¢ÇÒ°üº¬ÁËѵÁ·Êý¾Ý·½²îÒÀ´Î¼õÉÙµÄ×ø±ê·½Ïò¡£

ÎÒÃǽÓÏÂÀ´¶Ô×ÖÌåͼÏñ½øÐÐ PCA ±ä»»¡£fontimages.zip Îļþ°üº¬²ÉÓò»Í¬×ÖÌåµÄ×Ö·û a µÄËõÂÔͼ¡£ËùÓÐµÄ 2359 ÖÖ×ÖÌå¿ÉÒÔÃâ·ÑÏÂÔØ 2¡£¼Ù¶¨ÕâЩͼÏñµÄÃû³Æ±£´æÔÚÁбí imlist ÖУ¬¸ú֮ǰµÄ´úÂëÒ»Æð±£´æ´«ÔÚ pca.py ÎļþÖУ¬ÎÒÃÇ¿ÉÒÔʹÓÃÏÂÃæµÄ½Å±¾¼ÆËãͼÏñµÄÖ÷³É·Ö£º

2Ãâ·Ñ×ÖÌåͼÏñ¿âÓÉ Martin Solli ÊÕ¼¯²¢ÉÏ´«£¨http://webstaff.itn.liu.se/~marso/£©¡£


from PIL import Image
from numpy import *
from pylab import *
import pca

im = array(Image.open(imlist[0])) # ´ò¿ªÒ»·ùͼÏñ£¬»ñÈ¡Æä´óС
m,n = im.shape[0:2] # »ñȡͼÏñµÄ´óС
imnbr = len(imlist) # »ñȡͼÏñµÄÊýÄ¿

# ´´½¨¾ØÕ󣬱£´æËùÓÐѹƽºóµÄͼÏñÊý¾Ý
immatrix = array([array(Image.open(im)).flatten()
for im in imlist],'f')

# Ö´ÐÐ PCA ²Ù×÷
V,S,immean = pca.pca(immatrix)

# ÏÔʾһЩͼÏñ£¨¾ùֵͼÏñºÍǰ 7 ¸öģʽ£©
figure()
gray()
subplot(2,4,1)
imshow(immean.reshape(m,n))
for i in range(7):
subplot(2,4,i+2)
imshow(V[i].reshape(m,n))


 

×¢Ò⣬ͼÏñÐèÒª´Óһά±íÊ¾ÖØÐÂת»»³É¶þάͼÏñ£»¿ÉÒÔʹÓà reshape() º¯Êý¡£Èçͼ 1-8 Ëùʾ£¬ÔËÐиÃÀý×Ó»áÔÚÒ»¸ö»æÍ¼´°¿ÚÖÐÏÔʾ 8 ¸öͼÏñ¡£ÕâÀïÎÒÃÇʹÓÃÁË PyLab ¿âµÄ subplot() º¯ÊýÔÚÒ»¸ö´°¿ÚÖзÅÖöà¸öͼÏñ¡£

ͼ 1-8£ºÆ½¾ùͼÏñ£¨×óÉÏ£©ºÍǰ 7 ¸öģʽ£¨¾ßÓÐ×î´ó·½²îµÄ·½Ïòģʽ£©

1.3.7¡¡Ê¹ÓÃpickleÄ£¿é

Èç¹ûÏëÒª±£´æÒ»Ð©½á¹û»òÕßÊý¾ÝÒÔ·½±ãºóÐøÊ¹Óã¬Python ÖÐµÄ pickle Ä£¿é·Ç³£ÓÐÓá£pickle Ä£¿é¿ÉÒÔ½ÓÊܼ¸ºõËùÓÐµÄ Python ¶ÔÏ󣬲¢ÇÒ½«Æäת»»³É×Ö·û´®±íʾ£¬¸Ã¹ý³Ì½Ð×ö·â×°£¨pickling£©¡£´Ó×Ö·û´®±íʾÖÐÖØ¹¹¸Ã¶ÔÏ󣬳ÆÎª²ð·â£¨unpickling£©¡£ÕâЩ×Ö·û´®±íʾ¿ÉÒÔ·½±ãµØ´æ´¢ºÍ´«Êä¡£

ÎÒÃÇÀ´¿´Ò»¸öÀý×Ó¡£¼ÙÉèÏëÒª±£´æÉÏÒ»½Ú×ÖÌåͼÏñµÄƽ¾ùͼÏñºÍÖ÷³É·Ö£¬¿ÉÒÔÕâÑùÀ´Íê³É£º


# ±£´æ¾ùÖµºÍÖ÷³É·ÖÊý¾Ý
f = open('font_pca_modes.pkl', 'wb')
pickle.dump(immean,f)
pickle.dump(V,f)
f.close()

 

ÔÚÉÏÊöÀý×ÓÖУ¬Ðí¶à¶ÔÏó¿ÉÒÔ±£´æµ½Í¬Ò»¸öÎļþÖС£pickle Ä£¿éÖÐÓкܶ಻ͬµÄЭÒé¿ÉÒÔÉú³É .pkl Îļþ£»Èç¹û²»È·¶¨µÄ»°£¬×îºÃÒÔ¶þ½øÖÆÎļþµÄÐÎʽ¶ÁÈ¡ºÍдÈë¡£ÔÚÆäËû Python »á»°ÖÐÔØÈëÊý¾Ý£¬Ö»ÐèÒªÈçÏÂʹÓà load() ·½·¨£º

# ÔØÈë¾ùÖµºÍÖ÷³É·ÖÊý¾Ý
f = open('font_pca_modes.pkl', 'rb')
immean = pickle.load(f)
V = pickle.load(f)
f.close()

 

×¢Òâ£¬ÔØÈë¶ÔÏóµÄ˳Ðò±ØÐëºÍÏÈǰ±£´æµÄÒ»Ñù¡£Python ÖÐÓиöÓà C ÓïÑÔдµÄÓÅ»¯°æ±¾£¬½Ð×ö cpickle Ä£¿é£¬¸ÃÄ£¿éºÍ±ê×¼ pickle Ä£¿éÍêÈ«¼æÈÝ¡£¹ØÓÚ pickle Ä£¿éµÄ¸ü¶àÄÚÈÝ£¬²Î¼û pickle Ä£¿éÎĵµÒ³ ¡£

ÔÚ±¾Êé½ÓÏÂÀ´µÄÕ½ÚÖУ¬ÎÒÃǽ«Ê¹Óà with Óï¾ä´¦ÀíÎļþµÄ¶Áд²Ù×÷¡£ÕâÊÇ Python 2.5 ÒýÈëµÄ˼Ï룬¿ÉÒÔ×Ô¶¯´ò¿ªºÍ¹Ø±ÕÎļþ£¨¼´Ê¹ÔÚÎļþ´ò¿ªÊ±·¢Éú´íÎ󣩡£ÏÂÃæµÄÀý×ÓʹÓà with() À´ÊµÏÖ±£´æºÍÔØÈë²Ù×÷£º

# ´ò¿ªÎļþ²¢±£´æ
with open('font_pca_modes.pkl', 'wb') as f:
pickle.dump(immean,f)
pickle.dump(V,f)

 

ºÍ

# ´ò¿ªÎļþ²¢ÔØÈë
with open('font_pca_modes.pkl', 'rb') as f:
immean = pickle.load(f)
V = pickle.load(f)

 

 

ÉÏÃæµÄÀý×ÓÕ§¿´ÆðÀ´¿ÉÄÜºÜÆæ¹Ö£¬µ« with() ȷʵÊǸöºÜÓÐÓõÄ˼Ïë¡£Èç¹ûÄ㲻ϲ»¶Ëü£¬¿ÉÒÔʹÓÃ֮ǰµÄ open ºÍ closeº¯Êý¡£

×÷Ϊ pickle µÄÒ»ÖÖÌæ´ú·½Ê½£¬NumPy ¾ßÓжÁдÎı¾ÎļþµÄ¼òµ¥º¯Êý¡£Èç¹ûÊý¾ÝÖв»°üº¬¸´ÔÓµÄÊý¾Ý½á¹¹£¬±ÈÈçÔÚÒ»·ùͼÏñÉϵã»÷µÄµãÁÐ±í£¬NumPy µÄ¶Áдº¯Êý»áºÜÓÐÓᣱ£´æÒ»¸öÊý×é x µ½ÎļþÖУ¬¿ÉÒÔʹÓãº

savetxt('test.txt',x,'%i')

×îºóÒ»¸ö²ÎÊý±íʾӦ¸ÃʹÓÃÕûÊý¸ñʽ¡£ÀàËÆµØ£¬¶ÁÈ¡¿ÉÒÔʹÓãº

x = loadtxt('test.txt')

 

Äã¿ÉÒÔ´ÓÔÚÏßÎĵµ Á˽â¸ü¶àÄÚÈÝ¡£

×îºó£¬NumPy ÓÐרÃÅÓÃÓÚ±£´æºÍÔØÈëÊý×éµÄº¯Êý¡£Äã¿ÉÒÔÔÚÉÏÃæµÄÔÚÏßÎĵµÀï²é¿´¹ØÓÚ save() ºÍ load() µÄ¸ü¶àÄÚÈÝ¡£

1.4¡¡SciPy

SciPy Êǽ¨Á¢ÔÚ NumPy »ù´¡ÉÏ£¬ÓÃÓÚÊýÖµÔËËãµÄ¿ªÔ´¹¤¾ß°ü¡£SciPy ÌṩºÜ¶à¸ßЧµÄ²Ù×÷£¬¿ÉÒÔʵÏÖÊýÖµ»ý·Ö¡¢ÓÅ»¯¡¢Í³¼Æ¡¢ÐźŴ¦Àí£¬ÒÔ¼°¶ÔÎÒÃÇÀ´Ëµ×îÖØÒªµÄͼÏñ´¦Àí¹¦ÄÜ¡£½ÓÏÂÀ´£¬±¾½Ú»á½éÉÜ SciPy ÖдóÁ¿ÓÐÓõÄÄ£¿é¡£SciPy ÊǸö¿ªÔ´¹¤¾ß°ü. ÏÂÔØ¡£

1.4.1¡¡Í¼ÏñÄ£ºý

ͼÏñµÄ¸ß˹ģºýÊǷdz£¾­µäµÄͼÏñ¾í»ýÀý×Ó¡£±¾ÖÊÉÏ£¬Í¼ÏñÄ£ºý¾ÍÊǽ«£¨»Ò¶È£©Í¼Ïñ I ºÍÒ»¸ö¸ß˹ºË½øÐоí»ý²Ù×÷£º

I¦Ò = I*G¦Ò

ÆäÖÐ * ±íʾ¾í»ý²Ù×÷£»G¦Ò ÊDZê×¼²îΪ ¦Ò µÄ¶þά¸ß˹ºË£¬¶¨ÒåΪ :

¸ß˹ģºýͨ³£ÊÇÆäËûͼÏñ´¦Àí²Ù×÷µÄÒ»²¿·Ö£¬±ÈÈçͼÏñ²åÖµ²Ù×÷¡¢ÐËȤµã¼ÆËãÒÔ¼°ºÜ¶àÆäËûÓ¦Óá£

SciPy ÓÐÓÃÀ´×öÂ˲¨²Ù×÷µÄ scipy.ndimage.filters Ä£¿é¡£¸ÃÄ£¿éʹÓÿìËÙһά·ÖÀëµÄ·½Ê½À´¼ÆËã¾í»ý¡£Äã¿ÉÒÔÏñÏÂÃæÕâÑùÀ´Ê¹ÓÃËü£º

from PIL import Image
from numpy import *
from scipy.ndimage import filters

im = array(Image.open('empire.jpg').convert('L'))
im2 = filters.gaussian_filter(im,5)

 

ÉÏÃæ guassian_filter() º¯ÊýµÄ×îºóÒ»¸ö²ÎÊý±íʾ±ê×¼²î¡£

ͼ 1-9 ÏÔʾÁËËæ×Å ¦Ò µÄÔö¼Ó£¬Ò»·ùͼÏñ±»Ä£ºýµÄ³Ì¶È¡£¦Ò Ô½´ó£¬´¦ÀíºóµÄͼÏñϸ½Ú¶ªÊ§Ô½¶à¡£Èç¹û´òËãÄ£ºýÒ»·ù²ÊɫͼÏñ£¬Ö»Ðè¼òµ¥µØ¶Ôÿһ¸öÑÕɫͨµÀ½øÐиß˹ģºý£º

im = array(Image.open('empire.jpg'))
im2 = zeros(im.shape)
for i in range(3):
im2[:,:,i] = filters.gaussian_filter(im[:,:,i],5)
im2 = uint8(im2)

 

ÔÚÉÏÃæµÄ½Å±¾ÖУ¬×îºó²¢²»×ÜÊÇÐèÒª½«Í¼Ïñת»»³É uint8 ¸ñʽ£¬ÕâÀïÖ»Êǽ«ÏñËØÖµÓðËλÀ´±íʾ¡£ÎÒÃÇÒ²¿ÉÒÔʹÓãº

im2 = array(im2,'uint8')

 

À´Íê³Éת»»¡£

¹ØÓÚ¸ÃÄ£¿é¸ü¶àµÄÄÚÈÝÒÔ¼°²»Í¬²ÎÊýµÄÑ¡Ôñ£¬Çë²é¿´ ÉÏ SciPy ÎĵµÖÐµÄ scipy.ndimage ²¿·Ö¡£

ͼ 1-9£ºÊ¹Óà scipy.ndimage.filters Ä£¿é½øÐиß˹ģºý£º£¨a£©Ô­Ê¼»Ò¶ÈͼÏñ£»£¨b£©Ê¹Óà ¦Ò=2 µÄ¸ß˹Â˲¨Æ÷£»£¨c£©Ê¹Óà ¦Ò=5 µÄ¸ß˹Â˲¨Æ÷£»£¨d£©Ê¹Óà ¦Ò=10 µÄ¸ß˹Â˲¨Æ÷

1.4.2¡¡Í¼Ïñµ¼Êý

Õû±¾ÊéÖпÉÒÔ¿´µ½£¬ÔںܶàÓ¦ÓÃÖÐͼÏñÇ¿¶ÈµÄ±ä»¯Çé¿öÊǷdz£ÖØÒªµÄÐÅÏ¢¡£Ç¿¶ÈµÄ±ä»¯¿ÉÒÔÓûҶÈͼÏñ I£¨¶ÔÓÚ²ÊɫͼÏñ£¬Í¨³£¶Ôÿ¸öÑÕɫͨµÀ·Ö±ð¼ÆËãµ¼Êý£©µÄ x ºÍ y ·½Ïòµ¼Êý Ix ºÍ Iy ½øÐÐÃèÊö¡£

ͼÏñµÄÌݶÈÏòÁ¿Îª¨ŒI = [Ix, Iy]T¡£ÌݶÈÓÐÁ½¸öÖØÒªµÄÊôÐÔ£¬Ò»ÊÇÌݶȵĴóС£º

ËüÃèÊöÁËͼÏñÇ¿¶È±ä»¯µÄÇ¿Èõ£¬Ò»ÊÇÌݶȵĽǶȣº

¦Á=arctan2(Iy, Ix)

ÃèÊöÁËͼÏñÖÐÔÚÿ¸öµã£¨ÏñËØ£©ÉÏÇ¿¶È±ä»¯×î´óµÄ·½Ïò¡£NumPy ÖÐµÄ arctan2() º¯Êý·µ»Ø»¡¶È±íʾµÄÓзûºÅ½Ç¶È£¬½Ç¶ÈµÄ±ä»¯Çø¼äΪ -¦Ð...¦Ð¡£

ÎÒÃÇ¿ÉÒÔÓÃÀëÉ¢½üËÆµÄ·½Ê½À´¼ÆËãͼÏñµÄµ¼Êý¡£Í¼Ïñµ¼Êý´ó¶àÊý¿ÉÒÔͨ¹ý¾í»ý¼òµ¥µØÊµÏÖ£º

 

¶ÔÓÚ Dx ºÍ Dy£¬Í¨³£Ñ¡Ôñ Prewitt Â˲¨Æ÷£º

»òÕß Sobel Â˲¨Æ÷£º

ÕâЩµ¼ÊýÂ˲¨Æ÷¿ÉÒÔʹÓà scipy.ndimage.filters Ä£¿éµÄ±ê×¼¾í»ý²Ù×÷À´¼òµ¥µØÊµÏÖ£¬ÀýÈ磺


from PIL import Image
from numpy import *
from scipy.ndimage import filters

im = array(Image.open('empire.jpg').convert('L'))

# Sobel µ¼ÊýÂ˲¨Æ÷
imx = zeros(im.shape)
filters.sobel(im,1,imx)

imy = zeros(im.shape)
filters.sobel(im,0,imy)

magnitude = sqrt(imx**2+imy**2)

 

ÉÏÃæµÄ½Å±¾Ê¹Óà Sobel Â˲¨Æ÷À´¼ÆËã x ºÍ y µÄ·½Ïòµ¼Êý£¬ÒÔ¼°ÌݶȴóС¡£sobel() º¯ÊýµÄµÚ¶þ¸ö²ÎÊý±íʾѡÔñ x »òÕß y ·½Ïòµ¼Êý£¬µÚÈý¸ö²ÎÊý±£´æÊä³öµÄ±äÁ¿¡£Í¼ 1-10 ÏÔʾÁËÓà Sobel Â˲¨Æ÷¼ÆËã³öµÄµ¼ÊýͼÏñ¡£ÔÚÁ½¸öµ¼ÊýͼÏñÖУ¬Õýµ¼ÊýÏÔʾΪÁÁµÄÏñËØ£¬¸ºµ¼ÊýÏÔʾΪ°µµÄÏñËØ¡£»ÒÉ«ÇøÓò±íʾµ¼ÊýµÄÖµ½Ó½üÓÚÁã¡£

ͼ 1-10£ºÊ¹Óà Sobel µ¼ÊýÂ˲¨Æ÷¼ÆËãµ¼ÊýͼÏñ£º£¨a£©Ô­Ê¼»Ò¶ÈͼÏñ£»£¨b£©x µ¼ÊýͼÏñ£»£¨c£©y µ¼ÊýͼÏñ£»£¨d£©ÌݶȴóСͼÏñ

ÉÏÊö¼ÆËãͼÏñµ¼ÊýµÄ·½·¨ÓÐһЩȱÏÝ£ºÔڸ÷½·¨ÖУ¬Â˲¨Æ÷µÄ³ß¶ÈÐèÒªËæ×ÅͼÏñ·Ö±æÂʵı仯¶ø±ä»¯¡£ÎªÁËÔÚͼÏñÔëÉù·½Ãæ¸üÎȽ¡£¬ÒÔ¼°ÔÚÈÎÒâ³ß¶ÈÉϼÆËãµ¼Êý£¬ÎÒÃÇ¿ÉÒÔʹÓøß˹µ¼ÊýÂ˲¨Æ÷£º

ÆäÖУ¬G¦ÒxºÍ G¦Òy ±íʾ G¦Ò ÔÚ x ºÍ y ·½ÏòÉϵĵ¼Êý£¬G¦Ò Ϊ±ê×¼²îΪ ¦Ò µÄ¸ß˹º¯Êý¡£

ÎÒÃÇ֮ǰÓÃÓÚÄ£ºýµÄ filters.gaussian_filter() º¯Êý¿ÉÒÔ½ÓÊܶîÍâµÄ²ÎÊý£¬ÓÃÀ´¼ÆËã¸ß˹µ¼Êý¡£¿ÉÒÔ¼òµ¥µØ°´ÕÕÏÂÃæµÄ·½Ê½À´´¦Àí£º

sigma = 5 # ±ê×¼²î

imx = zeros(im.shape)
filters.gaussian_filter(im, (sigma,sigma), (0,1), imx)

imy = zeros(im.shape)
filters.gaussian_filter(im, (sigma,sigma), (1,0), imy)

 

¸Ãº¯ÊýµÄµÚÈý¸ö²ÎÊýÖ¸¶¨¶Ôÿ¸ö·½Ïò¼ÆËãÄÄÖÖÀàÐ͵ĵ¼Êý£¬µÚ¶þ¸ö²ÎÊýΪʹÓõıê×¼²î¡£Äã¿ÉÒԲ鿴ÏàÓ¦ÎĵµÁ˽âÏêÇ顣ͼ 1-11 ÏÔʾÁ˲»Í¬³ß¶Èϵĵ¼ÊýͼÏñºÍÌݶȴóС¡£Äã¿ÉÒÔºÍͼ 1-9 ÖÐ×öÏàͬ³ß¶ÈÄ£ºýµÄͼÏñ×ö±È½Ï¡£

ͼ 1-11£ºÊ¹Óøß˹µ¼Êý¼ÆËãͼÏñµ¼Êý£ºx µ¼ÊýͼÏñ£¨ÉÏ£©£¬y µ¼ÊýͼÏñ£¨ÖУ©£¬ÒÔ¼°ÌݶȴóСͼÏñ£¨Ï£©£»£¨a£©ÎªÔ­Ê¼»Ò¶ÈͼÏñ£¬£¨b£©ÎªÊ¹Óà ¦Ò=2 µÄ¸ß˹µ¼ÊýÂ˲¨Æ÷´¦ÀíºóµÄͼÏñ£¬£¨c£©ÎªÊ¹ Óà ¦Ò=5 µÄ¸ß˹µ¼ÊýÂ˲¨Æ÷´¦ÀíºóµÄͼÏñ£¬£¨d£©ÎªÊ¹Óà ¦Ò=10 µÄ¸ß˹µ¼ÊýÂ˲¨Æ÷´¦ÀíºóµÄͼÏñ

1.4.3¡¡ÐÎ̬ѧ£º¶ÔÏó¼ÆÊý

ÐÎ̬ѧ£¨»òÊýѧÐÎ̬ѧ£©ÊǶÈÁ¿ºÍ·ÖÎö»ù±¾ÐÎ×´µÄͼÏñ´¦Àí·½·¨µÄ»ù±¾¿ò¼ÜÓ뼯ºÏ¡£ÐÎ̬ѧͨ³£ÓÃÓÚ´¦Àí¶þֵͼÏñ£¬µ«ÊÇÒ²Äܹ»ÓÃÓÚ»Ò¶ÈͼÏñ¡£¶þֵͼÏñÊÇָͼÏñµÄÿ¸öÏñËØÖ»ÄÜÈ¡Á½¸öÖµ£¬Í¨³£ÊÇ 0 ºÍ 1¡£¶þֵͼÏñͨ³£ÊÇ£¬ÔÚ¼ÆËãÎïÌåµÄÊýÄ¿£¬»òÕß¶ÈÁ¿Æä´óСʱ£¬¶ÔÒ»·ùͼÏñ½øÐÐãÐÖµ»¯ºóµÄ½á¹û¡£Äã¿ÉÒÔ´Ó ´óÌåÁ˽âÐÎ̬ѧ¼°Æä´¦ÀíͼÏñµÄ·½Ê½¡£

scipy.ndimage ÖÐµÄ morphology Ä£¿é¿ÉÒÔʵÏÖÐÎ̬ѧ²Ù×÷¡£Äã¿ÉÒÔʹÓà scipy.ndimage ÖÐµÄ measurements Ä£¿éÀ´ÊµÏÖ¶þֵͼÏñµÄ¼ÆÊýºÍ¶ÈÁ¿¹¦ÄÜ¡£ÏÂÃæÍ¨¹ýÒ»¸ö¼òµ¥µÄÀý×Ó½éÉÜÈçºÎʹÓÃËüÃÇ¡£

¿¼ÂÇÔÚͼ 1-12a3 ÀïµÄ¶þֵͼÏñ£¬¼ÆËã¸ÃͼÏñÖеĶÔÏó¸öÊý¿ÉÒÔͨ¹ýÏÂÃæµÄ½Å±¾ÊµÏÖ£º

3Õâ¸öͼÏñʵ¼ÊÉÏÊÇͼÏñ¡°·Ö¸î¡±ºóµÄ½á¹û¡£Èç¹ûÄãÏëÖªµÀ¸ÃͼÏñÊÇÈçºÎ´´½¨µÄ£¬¿ÉÒԲ鿴 9.3 ½Ú¡£


from scipy.ndimage import measurements,morphology

# ÔØÈëͼÏñ£¬È»ºóʹÓÃãÐÖµ»¯²Ù×÷£¬ÒÔ±£Ö¤´¦ÀíµÄͼÏñΪ¶þֵͼÏñ
im = array(Image.open('houses.png').convert('L'))
im = 1*(im<128)

labels, nbr_objects = measurements.label(im)
print "Number of objects:", nbr_objects

 

ÉÏÃæµÄ½Å±¾Ê×ÏÈÔØÈë¸ÃͼÏñ£¬Í¨¹ýãÐÖµ»¯·½Ê½À´È·±£¸ÃͼÏñÊǶþֵͼÏñ¡£Í¨¹ýºÍ 1 Ïà³Ë£¬½Å±¾½«²¼¶ûÊý×éת»»³É¶þ½øÖƱíʾ¡£È»ºó£¬ÎÒÃÇʹÓà label() º¯ÊýѰÕÒµ¥¸öµÄÎïÌ壬²¢ÇÒ°´ÕÕËüÃÇÊôÓÚÄĸö¶ÔÏó½«ÕûÊý±êÇ©¸øÏñËØ¸³Öµ¡£Í¼ 1-12b ÊÇlabels Êý×éµÄͼÏñ¡£Í¼ÏñµÄ»Ò¶ÈÖµ±íʾ¶ÔÏóµÄ±êÇ©¡£¿ÉÒÔ¿´µ½£¬ÔÚһЩ¶ÔÏóÖ®¼äÓÐһЩСµÄÁ¬½Ó¡£½øÐжþ½øÖÆ¿ª£¨binary open£©²Ù×÷£¬ÎÒÃÇ¿ÉÒÔ½«ÆäÒÆ³ý£º


# ÐÎ̬ѧ¿ª²Ù×÷¸üºÃµØ·ÖÀë¸÷¸ö¶ÔÏó
im_open = morphology.binary_opening(im,ones((9,5)),iterations=2)

labels_open, nbr_objects_open = measurements.label(im_open)
print "Number of objects:", nbr_objects_open

 

binary_opening() º¯ÊýµÄµÚ¶þ¸ö²ÎÊýÖ¸¶¨Ò»¸öÊý×é½á¹¹ÔªËØ¡£¸ÃÊý×é±íʾÒÔÒ»¸öÏñËØÎªÖÐÐÄʱ£¬Ê¹ÓÃÄÄЩÏàÁÚÏñËØ¡£ÔÚÕâÖÖÇé¿öÏ£¬ÎÒÃÇÔÚ y ·½ÏòÉÏʹÓà 9 ¸öÏñËØ£¨ÉÏÃæ 4 ¸öÏñËØ¡¢ÏñËØ±¾Éí¡¢ÏÂÃæ 4 ¸öÏñËØ£©£¬ÔÚ x ·½ÏòÉÏʹÓà 5 ¸öÏñËØ¡£Äã¿ÉÒÔÖ¸¶¨ÈÎÒâÊý×éΪ½á¹¹ÔªËØ£¬Êý×éÖеķÇÁãÔªËØ¾ö¶¨Ê¹ÓÃÄÄЩÏàÁÚÏñËØ¡£²ÎÊý iterations ¾ö¶¨Ö´ÐиòÙ×÷µÄ´ÎÊý¡£Äã¿ÉÒÔ³¢ÊÔʹÓò»Í¬µÄµü´ú´ÎÊý iterations Öµ£¬¿´Ò»Ï¶ÔÏóµÄÊýÄ¿ÈçºÎ±ä»¯¡£Äã¿ÉÒÔÔÚͼ 1-12c Óëͼ 1-12d Öв鿴¾­¹ý¿ª²Ù×÷ºóµÄͼÏñ£¬ÒÔ¼°ÏàÓ¦µÄ±êǩͼÏñ¡£ÕýÈçÄãÏëÏóµÄÒ»Ñù£¬binary_closing() º¯ÊýʵÏÖÏà·´µÄ²Ù×÷¡£ÎÒÃǽ«¸Ãº¯ÊýºÍÔÚmorphology ºÍ measurements Ä£¿éÖÐµÄÆäËûº¯ÊýµÄÓ÷¨Áô×÷Á·Ï°¡£Äã¿ÉÒÔ´Ó scipy.ndimage Ä£¿éÎĵµ ÖÐÁË½â¹ØÓÚÕâЩº¯ÊýµÄ¸ü¶à֪ʶ¡£

ͼ 1-12£ºÐÎ̬ѧʾÀý¡£Ê¹ÓöþÖµ¿ª²Ù×÷½«¶ÔÏó·Ö¿ª£¬È»ºó¼ÆËãÎïÌåµÄÊýÄ¿£º£¨a£©ÎªÔ­Ê¼¶þֵͼÏñ£»£¨b£©Îª¶ÔӦԭʼͼÏñµÄ±êǩͼÏñ£¬ÆäÖлҶÈÖµ±íʾÎïÌåµÄ±êÇ©£»£¨c£©ÎªÊ¹Óÿª²Ù×÷ºóµÄ¶þֵͼÏñ£»£¨d£©Îª¿ª²Ù×÷ºóͼÏñµÄ±êǩͼÏñ

1.4.4¡¡Ò»Ð©ÓÐÓõÄSciPyÄ£¿é

SciPy Öаüº¬Ò»Ð©ÓÃÓÚÊäÈëºÍÊä³öµÄʵÓÃÄ£¿é¡£ÏÂÃæ½éÉÜÆäÖÐÁ½¸öÄ£¿é£ºio ºÍ misc¡£

¶Áд.matÎļþ

Èç¹ûÄãÓÐһЩÊý¾Ý£¬»òÕßÔÚÍøÉÏÏÂÔØµ½Ò»Ð©ÓÐȤµÄÊý¾Ý¼¯£¬ÕâЩÊý¾ÝÒÔ Matlab µÄ .mat Îļþ¸ñʽ´æ´¢£¬ÄÇô¿ÉÒÔʹÓà scipy.io Ä£¿é½øÐжÁÈ¡¡£

data = scipy.io.loadmat('test.mat')

 

ÉÏÃæ´úÂëÖУ¬data ¶ÔÏó°üº¬Ò»¸ö×ֵ䣬×ÖµäÖеļü¶ÔÓ¦ÓÚ±£´æÔÚԭʼ .mat ÎļþÖеıäÁ¿Ãû¡£ÓÉÓÚÕâЩ±äÁ¿ÊÇÊý×é¸ñʽµÄ£¬Òò´Ë¿ÉÒԺܷ½±ãµØ±£´æµ½ .mat ÎļþÖС£Äã½öÐè´´½¨Ò»¸ö×ֵ䣨ÆäÖÐÒª°üº¬ÄãÏëÒª±£´æµÄËùÓбäÁ¿£©£¬È»ºóʹÓà savemat() º¯Êý£º

data = {}
data['x'] = x
scipy.io.savemat('test.mat',data)

 

ÒòΪÉÏÃæµÄ½Å±¾±£´æµÄÊÇÊý×é x£¬ËùÒÔµ±¶ÁÈëµ½ Matlab ÖÐʱ£¬±äÁ¿µÄÃû×ÖÈÔΪ x¡£¹ØÓÚ scipy.io Ä£¿éµÄ¸ü¶àÄÚÈÝ£¬Çë²Î¼ûÔÚÏßÎĵµ ¡£

ÒÔͼÏñÐÎʽ±£´æÊý×é

ÒòΪÎÒÃÇÐèÒª¶ÔͼÏñ½øÐвÙ×÷£¬²¢ÇÒÐèҪʹÓÃÊý×é¶ÔÏóÀ´×öÔËË㣬ËùÒÔ½«Êý×éÖ±½Ó±£´æÎªÍ¼ÏñÎļþ 4 ·Ç³£ÓÐÓᣱ¾ÊéÖеĺܶàͼÏñ¶¼ÊÇÕâÑùµÄ´´½¨µÄ¡£

imsave() º¯Êý¿ÉÒÔ´Ó scipy.misc Ä£¿éÖÐÔØÈë¡£Òª½«Êý×é im ±£´æµ½ÎļþÖУ¬¿ÉÒÔʹÓÃÏÂÃæµÄÃüÁ


from scipy.misc import imsave
imsave('test.jpg',im)

 

scipy.misc Ä£¿éͬÑù°üº¬ÁËÖøÃûµÄ Lena ²âÊÔͼÏñ£º

lena = scipy.misc.lena()

 

¸Ã½Å±¾·µ»ØÒ»¸ö 512¡Á512 µÄ»Ò¶ÈͼÏñÊý×é¡£

4ËùÓÐ Pylab ͼ¾ù¿É±£´æÎª¶àÖÖͼÏñ¸ñʽ£¬·½·¨Êǵã»÷ͼÏñ´°¿ÚÖеġ°±£´æ¡±°´Å¥¡£

1.5¡¡¸ß¼¶Ê¾Àý£ºÍ¼ÏñÈ¥Ôë

ÎÒÃÇͨ¹ýÒ»¸ö·Ç³£ÊµÓõÄÀý×Ó¡ª¡ªÍ¼ÏñµÄÈ¥Ô롪¡ªÀ´½áÊø±¾Õ¡£Í¼ÏñÈ¥ÔëÊÇÔÚÈ¥³ýͼÏñÔëÉùµÄͬʱ£¬¾¡¿ÉÄܵر£ÁôͼÏñϸ½ÚºÍ½á¹¹µÄ´¦Àí¼¼Êõ¡£ÎÒÃÇÕâÀïʹÓà ROF£¨Rudin-Osher-Fatemi£©È¥ÔëÄ£ÐÍ¡£¸ÃÄ£ÐÍ×îÔç³öÏÖÔÚÎÄÏ× [28] ÖС£Í¼ÏñÈ¥Ôë¶ÔÓںܶàÓ¦ÓÃÀ´Ëµ¶¼·Ç³£ÖØÒª£»ÕâЩӦÓ÷¶Î§ºÜ¹ã£¬Ð¡µ½ÈÃÄãµÄ¼ÙÆÚÕÕÆ¬¿´ÆðÀ´¸üƯÁÁ£¬´óµ½Ìá¸ßÎÀÐÇͼÏñµÄÖÊÁ¿¡£ROF Ä£Ð;ßÓкܺõÄÐÔÖÊ£ºÊ¹´¦ÀíºóµÄͼÏñ¸üƽ»¬£¬Í¬Ê±±£³ÖͼÏñ±ßÔµºÍ½á¹¹ÐÅÏ¢¡£

ROF Ä£Ð͵ÄÊýѧ»ù´¡ºÍ´¦Àí¼¼Çɷdz£¸ßÉ²»ÔÚ±¾Êé½²Êö·¶Î§Ö®ÄÚ¡£ÔÚ½²ÊöÈçºÎ»ùÓÚ Chambolle Ìá³öµÄËã·¨ [5] ʵÏÖ ROF Çó½âÆ÷֮ǰ£¬±¾ÊéÊ×ÏȼòÒª½éÉÜһϠROF Ä£ÐÍ¡£

Ò»·ù£¨»Ò¶È£©Í¼Ïñ I µÄÈ«±ä²î£¨Total Variation£¬TV£©¶¨ÒåΪÌݶȷ¶ÊýÖ®ºÍ¡£ÔÚÁ¬Ðø±íʾµÄÇé¿öÏ£¬È«±ä²î±íʾΪ£º

 £¨1.1£©

ÔÚÀëÉ¢±íʾµÄÇé¿öÏ£¬È«±ä²î±íʾΪ£º

 

 

ÆäÖУ¬ÉÏÃæµÄʽ×ÓÊÇÔÚËùÓÐͼÏñ×ø±ê x=[x, y] ÉÏÈ¡ºÍ¡£

ÔÚ Chambolle Ìá³öµÄ ROF Ä£ÐÍÀĿ±êº¯ÊýΪѰÕÒ½µÔëºóµÄͼÏñ U£¬Ê¹ÏÂʽ×îС£º

 

ÆäÖз¶Êý ||I-U|| ÊÇÈ¥ÔëºóͼÏñ U ºÍԭʼͼÏñ I ²îÒìµÄ¶ÈÁ¿¡£Ò²¾ÍÊÇ˵£¬±¾ÖÊÉϸÃÄ£ÐÍʹȥÔëºóµÄͼÏñÏñËØÖµ¡°Æ½Ì¹¡±±ä»¯£¬µ«ÊÇÔÚͼÏñÇøÓòµÄ±ßÔµÉÏ£¬ÔÊÐíÈ¥ÔëºóµÄͼÏñÏñËØÖµ¡°ÌøÔ¾¡±±ä»¯¡£

°´ÕÕÂÛÎÄ [5] ÖеÄËã·¨£¬ÎÒÃÇ¿ÉÒÔ°´ÕÕÏÂÃæµÄ´úÂëʵÏÖ ROF Ä£ÐÍÈ¥Ô룺

from numpy import *

def denoise(im,U_init,tolerance=0.1,tau=0.125,tv_weight=100):
""" ʹÓÃA. Chambolle£¨2005£©ÔÚ¹«Ê½£¨11£©ÖеļÆËã²½ÖèʵÏÖRudin-Osher-Fatemi£¨ROF£©È¥ÔëÄ£ÐÍ
ÊäÈ룺º¬ÓÐÔëÉùµÄÊäÈëͼÏñ£¨»Ò¶ÈͼÏñ£©¡¢U µÄ³õʼֵ¡¢TV ÕýÔòÏîȨֵ¡¢²½³¤¡¢Í£ÒµÌõ¼þ
Êä³ö£ºÈ¥ÔëºÍÈ¥³ýÎÆÀíºóµÄͼÏñ¡¢ÎÆÀí²ÐÁô"""

m,n = im.shape # ÔëÉùͼÏñµÄ´óС

# ³õʼ»¯
U = U_init
Px = im # ¶ÔżÓòµÄx ·ÖÁ¿
Py = im # ¶ÔżÓòµÄy ·ÖÁ¿
error = 1

while (error > tolerance):
Uold = U

# ԭʼ±äÁ¿µÄÌݶÈ
GradUx = roll(U,-1,axis=1)-U # ±äÁ¿U ÌݶȵÄx ·ÖÁ¿
GradUy = roll(U,-1,axis=0)-U # ±äÁ¿U ÌݶȵÄy ·ÖÁ¿

# ¸üÐ¶Ôż±äÁ¿
PxNew = Px + (tau/tv_weight)*GradUx
PyNew = Py + (tau/tv_weight)*GradUy
NormNew = maximum(1,sqrt(PxNew**2+PyNew**2))

Px = PxNew/NormNew # ¸üÐÂx ·ÖÁ¿£¨¶Ôż£©
Py = PyNew/NormNew # ¸üÐÂy ·ÖÁ¿£¨¶Ôż£©

# ¸üÐÂԭʼ±äÁ¿
RxPx = roll(Px,1,axis=1) # ¶Ôx ·ÖÁ¿½øÐÐÏòÓÒx ÖáÆ½ÒÆ
RyPy = roll(Py,1,axis=0) # ¶Ôy ·ÖÁ¿½øÐÐÏòÓÒy ÖáÆ½ÒÆ

DivP = (Px-RxPx)+(Py-RyPy) # ¶ÔżÓòµÄÉ¢¶È
U = im + tv_weight*DivP # ¸üÐÂԭʼ±äÁ¿

# ¸üÐÂÎó²î
error = linalg.norm(U-Uold)/sqrt(n*m);

return U,

 

   
3414 ´Îä¯ÀÀ       45
Ïà¹ØÎÄÕÂ

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

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

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