Я пытаюсь рассчитать некоторые текстурные измерения, используя GLCM, описанную Хараликом (энергия, однородность и т. д.) для серии 4-х полосных (R, G, B, NIR) аэрофотоснимков, которые у меня есть. Я пробовал это на подмножестве, но в итоге получил изображение, которое в основном пустое. Насколько я понимаю, это связано с оттенками серого и параметром levels
, но я не могу этого понять.
Моя дата очень велика (несколько ГБ), поэтому я пытаюсь быть эффективным, используя модуль RIOS (считывает изображение в виде массива 400400nbands numpy, обрабатывает данные и записывает в выходное изображение).
Мою сцену ввода можно найти здесь (200 МБ ).
Мое выходное изображение выглядит так (это может быть трудно увидеть, поскольку черные пиксели очень маленькие):
Мой код:
#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)
Очевидно, что здесь что-то не так, поскольку мой вывод не такой, как я ожидаю. Я предполагаю, что это связано с параметром «уровни». Мне указали на объяснение здесь: Черная линия в результате GLCM что хорошо объясняет параметр, но я не могу улучшить свой результат.
Может ли кто-нибудь объяснить мне, почему мой результат выглядит так, как показано, и как я могу это исправить?
0
или255
. Выполнитеnp.unique(<your_image>)
, чтобы убедить себя. GLCM для такого изображения будет иметь только четыре ненулевых элемента. - person Tonechas   schedule 07.04.2017import numpy as np
from skimage import io
x = io.imread('https://i.stack.imgur.com/EyCI1.png')
np.unique(x)
и получил:array([ 0, 255], dtype=uint8)
- person Tonechas   schedule 07.04.2017