Lena圖像分解小塊與從小塊合成

      網友投稿 870 2022-05-29

      ?

      01

      背景

      在 2020年人工神經網絡課程第一次作業第八題 中需要對 Lena 圖像使用AutoEncode網絡進行壓縮。將Lena(灰度圖像)拆解成不同尺寸的大小形成訓練壓縮樣本過程;或者從訓練結果重新組合成Lena灰度圖像是實驗的基礎。

      下面給出相關操作的Python程序和相關的結果。

      主要操作包括:

      將512×512的Lena灰度圖片(0 ~ 255)分割成邊長8 ~ 16的圖像塊,并通過行掃描形行向量;

      對圖像進行歸一化,形成數據在 -0.5 ~ 0.5之間的數據;

      將訓練結果恢復到0 ~ 255并組合成灰度圖片,存盤,或者顯示。

      ?

      02

      圖像分割

      從Lena下載Lean灰度(512×512)的圖片數據,存儲在本地目錄下:lean_gray.bmp。文件格式為BMP。

      1.讀取數據分割

      blocksize : 圖像塊的大?。? ~ 32

      image_file :圖像文件

      outdata: 2D-array。每一行是圖像block所形成的一位數據;總行數為block數量;

      數據格式:float: -0.5 ~ 0.5

      def lena2block(blocksize,image_file): img = Image.open(image_file).convert('RGB') imgdata = array(img)[:,:,0].astype(float32) imgheight = imgdata.shape[0] imgwidth = imgdata.shape[1] imgdata = (imgdata - 128) / 256 printf(imgdata.shape) outdata = [] for i in range(0, imgheight, blocksize): for j in range(0, imgwidth, blocksize): blockdata = imgdata[i:i+blocksize, j:j+blocksize].reshape(1, -1) if len(outdata) == 0: outdata = blockdata else: outdata = vstack((outdata, blockdata)) return outdata

      1

      2

      3

      4

      5

      6

      7

      8

      9

      10

      11

      12

      13

      14

      15

      16

      17

      18

      19

      2.測試上述模塊

      下面測試上面的lena2block程序,并將分割成的小圖像塊重新進行顯示的結果。

      tsprefreshimagebuffer(show_id) SHOW_LINES = 16 SHOW_COLS = 16 TEMP_FILE = r'd:\temp.bmp' for i in range(SHOW_LINES): for j in range(SHOW_COLS): blockid = i * 16 + j newimage = Image.fromarray((outdata[blockid].reshape(IMAGE_BLOCK_SIZE, IMAGE_BLOCK_SIZE) * 256 + 128).astype(uint8)) newimage.save(TEMP_FILE) x = j * (IMAGE_BLOCK_SIZE + 2) y = i * (IMAGE_BLOCK_SIZE + 2) tspshowimage(show_id, x, y, x + IMAGE_BLOCK_SIZE, y + IMAGE_BLOCK_SIZE, TEMP_FILE) tsprv()

      1

      2

      3

      4

      5

      6

      7

      8

      9

      10

      11

      12

      13

      14

      15

      16

      17

      ?

      03

      圖像合成

      將前面分割的圖像重新整合成lena圖片圖片。

      1.圖片合成代碼

      def block2lena(blockdata): blocknum = blockdata.shape[0] blocklen = blockdata.shape[1] block_size = int(sqrt(blocklen)) image_block_size = int(sqrt(blocknum)) block_line = [] for i in range(image_block_size): block_row = hstack([b.reshape(block_size, block_size) \ for b in blockdata[i*image_block_size:(i+1)*image_block_size]]) block_line.append(block_row) imagedata = vstack(block_line) imagedata = (imagedata * 256 + 128) imagedata[imagedata < 0] = 0 imagedata[imagedata > 255] = 255 return imagedata.astype(uint8)

      1

      2

      3

      4

      5

      6

      7

      8

      9

      10

      11

      12

      13

      14

      15

      16

      17

      2.測試

      newdata = block2lena(outdata) printf(newdata.shape) newimage = Image.fromarray(newdata) newimage.show()

      1

      2

      3

      4

      為了顯示對于block處理后的效果,下面對于每一塊都將前面一半填充0,然后再合成。

      for b in outdata: b[0:len(b)//2] = 0

      1

      2

      因此顯示的結果如下。

      從上面結果來看,對于每一小塊的處理最終體現在合成后的圖片中。這也說明整個的圖片的分割與合成程序功能正常。這位之后對2020年人工神經網絡課程第一次作業第八題的效果進行評估提供了可視化的子函數。

      ?

      ※ 結論

      對于Lena灰度圖像,通過兩個子函數可以完成對其切分成小塊,然后再合成,這由于2020年人工神經網絡課程第一次作業第八題中的結果進行顯示。便于評估圖像處理結果。

      □ 實驗Python程序

      #!/usr/local/bin/python # -*- coding: gbk -*- #============================================================ # SUBIMAGE.PY -- by Dr. ZhuoQing 2020-11-23 # # Note: #============================================================ from headm import * from PIL import Image #------------------------------------------------------------ lena_gray = r'D:\Temp\lena_gray.bmp' show_id = 6 def lena2block(blocksize,image_file): img = Image.open(image_file).convert('RGB') imgdata = array(img)[:,:,0].astype(float32) imgheight = imgdata.shape[0] imgwidth = imgdata.shape[1] imgdata = (imgdata - 128) / 256 printf(imgdata.shape) outdata = [] for i in range(0, imgheight, blocksize): for j in range(0, imgwidth, blocksize): blockdata = imgdata[i:i+blocksize, j:j+blocksize].reshape(1, -1) if len(outdata) == 0: outdata = blockdata else: outdata = vstack((outdata, blockdata)) return outdata #------------------------------------------------------------ def block2lena(blockdata): blocknum = blockdata.shape[0] blocklen = blockdata.shape[1] block_size = int(sqrt(blocklen)) image_block_size = int(sqrt(blocknum)) block_line = [] for i in range(image_block_size): block_row = hstack([b.reshape(block_size, block_size) \ for b in blockdata[i*image_block_size:(i+1)*image_block_size]]) block_line.append(block_row) imagedata = vstack(block_line) imagedata = (imagedata * 256 + 128) imagedata[imagedata < 0] = 0 imagedata[imagedata > 255] = 255 return imagedata.astype(uint8) #------------------------------------------------------------ IMAGE_BLOCK_SIZE = 32 outdata = lena2block(IMAGE_BLOCK_SIZE, lena_gray) printf(outdata.shape) #------------------------------------------------------------ tsprefreshimagebuffer(show_id) SHOW_LINES = 16 SHOW_COLS = 16 TEMP_FILE = r'd:\temp.bmp' for i in range(SHOW_LINES): for j in range(SHOW_COLS): blockid = i * 16 + j newimage = Image.fromarray((outdata[blockid].reshape(IMAGE_BLOCK_SIZE, IMAGE_BLOCK_SIZE) * 256 + 128).astype(uint8)) newimage.save(TEMP_FILE) x = j * (IMAGE_BLOCK_SIZE + 2) y = i * (IMAGE_BLOCK_SIZE + 2) tspshowimage(show_id, x, y, x + IMAGE_BLOCK_SIZE, y + IMAGE_BLOCK_SIZE, TEMP_FILE) tsprv() #------------------------------------------------------------ for b in outdata: b[0:len(b)//2] = 0 newdata = block2lena(outdata) printf(newdata.shape) newimage = Image.fromarray(newdata) newimage.show() #------------------------------------------------------------ # END OF FILE : SUBIMAGE.PY #============================================================

      1

      2

      3

      4

      5

      6

      7

      8

      9

      10

      11

      12

      13

      14

      15

      16

      17

      18

      19

      20

      21

      22

      23

      24

      25

      26

      27

      28

      29

      30

      Lena圖像分解成小塊與從小塊合成

      31

      32

      33

      34

      35

      36

      37

      38

      39

      40

      41

      42

      43

      44

      45

      46

      47

      48

      49

      50

      51

      52

      53

      54

      55

      56

      57

      58

      59

      60

      61

      62

      63

      64

      65

      66

      67

      68

      69

      70

      71

      72

      73

      74

      75

      76

      77

      78

      79

      80

      81

      82

      83

      84

      85

      86

      87

      88

      89

      90

      91

      Python

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:Tomcat啟用HTTPS協議配置過程
      下一篇:mysql移植到kunpeng平臺
      相關文章
      亚洲资源最新版在线观看| 亚洲国产老鸭窝一区二区三区 | 久久亚洲国产欧洲精品一| 蜜桃传媒一区二区亚洲AV| 亚洲精品国产精品| 亚洲另类自拍丝袜第五页| 亚洲色大情网站www| 亚洲色图激情文学| 亚洲日韩国产精品乱-久| 亚洲乱码中文论理电影| 久久久久se色偷偷亚洲精品av| 亚洲成人黄色在线观看| 亚洲女人影院想要爱| 亚洲国产亚洲片在线观看播放| 亚洲国产成+人+综合| 亚洲H在线播放在线观看H| 亚洲最大无码中文字幕| 亚洲另类自拍丝袜第五页 | 亚洲国产精品一区| 久久久久亚洲精品日久生情| 亚洲春色在线观看| 国产精品亚洲综合五月天| 亚洲午夜理论片在线观看| 亚洲AV无码专区在线观看成人| 精品国产日韩亚洲一区在线| 亚洲成A人片77777国产| 国内精品久久久久久久亚洲| 亚洲人成伊人成综合网久久久| 亚洲精品无码Av人在线观看国产| 亚洲动漫精品无码av天堂| 久久水蜜桃亚洲av无码精品麻豆| 亚洲成a人片在线观看播放| 国产精品亚洲精品| 精品国产日韩亚洲一区在线| 国产精品亚洲精品日韩已方| 亚洲国产精品嫩草影院在线观看| 久久久久久亚洲AV无码专区| 久久精品国产亚洲AV忘忧草18| 亚洲av无码成人影院一区| 亚洲免费一区二区| 亚洲国产成人片在线观看|