如何在GRASS中对全景图像的虚假合成进行色彩平衡?


9

每当我尝试一些陆地卫星图像的泛锐化复合材料在使用GRASS i.pansharpeni.fusion.brovey或IHS锐化方法中,输出会有一些或全部的以下特征:

  • 与未锐化的合成材料相比,合成材料的颜色具有不同的色调
  • 亮度等级混乱
  • 整个合成图像变成全白/全黑(当使用预处理为大气顶反射率或中的表面反射率校正的图像时i.landsat.toar

我还尝试了以下所有方法;但是颜色/亮度保持不变或变差:

  • i.landsat.rgb锐化过程前后的应用
  • 使用中的-f-p标志播放i.landsat.rgb
  • 试图r.colors将颜色表编辑为grey / grey255 / grey.eq
  • i.pansharpen使用所有Brovey / IHS / PCA方法进行了尝试
  • 播放-l标志,i.pansharpen以重新平衡蓝色通道

GRASS GIS手册并就如何进行全色锐化和色彩平衡的解释,但我无法弄清楚如何这两个过程在并行工作流程相结合。我怀疑这是由于我对GRASS中的颜色表,颜色直方图等了解不足。

因此,有人可以向我解释- 在GRASS中进行图像处理后处理Landsat图像时,如何解决色彩平衡问题?您可以与我分享您最喜欢的工作流程/方法吗?

非常感谢您的任何反馈!

Answers:


6

总览

在GRASS-GIS版本7中使用一种可行的方法是在“全屏锐化”后获得可接受的色彩平衡合成图像。

  1. 检查输入数据是否为[0,255]范围内的8位
  2. 如果数据在[0,255]内,则继续锐化(i.pansharpen
  3. 如果数据不在[0,255]内,则将它们重新缩放到此范围(r.rescale
  4. 使用任何特色方法(Brovey,IHS,PCA)进行泛音处理
  5. 通过使用i.landsat.rgb模块自动调整颜色平衡或手动调整感兴趣波段的色表

详细信息和示例说明

平移 / 融合

GRASS 7拥有一个专用的全景锐化模块,i.pansharpen该模块具有三种锐化技术,即Brovey变换,经典IHS方法和一种基于PCA的技术

i.pansharpen与8位栅格地图作为输入配合使用时效果很好。如果要处理的数据不在此范围内,即不在范围内,则[0, 255]可以使用GRASS' r.rescale模块将其重新缩放以适合该范围。

给定一组介于之间的11位光谱带(例如,蓝色,绿色,红色,NIR和平移)[0, 2047],例如查询蓝色带将返回

r.info Blue_DNs -r
min=0
max=2047

重新调整蓝带的范围 [0, 255]

r.rescale in=Blue_DNs out=Blue_DNs_255 from=0,2047 to=0,255

相同的步骤适用于其余的多光谱波段和感兴趣的全色波段。

与使用GRASS时一样,通常需要设置感兴趣的区域,即匹配频段的范围。在这种特殊情况下,模块会自行考虑分辨率,并且最终的全锐化光栅图将具有与全色波段相同的高分辨率。g.regionrast=Blue_DNs_255

基于IHS的“平移”动作的示例命令可能如下所示:

i.pansharpen pan=Pan_DNs_255 ms1=Blue_DNs_255 ms2=Green_DNs_255 ms3=Red_DNs_255 output=sharptest255 sharpen=ihs

色彩平衡

处理完成后,模块输出

...
The following pan-sharpened output maps have been generated:
sharptest255_red
sharptest255_green
sharptest255_blue

To visualize output, run: g.region -p rast=sharptest255.red
d.rgb r=sharptest255_red g=sharptest255_green b=sharptest255_blue

通常,通过使用例如i.landsat.rgb模块或手动调整组成RGB图像的三个波段中的每一个,在全景锐化之后足以重新平衡色彩。

屏幕截图

... 要添加


我知道一定有更好的方法!现在,我可以自由使用i.sharpen模块了。感谢您指出r.rescale模块。很棒的工作Nikos!

Haziq,我不确定将11位数据集转换为8位时是否丢失了多少“精细”细节。例如,QuickBird图像是一个11位传感器。它们有8位和16位格式。由用户决定要做什么。i.pansharpen处理各种格式当然很不错。请查看相关的“票证”:票证2048:i.pansharpen限于8位图像。另一方面,我可能根本不了解内容,因此无法正确使用i.pansharpen ...?
Nikos Alexandris

7

我进行了上下搜索,我想我已经找到了问题的根源。我相信我现在已经为他们找到了解决方案-但这有点混乱。我确信有更好的方法来解决它们。如果您知道更简单的方法,请分享!

问题根源:

  1. 的输出为 i.landsat.toar 浮点数。我已经意识到,当我在任何泛锐化方法中使用浮点栅格时,颜色都会变得混乱。这些算法以某种方式偏爱原始整数形式的栅格。
  2. 泛锐化模块,例如 i.pansharpen i.fusion.brovey 模块)会弄乱颜色。我还不太了解它们在这些模块中使用的算法-但是以某种方式会影响颜色表,并破坏生成的泛锐化图像。

解:

  1. 使用将输出从 i.landsat.toar float 转换为intr.recode
  2. 将栅格用作IHS平移锐化方法i.rgb.hisi.his.rgb)中的输入。我远离使用i.pansharpeni.fusion.brovey

工作流程:

  1. r.info -r 标志一起使用以获取已用处理的每个栅格波段的DN最小值和最大值i.landsat.toar。例如:

    > r.info -r BAND1
    min=0.01
    max=0.370064120902708
    

    如我们所见,值在0-1之间,与原始值(在0-255之间)有很大的不同。这就解释了为什么由于使用的值范围非常低(低于1),所以全清晰度锐化的输出结果为空白。

  2. 使用转换该栅格波段 r.recode。使用从步骤1获得的最小值和最大值转换为0-255的新范围。示例代码段:

    r.recode input=BAND1 output=NEWBAND1 rules=- << EOF
    0.01:0.370064120902708:0:255
    EOF
    

    我们可以使用以下命令检查新的转换值r.info

    > r.info -r NEWBAND1
    min=1
    max=254
    

    值在0-255之间:现在可用于平整锐化过程。

  3. 将灰度色表应用于转换后的波段 r.colors

    r.colors NEWBAND1 color=grey
    

    到目前为止,我使用灰色表获得了最佳结果-锐化的合成图像与原始合成图像紧密匹配。其他选择是使用color=grey.eq或使用-e标志来均衡灰色表color=grey。或者我们可以使用i.landsat.rgb模块代替r.colors ..

  4. 对我们打算用作合成的其他栅格波段(包括平移栅格)重复步骤1-3波段((波段8))。脚本的使用在这里将是不胜感激的。

  5. 然后将处理后的栅格用作IHS全锐化方法的输入。例如,当制作波段7,4,2的合成时:

    i.rgb.his r=NEWBAND7 g=NEWBAND4 b=NEWBAND2 hue=HUE int=INT sat=SAT
    

    这将输出3层:色相层HUE,强度层INT和饱和度层SAT。然后,我们将取代强度层INT与泛栅格波段NEWBAND8i.his.rgb

    i.his.rgb hue=HUE sat=SAT int=NEWBAND8 r=COMP742_red g=COMP742_green b=COMP742_blue
    

    然后可以使用或组合得到的红色通道COMP742_redCOMP742_greenCOMP742_blue。d.rgbr.composite。。

之前和之后的示例:

锐化之前:

之前

锐化后:

后

也许很难说出急剧的差异从如此小的图像观看时,。但是重要的是,泛锐化图像的颜色应与原始图像的合成色相匹配。任务完成!

其他说明:

  • 不要 r.recode 设置热带(带6)i.landsat.toar以开尔文温度值输出这些热带(与DN值无关)。将r.recode例程保持在正常的多光谱和平移波段(1-5、7、8波段)上。
  • 如果我们什至从不使用 i.landsat.toar但是生成的合成看起来确实不对,那通常是因为在全色锐化处理之前和之后颜色表不匹配。我r.colors RASTER color=grey在平移锐化之前将其应用于原始栅格波段,并在平移锐化之后将其应用于最终的通道,以确保颜色紧密匹配。
  • 错误颜色合成问题的一个常见情况:原始光栅带位于中color=grey255,输出i.landsat.rgb于中color=grey.eq。难怪他们看起来都不同!
  • 处理landsat图像以供使用确实是一项费时的工作。最好在等待所有内容处理时去做点事情,或者至少在喝咖啡的同时听一些好听的音乐;)

希望这对某人有利:花了我几天时间找出问题所在。


1
感谢您的研究和努力,我在svn的新GRASS 7中也遇到了这个问题。现在,全色图像的颜色可以了。=)
弗拉基米尔·2012年

哦,是的,我忘了提到我正在运行哪个版本的GRASS-感谢@VladimirNaumov的提醒!我正在使用GRASS 7svn; 应该意识到,这个问题可能不是所有版本的GRASS都不会发生的(我没有尝试过其他版本)

返回至此:您可以通过使用r.mapcalc其集成int()功能将浮点栅格地图转换为整数栅格地图。我认为r.recode这并不是要在您的应用程序上下文中使用。
Nikos Alexandris

1
我认为整体的“问题”有关i.pansharpen,即它要求8位栅格地图作为输入,即输入值的范围从0到255
尼科斯Alexandris

另外,请注意,i.pansharpen仅在grass7_trunk中。那是开发版本... :-)
Nikos Alexandris
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.