亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

從圖像中提取 N 個補丁

從圖像中提取 N 個補丁

慕的地8271018 2023-10-06 19:19:10
我有一個維度的圖像155 x 240。就像下面這樣:我想提取某些形狀的補丁(25 x 25)。 我不想從整個圖像中修補。我想從圖像的非零(非背景)區域提取 N 個補丁。我怎樣才能做到這一點?任何想法、建議或實施將不勝感激。您可以嘗試使用 Matlab 或 Python。注意: 我生成了一個隨機圖像,以便您可以對其進行處理以進行修補。image_process變量是這段代碼中的圖像。import numpy as npfrom scipy.ndimage.filters import convolveimport matplotlib.pyplot as pltbackground = np.ones((155,240))background[78,120] = 2n_d = 50y,x = np.ogrid[-n_d: n_d+1, -n_d: n_d+1]mask = x**2+y**2 <= n_d**2mask = 254*mask.astype(float)image_process = convolve(background, mask)-sum(sum(mask))+1image_process[image_process==1] = 0image_process[image_process==255] = 1plt.imshow(image_process)
查看完整描述

1 回答

?
縹緲止盈

TA貢獻2041條經驗 獲得超4個贊

假設您要省略的像素值為 0。


在這種情況下,您可以做的是,首先找到非零值的索引,然后在 / 位置對圖像進行切片min以max僅獲得所需的區域,然后簡單地應用extract_patches_2d所需的窗口大小和補丁數量。


例如,考慮到您提供的虛擬圖像:


import numpy as np

from scipy.ndimage.filters import convolve

import matplotlib.pyplot as plt


background = np.ones((155,240))

background[78,120] = 2

n_d = 50

y,x = np.ogrid[-n_d: n_d+1, -n_d: n_d+1]

mask = x**2+y**2 <= n_d**2

mask = 254*mask.astype(float)



image_process = convolve(background, mask)-sum(sum(mask))+1

image_process[image_process==1] = 0

image_process[image_process==255] = 1

plt.figure()

plt.imshow(image_process)

plt.show()


from sklearn.feature_extraction.image import extract_patches_2d

x, y = np.nonzero(image_process)

xl,xr = x.min(),x.max()

yl,yr = y.min(),y.max()

only_desired_area = image_process[xl:xr+1, yl:yr+1]


window_shape = (25, 25)

B = extract_patches_2d(only_desired_area, window_shape, max_patches=100)  # B shape will be (100, 25, 25)

如果繪制它,only_desired_area您將得到以下圖像:

https://img1.sycdn.imooc.com//651feda600019d8a06200457.jpg

這是主要邏輯,如果您希望更緊的邊界,您應該適當調整切片。



查看完整回答
反對 回復 2023-10-06
  • 1 回答
  • 0 關注
  • 121 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號