マスクされたイメージがあり、そのイメージのマスクされたピクセルを別の配列の値で置き換えようとしています。私は、forループのネストされたを使用しています:配列内のセルを置換するためにネストされたforループ
import scipy.ndimage as ndi
import matplotlib.pyplot as plt
import numpy as np
# Generate random image and mask
np.random.seed(seed=5) # To use the same random numbers
h, w = 10, 10
mask = np.random.randint(2, size=(h, w)) # Generate a h x w array of
# random integers from 0 - 1
img = np.random.rand(h, w) # Generate a h x w array of
# random floats
img_masked = np.where(mask, img, np.nan) # Mask the img array and replace
# invalid values with nan's
# Use generic filter to compute nan-excluding median of masked image
size = 3
img_masked_median = ndi.generic_filter(img_masked, np.nanmedian, size=size)
new_img = np.ones_like(img_masked)
# Use a for loop to look at each pixel in the masked, unfiltered image
height, width = img_masked.shape
for y in range(height):
for x in range(width):
if img_masked[x, y] != []:
new_img[x, y] = img[x, y]
else:
new_img[x, y] = img_masked_median[x, y]
# Plot results in 4x4 grid
fig, ax = plt.subplots(nrows=2, ncols=2)
ax[0,0].imshow(img)
ax[0,0].set_title('img')
ax[0,1].imshow(img_masked_median)
ax[0,1].set_title('img_masked_median')
ax[1,0].imshow(img_masked)
ax[1,0].set_title('img_masked')
ax[1,1].imshow(new_img)
ax[1,1].set_title('new_img')
plt.show()
フィルタが正常に動作し、今私はちょうどimg_masked_medianからの対応するピクセルとIMGの任意のマスクされたピクセルを交換したいです。 現時点では、ループは単にimg_masked_medianのコピーを生成します。私は
if img_masked[x, y] != np.nan:
するライン24の状態を変更する場合は、今では、IMGのコピーを生成します。
forループがピクセルを正しく置き換えないのはなぜですか?