Member 14178080 Ответов: 1

Как удалить точки из массива с помощью цикла for?


У меня есть набор изображений в массиве numpy. После некоторой обработки и применения порога я превратил их в изображения, которые имеют либо значение 0, либо 1 в каждой координате xy. Я хочу использовать цикл for и ненулевое значение, чтобы превратить координаты xy исходного изображения, которые не находятся в ненулевом массиве, в ноль и оставить пиксели в ненулевом массиве с их первоначальной интенсивностью. Я полный нуб в программировании, и мне дали эту задачу.

Это то, что у меня есть до сих пор, но последняя часть не работает:

<pre>
import cv2
# Taking the first image of the data
image = series_copy2[0,:,:]

# Mean total background of the image
print('Mean total background = ' +str(np.mean(image)) + ' counts.')



# Threshold for background removal
threshold =30



# Setting all pixels below a threshold to zero to remove the background
image[image[:,:] < threshold] = 0
image[image[:,:]>threshold]=1

# Plotting the result for checking
fig = plt.figure(figsize=(10,10))
ax = fig.add_subplot(111)
data = image
plt.tight_layout()
im = plt.imshow(data, interpolation = 'nearest')

np.transpose(np.nonzero(data))

nz_arrays=np.transpose(np.nonzero(data))

########################################this doesn't work
for x in data[:,:]:
    if data[data[:,:] not in nz_arrays]:
        data[:,:]=0
##############################################

# Plotting the result for checking
fig = plt.figure(figsize=(10,10))
ax = fig.add_subplot(111)
data = image
plt.tight_layout()
im = plt.imshow(data, interpolation = 'nearest')



What I want the code to do is to compare the original and the "binary" image and put a zero where the binary image has a zero and leave the original image as it is where the binary image has a 1. I hope this helps


Что я уже пробовал:

Я нуб и мне дали это задание в университете

Gerry Schmitz

Вам придется долго ждать ответа. Лучше сделайте себе блок-схему или что-нибудь в этом роде.

1 Ответов

Рейтинг:
2

Member 14178080

На самом деле я решил ее по-другому.
Я сделал пустой массив и использовал координаты, чтобы просто поместить значения в новый массив. Если кто-то заинтересован, я размещаю код ниже:

<pre lang="Python"><pre>##########################################

import cv2
# Taking the first image of the data
image = series_copy2[0,:,:]

# Mean total background of the image
print('Mean total background = ' +str(np.mean(image)) + ' counts.')



# Threshold for background removal
threshold =15



# Setting all pixels below a threshold to zero to remove the background
image[image[:,:] < threshold] = 0
image[image[:,:]>threshold]=1

# Plotting the result for checking
fig = plt.figure(figsize=(10,10))
ax = fig.add_subplot(111)
plt.tight_layout()
im = plt.imshow(image, interpolation = 'nearest')



np.transpose(np.nonzero(image))

nz_arrays=np.transpose(np.nonzero(image))

empty = np.zeros(shape=(256,256))





for i,j in nz_arrays:
    
    empty[i,j]=series[0,i,j]


    
    
# Plotting the result for checking
fig = plt.figure(figsize=(10,10))
ax = fig.add_subplot(111)
plt.tight_layout()
im = plt.imshow(empty, interpolation = 'nearest')