J'essaie de calculer quelques mesures de texture en utilisant le GLCM décrit par Haralick (énergie, homogénéité, etc.) pour une série de photos aériennes à 4 bandes (R, G, B, NIR) que je avoir. J'ai essayé ceci sur un sous-ensemble mais finis avec une image qui est la plupart du temps vide. Ma compréhension actuelle est que cela a à voir avec le greyscaling et le paramètre levels
mais je ne peux pas le comprendre.Espace noir dans l'image GLCM
Ma date est très importante (plusieurs Go), donc je suis en train d'être efficace en utilisant le module RIOS (lit une image en tant 400 nbands tableau numpy, traite les données et écrit à une sortie image).
Ma scène d'entrée peut être trouvée here (200 MB).
Mon image de sortie ressemble (cela peut être difficile de voir que les pixels noirs sont très petites):
Mon code est:
#Set up input and output filenames
infiles = applier.FilenameAssociations()
infiles.image1 = "infile.tif"
outfiles = applier.FilenameAssociations()
outfiles.outimage = "outfile.tif"
controls = applier.ApplierControls()
controls.progress = cuiprogress.CUIProgressBar()
# I ultimately want to use a window here
# which RIOS easily allows you to set up.
# For a 3x3 the overlap is 1, 5x5 overlap is 2 etc
#controls.setOverlap(4)
def doFilter(info, infiles, outfiles, controls=controls):
grayImg = img_as_ubyte(color.rgb2gray(infiles.image1[3]))
g = greycomatrix(grayImg, distances=[1], angles=[0, np.pi/4, np.pi/2, 3*np.pi/4], symmetric=True, normed=True)
filtered = greycoprops(g, 'energy')
# create 3d image from 2d array
outfiles.outimage = numpy.expand_dims(filtered, axis=0)
applier.apply(doFilter, infiles, outfiles, controls=controls)
Manifestement, il y a quelque chose de mal ici comme ma sortie n'est pas comme je l'attends. Je suppose que c'est à voir avec le paramètre 'levels'. On m'a montré une explication ici: Black line in GLCM result qui explique bien le paramètre mais je suis incapable d'améliorer mon résultat. Est-ce que quelqu'un peut m'expliquer pourquoi mon résultat sort comme indiqué et comment je peux y remédier?
Votre image est binaire, toutes les intensités de pixels sont soit '0' ou' 255'. Exécutez 'np.unique ()' pour vous convaincre. Le GLCM pour une telle image aurait seulement quatre entrées non nulles. –
Tonechas
numpy.unique rendements [21 22 23 24 25 26 27 28 29 30 3 ......... 186 187 188 189 190 191 192 193 194 195 196 197 198] –
J'ai couru ce code: 'import numpy comme np' 'de l'importation de skimage io' ' x = io.imread ('https://i.stack.imgur.com/EyCI1.png') '' np.unique (x) ' et obtenu : 'array ([0, 255], dtype = uint8)' – Tonechas