Mon programme trouve les valeurs de varaince d'une image à chaque fenêtre d'une image quadrillée. Le problème est que lorsque j'imprime les valeurs, elles ne correspondent pas à ce qui est affiché dans l'image de sortie. J'ai inclus un exemple d'image ci-dessous.Sortie inattendue lors de la découverte de la variance d'une image dans OpenCV -Python
Voici mon code:
#import packages
import numpy as np
import cv2
import dateutil
import llist
from matplotlib import pyplot as plt
import argparse
#Read in image as grey-scale
img = cv2.imread('images/0021.jpg', 0)
#Set scale of grid
scale = 6
#Get x and y components of image
y_len,x_len = img.shape
variance = []
for y in range(scale):
for x in range(scale):
#Crop image 9*9 windows
cropped_img=img[(y*y_len)/scale:((y+1)*y_len)/scale,(x*x_len)/scale:((x+1)*x_len)/scale]
(mean,stdv) = cv2.meanStdDev(cropped_img)
var = stdv*stdv
cropped_img[:] = var
#Print mean_values array
variance.append([var])
variance=np.asarray(variance)
np.set_printoptions(suppress=True, precision=3)
print variance.reshape(1,scale,scale)
cv2.imshow('output_var',img)
#cv2.imwrite('images/output_var_300.jpg',img,[int(cv2.IMWRITE_JPEG_QUALITY), 90])
cv2.waitKey(0)
cv2.destroyAllWindows()
Voici l'image de sortie du code ci-dessus:
D'après ce que je peux dire aux valeurs ci-dessous ne correspondent pas à l'image ci-dessus. Est-ce que quelqu'un a une idée de ce qui se passe ici?
print variance.reshape(1,scale,scale)
#[[[ 17.208 43.201 215.305 1101.816 1591.606 2453.611]
# [ 46.664 121.162 326.59 809.223 1021.599 5330.989]
# [ 47.754 64.69 705.875 1625.177 3564.494 10148.449]
# [ 19.153 201.864 289.258 632.737 5285.449 4257.597]
# [ 37.621 159.51 271.725 282.291 2239.097 759.007]
# [ 26.108 98.456 32.958 505.609 575.916 70.741]]]
Merci d'avance.
EDIT: Voici une image de sortie plus réaliste pour ceux qui sont intéressés:
Pour autant que je puisse voir, la 'variance 'correspond à l'image de sortie, le plus petit nombre signifie couleur plus sombre, et le contraire, donc l'image est correctement dessiné. Qu'attendez-vous de voir? – bosnjak
@Lawrence Ok, prenons la deuxième ligne du tableau comme exemple, "46.664" correspond au premier bloc qui est gris foncé, "5330.989" correspond au dernier bloc qui est gris clair, donc vous vous attendriez à ce que la variance soit plus faible le dessinateur la sortie, comme vous l'avez dit. Mais l'avant-dernier bloc est "1021.599" ce qui est une valeur plus faible que le dernier bloc mais il est plus léger. Si vous travaillez à travers le tableau en essayant de le faire correspondre à l'image, vous verrez qu'il ne suit pas un modèle, l'élément quatrième dans le tableau est où le modèle est brisé. –
Oui, je vois ce que vous voulez dire. La première chose qui me vient à l'esprit est la normalisation. Étant donné que la représentation des couleurs est comprise entre 0 et 255 par canal, vous risquez de rencontrer certains problèmes, tels que l'encapsulation de débordement ou similaire. J'essaierais de normaliser les valeurs et de voir ce qui se passe. – bosnjak