日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

Python实现im2col和col2im函数

發布時間:2025/3/20 python 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Python实现im2col和col2im函数 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

今天來說說im2col和col2im函數,這是MATLAB中兩個內置函數,經常用于數字圖像處理中。

一般來說:

  • 如果將圖像分割成塊的時候用的im2col參數為’distinct’,那么用col2im函數時參數也是’distinct’,即可將轉換后的數組復原。

  • 如果將圖像分割成塊的時候用的im2col參數為’sliding’,我目前還不知道MATLAB中使用內置函數是如何復原的。

今天,來看看Python中是如何實現這兩個函數的(sliding類型)。

  • 對于im2col的實現,我們沿著原始矩陣逐行計算,將得到的新的子矩陣展開成列,放置在列塊矩陣中。
  • 對于col2im的實現,我們沿著列塊矩陣逐行計算,將得到的行展成子矩陣,然后將子矩陣放置在最終結果對應的位置(每次當前值進行相加),同時記錄每個位置的值放置的次數。最后,將當前位置的值除以放置的次數,即可得到結果(原始矩陣)。
def im2col(mtx, block_size):mtx_shape = mtx.shapesx = mtx_shape[0] - block_size[0] + 1sy = mtx_shape[1] - block_size[1] + 1# 如果設A為m×n的,對于[p q]的塊劃分,最后矩陣的行數為p×q,列數為(m?p+1)×(n?q+1)。result = np.empty((block_size[0] * block_size[1], sx * sy))# 沿著行移動,所以先保持列(i)不動,沿著行(j)走for i in range(sy):for j in range(sx):result[:, i * sx + j] = mtx[j:j + block_size[0], i:i + block_size[1]].ravel(order='F')return resultdef col2im(mtx, image_size, block_size):p, q = block_sizesx = image_size[0] - p + 1sy = image_size[1] - q + 1result = np.zeros(image_size)weight = np.zeros(image_size) # weight記錄每個單元格的數字重復加了多少遍col = 0# 沿著行移動,所以先保持列(i)不動,沿著行(j)走for i in range(sy):for j in range(sx):result[j:j + p, i:i + q] += mtx[:, col].reshape(block_size, order='F')weight[j:j + p, i:i + q] += np.ones(block_size)col += 1return result / weight

測試代碼:

''' 遇到問題沒人解答?小編創建了一個Python學習交流QQ群:778463939 尋找有志同道合的小伙伴,互幫互助,群里還有不錯的視頻學習教程和PDF電子書! ''' if __name__ == '__main__':mtx = np.around(np.random.rand(5, 5) * 100)print('原始矩陣:')print(mtx)a1 = im2col(mtx, (2, 3))print('im2col(分塊大小2x3):')print(a1)b1 = col2im(a1, (5, 5), (2, 3))print('col2im復原:')print(b1)a2 = im2col(mtx, (3, 3))print('im2col(分塊大小3x3):')print(a2)b2 = col2im(a2, (5, 5), (3, 3))print('col2im復原:')print(b2)

運行結果:

原始矩陣: [[ 48. 38. 38. 59. 38.][ 38. 11. 25. 52. 44.][ 60. 69. 49. 93. 66.][ 88. 8. 47. 14. 47.][ 96. 37. 56. 86. 54.]] im2col(分塊大小2x3): [[ 48. 38. 60. 88. 38. 11. 69. 8. 38. 25. 49. 47.][ 38. 60. 88. 96. 11. 69. 8. 37. 25. 49. 47. 56.][ 38. 11. 69. 8. 38. 25. 49. 47. 59. 52. 93. 14.][ 11. 69. 8. 37. 25. 49. 47. 56. 52. 93. 14. 86.][ 38. 25. 49. 47. 59. 52. 93. 14. 38. 44. 66. 47.][ 25. 49. 47. 56. 52. 93. 14. 86. 44. 66. 47. 54.]] col2im復原: [[ 48. 38. 38. 59. 38.][ 38. 11. 25. 52. 44.][ 60. 69. 49. 93. 66.][ 88. 8. 47. 14. 47.][ 96. 37. 56. 86. 54.]] im2col(分塊大小3x3): [[ 48. 38. 60. 38. 11. 69. 38. 25. 49.][ 38. 60. 88. 11. 69. 8. 25. 49. 47.][ 60. 88. 96. 69. 8. 37. 49. 47. 56.][ 38. 11. 69. 38. 25. 49. 59. 52. 93.][ 11. 69. 8. 25. 49. 47. 52. 93. 14.][ 69. 8. 37. 49. 47. 56. 93. 14. 86.][ 38. 25. 49. 59. 52. 93. 38. 44. 66.][ 25. 49. 47. 52. 93. 14. 44. 66. 47.][ 49. 47. 56. 93. 14. 86. 66. 47. 54.]] col2im復原: [[ 48. 38. 38. 59. 38.][ 38. 11. 25. 52. 44.][ 60. 69. 49. 93. 66.][ 88. 8. 47. 14. 47.][ 96. 37. 56. 86. 54.]]

總結

以上是生活随笔為你收集整理的Python实现im2col和col2im函数的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。