从 .tif 文件中减去 2 个像素值给出了错误的结果
subtract 2 pixel values from .tif file gives wrong result
我尝试减去两个 .tif 图像。
为此,我使用以下代码:
import numpy as np
import os
from osgeo import gdal,ogr
import copy
from PIL import Image
import time
def loadTifAsArray(image, filepath):
print("Loading "+image)
path = os.path.join(filepath,image)
tif = gdal.Open(path)
tifArray = tif.ReadAsArray()
return tifArray
def subtract(image1, image2):
# Copy of one of the images is used for saving calculated values
print("Subtracting ...")
sub = copy.deepcopy(image1)
rows = len(sub)
cols = len(sub[0])
for px in range(cols):
for py in range(rows):
sub[px][py] = image1[px][py] - image2[px][py]
return sub
start_time = time.time()
cwd = os.getcwd()
filepath = os.path.join(cwd,'tifs')
arr = os.listdir(filepath)
tifList = []
for image in arr:
tifList.append(loadTifAsArray(image, filepath))
print("--- %s seconds for loading the images ---" % (time.time() - start_time))
sub = subtract(tifList[0], tifList[1])
print("--- %s seconds for loading and subtracting ---" % (time.time() - start_time))
我减去图像,加载为栅格数据,然后简单地对其中一张图像进行深度复制以将计算值存储在其中。
问题是计算值。
当我查看索引 [0][0] 处的两个图像的值时,我得到以下值:
print(image1[0][0])
print(image2[0][0])
505
549
当我尝试减去它们时,我得到了这个:
print(image1[0][0] - image2[0][0])
65492
我不明白这是为什么,希望得到任何帮助!
闻起来像溢出来了!基本上,我假设你的图像是 uint16
图像,负数 "wrap around" 回到最大值。
请注意,您期望的是 44,但得到的是 2^16 - 44
。
解决方法非常简单;例如,通过在 subtract
函数的开头添加:
将图像转换为 float32
image1 = np.array(image1).astype(np.float32)
image2 = np.array(image2).astype(np.float32)
祝你好运!
P.S:当然np
只是我个人的喜好。您可以选择其他最适合您的方式投射。
我尝试减去两个 .tif 图像。 为此,我使用以下代码:
import numpy as np
import os
from osgeo import gdal,ogr
import copy
from PIL import Image
import time
def loadTifAsArray(image, filepath):
print("Loading "+image)
path = os.path.join(filepath,image)
tif = gdal.Open(path)
tifArray = tif.ReadAsArray()
return tifArray
def subtract(image1, image2):
# Copy of one of the images is used for saving calculated values
print("Subtracting ...")
sub = copy.deepcopy(image1)
rows = len(sub)
cols = len(sub[0])
for px in range(cols):
for py in range(rows):
sub[px][py] = image1[px][py] - image2[px][py]
return sub
start_time = time.time()
cwd = os.getcwd()
filepath = os.path.join(cwd,'tifs')
arr = os.listdir(filepath)
tifList = []
for image in arr:
tifList.append(loadTifAsArray(image, filepath))
print("--- %s seconds for loading the images ---" % (time.time() - start_time))
sub = subtract(tifList[0], tifList[1])
print("--- %s seconds for loading and subtracting ---" % (time.time() - start_time))
我减去图像,加载为栅格数据,然后简单地对其中一张图像进行深度复制以将计算值存储在其中。
问题是计算值。 当我查看索引 [0][0] 处的两个图像的值时,我得到以下值:
print(image1[0][0])
print(image2[0][0])
505
549
当我尝试减去它们时,我得到了这个:
print(image1[0][0] - image2[0][0])
65492
我不明白这是为什么,希望得到任何帮助!
闻起来像溢出来了!基本上,我假设你的图像是 uint16
图像,负数 "wrap around" 回到最大值。
请注意,您期望的是 44,但得到的是 2^16 - 44
。
解决方法非常简单;例如,通过在 subtract
函数的开头添加:
image1 = np.array(image1).astype(np.float32)
image2 = np.array(image2).astype(np.float32)
祝你好运!
P.S:当然np
只是我个人的喜好。您可以选择其他最适合您的方式投射。