云南土土 发布的文章

        第一次听到这首歌是看《X档案》的时候,当穆德将枪击现场偷偷带出来的笔记本电脑里的CD插入播放器时,响起的《Twilight Time》的歌声瞬间抓住了我的心。这是我第一次听这首歌,然而感觉却无比熟悉和亲切,尤其随着剧情的推进,最后女极客选择放弃生命将意识上传到网络时也是伴随着这首歌,令人五味杂陈感慨万千。
        这集留下深刻印象是因为在X档案那个时代就提出了人工智能产生意识以及将人的意识上传到网络的问题,无疑是非常超前了。要知道,那个时候《Matrix》还不知道在哪儿呢。Twilight Time这个歌名同时也是一个天文学名词,暮曙时光,指的是太阳在地平线下然而天光仍亮或天光已亮的那段时间。难怪那么亲切。
        昨天终于打起精神搜索这首歌是《X档案》哪一季哪一集里的,我找到了,第五季第十一集。再次重温,恍若昨日。

        很久以前偶遇一张感觉非常好的灯塔照片,把它打印出来夹在我的笔记本里。一直想知道这座灯塔坐落于何处,然而始终忘记去寻找,人总是把美好的东西视作理所当然。今天终于下定决心在BING上搜索,费了一番功夫终于找到:美国华盛顿的North Head灯塔。
        好奇,就找到它。

北头灯塔.jpg
northheadlighthouse.png

        我算是明白了,要真正学会做一件事,最少要重复做三次。
        M42是天文爱好者最喜欢拍的目标,因为它很亮而且很漂亮,但M42也是天文爱好者最难处理好的深空照片,因为它太亮了,要想把星云的云气充分压榨出来,星云中心就要不可避免地过曝。所以拍M42要至少拍两组不同曝光的照片,然后在后期合成,当采用LRGB合成时,意味着要有八个通道的数据需要处理,一不小心就要返工返工再返工...所以当老魏把他参团远程拍摄的M42全套数据交给我时,真是头晕啊。
        第一步:叠加。可以用DeepSkyStack,也可以用MaxIm DL(MDL),理论上后者叠加出来的图像质量要更好那么一点点,但是方便还是前者,因为要叠的通道实在太多了。用过不知多少次DSS了,仍然阴沟里翻船若干次,教训啊:一是亮场、暗场和平场一定要是同一个通道的,这次就发生RGB三个通道用了L的平场的低级错误,虽然比较了下好像没有什么不同,但是本着精益求精的原则还是不得不重新叠加了一次;二是亮场照片一定要事先人工过滤一道,叠出来拉亮了才发现若干卫星轨迹,方才想起猎户座正好在天赤道上,来来往往的人造卫星简直如过江之鲫,一不小心就会在照片上留下轨迹,有一张照片居然还有飞机的轨迹,所以一定要在预览窗口里拉伸图像,拉亮图像后要逐张人工检视每张图片是否有拉线、卫星或飞机轨迹等情况,有疵瑕的照片取消勾选,这样才能处理出高质量的原片,于是,我在这里又处理了第三次;三是5s的短曝光不需要做平场,如果做了平场反而会因为过度补偿而导致四周亮中间暗,于是我在这里做了第四次叠加。
        第二步:拉伸。就是所谓的DPP,数码冲洗的意思,把叠加完成的照片里的信息尽可能多榨出来。DSS叠加完成的图片是线性的,和人眼的特性不符,看上去就是黑漆漆一片,但其实黑漆漆的表象之下有着非常丰富的信息。DPP可以用PS也可以用MDL,但是我用PS拉伸曲线和色阶来调整总是感觉做不到位,不是把色阶拉断了就是感觉不到位,还是MDL的操作来得量化精确可操作。把叠加后的原片打开后首先拉伸预览窗口的stretch,把整张片子拉亮,把云气拉出来,再调出DPP窗口,将无云气的最暗部的数值和方差提取出来,按照数值减去五倍方差的结果填入AVG栏中,再将云气中较淡的区域的数值作为MID栏的数值,运行拉伸后观察直方图,按照直方图左边没有顶满的原则微调两个数值,就可以得到充分拉伸然而又不会造成过分饱和的图像。为了不同通道的处理尽量一致,两个点的取点位置我都记录了坐标值,各通道尽量一致,后期色彩等就会比较均衡。
        第三步:LRGB叠加。PS和MDL都能做,还是用的MDL。LRGB四个通道拉伸后的图片全部打开,然后调出color菜单下的combine color窗口,把每个通道的图片选择好,然后点击Align进行对齐。这次的图片用Auto star match是通不过的,因为不同通道之间的画面有旋转,所以校准方式要改成手动2星校准,通过手动在每张图片上标注出两颗星,来作为基准实现自动对齐,两颗校准星一颗在画面中央,另一颗在边角,这样才能准确识别旋转情况。校准完毕后按OK,回到合并色彩界面按OK,LRGB合成就完成了。
        第四步:降噪。PS和PI都能做,用的PS,按照教程将图像模式改为LAB模式,然后针对AB通道进行两次高斯模糊和渐隐高斯模糊,第一次高斯模糊半径1.5,渐隐70%,第二次高斯模糊半径4.0,渐隐50%。确实有明显的降低彩色噪声的效果。处理后将图像模式改回RGB模式。
        第五步:HDR。用的是PS的蒙版,将两张不同曝光的降噪后图片放到一张图片里,手工对齐后,拷贝亮的背景为新图层,删去原有不可编辑的背景图层,然后将暗的图片新增一个蒙版,蒙版上拷贝上亮的图层,然后进行高斯模糊,我用的是半径50,最后调整曲线和饱和度就可以了。
        这次做出来的M42云气十分充足,这些云气并不是凭空产生的,是真实的信息。我没有像它提供的处理后照片那样将HA通道压在上面,因为HA通道的星点太细,即使亮星也是如此,叠加上去后虽然减少了亮星的过曝和星芒,但却与我们目视的主观感受大相径庭。我个人是十分不喜欢仅仅出于好看的目的而做缩星等处理的,画面的真实感和整体气氛对我来说更重要。深空后期的水真是太深了!
L200-LRGB-HDR_output1小.jpg

“举头望明月,Fly Me to the Moon。”

        据说阿波罗11号降落月球时,登月舱里放的就是这首歌。假若这是事实,那就是极致的浪漫。带我飞向月球,不惧星路漫漫。

        和Disco Diffusion相比,Stable Diffusion for WebUI是一个更加容易上手的AI绘画脚本,SD与DD相比,只要将https://github.com/AUTOMATIC1111/stable-diffusion-webui 中的脚本克隆到本地,先后在命令行中运行webui-user.bat和webui.bat,即可完成python虚拟环境构建、所需模块下载安装等工作,当然,前提是本地已经安装了python3.6以上版本以及CUDA等模块。只要在stable-diffusion-webui/models/Stable-diffusion/子目录中拷贝进下载的模型,SD就可以运行了。
        SD的使用比SD更直观和简单。每次开始时先运行webui-user.bat,提示加载完成可以访问浏览器后,就可以在本地电脑的浏览器中访问http://127.0.0.1:7860进行AI绘画了,整个设置和输出界面都在网页上进行呈现,比DD在本地运行时直接操作笔记本脚本要友好许多。SD同DD一样,用文字告诉它你想生成一张什么样的照片,只不过不需要完整的一句话,只需要一个一个的关键词用逗号分隔即可,这些词叫Tag.整个运行也比DD要快许多,512*512的图片大约十余秒就可以生成一张。
        SD出来的效果和所采用的模型有很大关系。在github上发布方给出的是sd-v1-4-full-ema.ckpt 以及 sd-v1-4.ckpt两个模型,分别是4.2G和7.6G大小,用这个模型生成的是照片和绘画风格的图像,老实说不好看,而且诡异的地方很多,比如生成的人有三条腿什么的。SD的优势是二次元绘画,下载了网上泄露的二次元模型后,做出来的动画还挺有意思。加载不同的模型生成的结果截然不同,因此更换不同的模型试验可以让你玩很长的时间。但是model子目录中一次只认一个模型,因此可以把下载的所有模型拷贝进去,将想要运行的模型名称改为排序最靠前的即可识别加载。

        SD资源参考:
        模型下载: https://rentry.org/sdmodels
        SD综合信息:https://rentry.org/sdupdates
        Tag生成网站:https://wolfchen.top/tag/
                                https://aitag.top/
        Tag魔法书:https://docs.qq.com/doc/DWHl3am5Zb05QbGVs?
                        https://docs.qq.com/doc/DYVJUZU5VdXdDeWNI?
                        https://docs.qq.com/doc/DSHBGRmRUUURjVmNM
                        https://docs.qq.com/sheet/DRGR5RHVQeVhqUENG?tab=BB08J2
                        https://www.kdocs.cn/l/cvg8ccOGj5sq

下面是试验的输出画作:
Tag:a little bear,brown,qute,scarf,white snow,christmas
bear1.png
bear2.png
bear3.png
bear4.png
Tag:a bride,black and white hair,star eyes,Close-up,Immortality of Eternity, poetry, Astronomical clock,white wedding dress,forever time,
clock1.png
clock2.png
clock3.png
clock4.png
clock5.png
clock6.png

        这还真是为了一碟醋,包了一盘饺子。
        Disco Diffusion这个AI绘画项目提供了无限可能,奈何通常情况下的在线运行要解决连接谷歌服务器的问题,此前从GITHUB上下载了这个开源项目的python脚本和对应的模型,用我的XPS13上的VSCODE调通跑起来了。由于没有N家的独立显卡,只能用CPU运行,奈何六代酷睿和8G的内存实在支撑不起这样的运算,out of memory是必然的结果。我不打游戏,又听闻现在的显卡涨价得没有天理,于是在D版收了一块Nvidia Tesla M40的二手计算卡,收了才发现我得有个PCI 16X的插槽来安装它,而我已经不用台机十多年了......可以用雷电口的外置显卡,然而一个外置显卡坞并不比一台便宜的台机便宜,且通过雷电口连接由于通信速率的关系实际算力还要打个对折,所以这次双十一,用1600左右拼了一台5600U的台机。
        组装这台机器也算是命运多舛。拼起来上电主板呼吸灯能亮,但CPU风扇总是转一会就停,显示屏不亮,刷BIOS、拔电池、换内存卡槽都不行,不知哪儿出了毛病,好在CPU和主板是在一家买的,干脆打包发回去请他们检测,结果回复是好的。重新装机还是不行,反复实验才发现是SATA口的SSD我只插了数据线没有插电源线......开机了也装了系统,但经不住京东便宜NVME SSD的诱惑,买了一条重装系统又折腾半天。用M40的计算卡要解决三个问题:一是这块卡的电源接口是CPU接口定义,接电源的显卡头要转接线;二是原卡无风扇,是借助服务器中的高速暴力风扇散热的,装机还得增加散热风扇,去掉原装散热器上显卡用三风扇工程太大,最终用的是3D打印的风道风扇,只是装上后显卡通长达到320mm以上,一般机箱可能没有那么长;三是装驱动,这倒是最简单的,无非是最后在终端界面中用nvidia-smi -dm 0将卡的工作模式改为WDDM。
        VSCODE跑Disco Diffusion也是经过了一番调试。从Github上把整个项目克隆下来后,原来是运行python脚本,后来发现VSCODE可以直接运行谷歌笔记本文件,也就是.ipynb文件,这个笔记本文件和网页上显示的格式相同,十分方便于理解和修改。本地运行完全可行,安装相应的模块和依赖即可,只是其中有两个大坑:一是调试时会提示infer模块,但你用pip安装infer模块后仍然报错,原因是这个infer是AdaBins中的,要将源代码中的from infer import InferenceHelper 改为from AdaBins.infer import InferenceHelper ;二是相同的问题,from midas.dpt_depth import DPTDepthModel等四个语句都要改为from MiDaS.midas.dpt_depth import DPTDepthModel等,增加MiDaS.
        本地跑确实随心所欲,就是风扇有点响,处理还是有点慢。这个脚本还是十分消耗GPU算力的,启用第二模型时可以算到19201088的尺寸,此时大约60-70分钟一张,但是不启用第二模型时10241024都会出现out of memory。动画处理尤其慢,我跑了50个小时还没算完200帧的720P动画,而且从150帧以后,画面变暗,不知是否算法缺陷缘故。

TimeToDisco(2)_0.png
TimeToDisco(2)_5.png
TimeToDisco(2)_8.png
TimeToDisco(2)_9.png
FutureWorld(0)_0.png
FutureWorld(12)_0.png
FutureWorld(14)_0.png
FutureWorld(14)_6.png
FutureWorld(14)_11.png
FutureWorld(16)_0.png
FutureWorld(16)_2.png
FutureWorld(16)_4.png
FutureWorld(16)_7.png
FutureWorld(16)_9.png
FutureWorld(17)_0.png
FutureWorld(17)_1.png
FutureWorld(17)_7.png
FutureWorld(17)_9.png
FutureWorld(18)_0.png
FutureWorld(18)_4.png
FutureWorld(19)_0.png

        雪岭是我的十峰攀登的最后一座山峰,在年度心愿表中已经趴了两年。总没有完成的原因很多很多,一开始是让人精神高度紧绷的孩子三年高考陪读让人无暇他顾,后来是相约一起攀登的朋友遥遥无期的长期出差,然后是朋友儿子娶妻的婚宴,终于抱团却因人数不足取消......一度让我以为老天爷是不想让我爬这座山,或是这座山有可能是我人生的终点?终于排除所有阻碍,和一群陌生人一起踏上登山旅途,已是2022年近收官之时。
        爬山的起点是新碳房村,海拔2679米,终点是雪岭火峰,海拔4344米,返回时手表显示实际升降2000余米。同行7个人,6人租了马骑到大本营,可以减少1000米左右的攀登,只有我和领队的小伙子全程徒步。路程不长,来回仅仅12公里,但是单边6公里要上升2000米,基本没有平路,持续的海拔提升让体力很快达到极点。一直以为雪岭的路很不好找需要向导,其实一直到冲顶之前的大本营都有明显的马道,跟着马道就进行,就是在一面又一面又长又陡的向阳面坡上不停攀登、攀登,上坡还好,回程下坡时简直绝望。大本营是一块平整的空地,往上就是那个令人闻之色变长而陡的碎石坡,被渲染得有生命危险,其实远远没有那么可怕。用好双杖,脚尖用力,找到落点,虽然会滑,会摔,但碎石往下滚不了多远,基本不可能滑摔到生命危险那个程度。下山时走碎石坡旁那面大石板,干燥天气下更不容易打滑,但如果摔了要更危险一些,体力不支情况下不要尝试。碎石坡之上就是钢索防护的一段了,其实没有钢索也完全能够过去,小心一点就行,拉着钢索更安心一点而已。没有什么难度,再往上就是峰顶了。
        有关登顶的一切感受都是陈词滥调。所有的山峰都趴在你的脚下,所有的云海都在远方展开,这样的感受似乎对于每一座山峰都一样,但其实也并不一样。你吃的苦越多,费的劲越大,看到的风景就越壮阔,你的心灵就更平静。攀登至此,已经不会再有“我这是干嘛啊给自己找罪受我真是有病啊”这样的自我诘问,你只知道,你想做的,终将实现。

雪岭08.jpg

雪岭09.jpg

雪岭10.jpg

雪岭11.jpg

雪岭12.jpg

雪岭13.jpg

雪岭14.jpg

雪岭01.jpg

雪岭02.jpg

雪岭03.jpg

雪岭04.jpg

雪岭05.jpg

雪岭06.jpg

雪岭07.jpg

摄像头拍摄高清月面,马赛克拼接,没有那么复杂。注意好几个因素,自然成功。

1.对焦

月面对焦必须看着画面调,不要想着用鱼骨对焦对准恒星的方式调好焦距了直接转过来拍月面,那是肯定不行的。月球离我们才38万公里,而恒星离我们数以光年计,两者的焦点位置肯定不同。来回调焦,直到感到最清晰的时候果断停下。相信你的直觉。

必须要上电动调焦,否则画面的抖动会让你折腾一刻钟都无法确定是否真正合焦了。

2.参数选择

马赛克最要紧的,是每一张图片的曝光参数一定要完全一致,因此,设置好曝光参数后,在整组拍摄中就绝对不能再调整相关参数,否则有你好看。月面亮度高,所以增益不用太高,我一般选择15%左右,过高的增益会压缩动态。

既然是马赛克,那一定画面上装不下整个页面,在调整了曝光时间后,先不要忙着开始拍摄,先控制赤道仪或者经纬仪将整个月面扫一遍,观察有没有过曝的地方。曝光参数选择我的体会是,不要过曝,稍微黯淡一点没有关系。

帧数选择可以自定,我自己通常选500帧,然后叠加时选择其中最好的200帧进行叠加。我不太同意月面拍摄帧数不要太多以免将坏帧叠加进去的说法,因为叠加时选用多少帧,是可以自己设置的。

3.拍摄

月面拍摄不需要导星,赤道仪或者经纬仪均可,电动跟踪是必须的,虽说手动跟踪从理论上也是可以的,但是为了达到最大分辨率,我们应该尽可能减少手动跟踪带来的晃动等不利因素。

马赛克的最大忌讳就是拍漏了局部,最后合成出来的图像缺个角或者缺一条。这个问题我在拍第一张全月面的时候就遇到了。马赛克的基本拍摄方式是扫射,即赤经轴先不动,先逐步移动赤纬,覆盖完整条再调整赤经,开始新的一条扫射,或者赤纬轴先不动,先移动赤经进行逐条扫射也可。

为了避免拍漏,必须做到两点:一是每张之间要有一定的画面重叠,我的经验是至少重叠25%;二是当完成了一条的拍摄,需要移动赤经或者赤纬时,只能移动一个轴,或者赤经或者赤纬,尽量不要两个轴一起移动,否则很容易拍漏。

4.暗场平场

月面拍摄的单帧曝光时间很短,暗场拍不拍差别都不大,我从来不拍,平场则很有必要进行拍摄。摄像头的点距一般都很小,如我用的QHY5LII-M的点距仅3.75微米,这样极小的一粒灰尘都会在画面上留下阴影。每次拍摄前我都要用高压皮老虎吹一下靶面,但即便如此也无法将所有灰尘吹掉,也许用罐装的高压清洁空气是更好的选择。如果望远镜口径不大,将平板电脑或者显示器调为全白,擦干净屏幕倒扣到镜头上,控制曝光至直方图在中间,拍摄一段视频即可。

5.叠加

用R5,R6或者AVISTACK都可以,我个人习惯用AVISTACK。AVISTACK的设置,可见这个帖子http://www.astronomy.com.cn/bbs/forum.php?mod=viewthread&tid=191497。叠加参数我选500帧中选择最好的200帧叠加,输出TIFF格式,先用软件调出平场视频文件,制作出平场文件(FIT格式),然后在叠加设置中将这个平场文件加上。平场必须在视频叠加的时候同步来做,不要想着等视频叠加成图像了,再用DSS等文件来加平场。由于视宁的关系视频画面是抖动,最后叠加出来的图像分辨率都会略为小于摄像头的原始分辨率(边缘抖动部分被切掉了),而平场FIT文件则是原始分辨率,两者分辨率不匹配会直接导致平场叠加失败。

注意AVISTACK叠加出来的图像和视频源文件相比,是上下翻转的。

6.拼接

用PHOTOTSHOP里的文件-自动-photomerge,把叠加好的图像全部丢进去,缺省设置进行叠加即可。正常情况下都能自动拼接出完整,过渡自然的大片,将图像放大到100%,全面检查如果没有任何拼接的痕迹,就可以合并图层,进行后期制作了。

有时候拼接出来的图像会有拼缝,我想这也许是因为拍摄时间太长,导致拍摄不同画面时亮度发生了极其细微的变化所致,也可能是因为叠加的关系,有时边缘会有极细的一道黑边。这种情况时,可以手动将每张照片的边缘裁掉细细的一圈,再拼,有一半的机会可以消除拼缝。其他的办法,就超过我的能力了。

还有少数时候,拼接不成功,我判断出现这样问题的原因,首先是欠曝过于严重,软件难找画面的参考点,其次是交叉覆盖做得不好,交叉覆盖太少难以判断,太多(如50%以上)似乎也会出现问题。遇到这种情况,拼接就要化整为零,先把每条拼好,再拼成一个完整的。如果画面欠曝实在严重,连一条都不能自动拼好,就试着拼三张甚至两张,将无法自动拼接的部分用手动的方式进行拼接,最终完成。

一般来说,只要曝光合适,交叉覆盖得当,自动拼接即可成功。

7.后期

后期并非我的强项,对我来说,月面的后期只拉曲线和做锐化。拉曲线的时候不要调节幅度过大,多设几个参考点,至少四个,一点点拉,尽量将画面的层次拉出来,同时又不导致分辨率损失或者画面过曝。锐化采用复制图层,用“高反差保留”滤镜处理复制图层后叠加回原图层,也可以用USM锐化,只是两种处理的参数都要反复试验比较,不要做过头。看上去稍微模糊一点点是最好的,过锐的图像太生硬,也不耐看。

(本文原创于2013年)

        第二次因为修改raspberry的系统文件造成sudo无法使用了。第一次是因为修改了/etc/sudoers导致,那一次是用以下语句救回来的:
pkexec --pi nano /etc/sudoers

        这一次是因为python脚本执行问题,怀疑导入的模块环境变量不对,修改了/etc/profile导致。用上面这个语句无法救回,试验了半天,用下面这句:
export PATH=/usr/bin:/usr/sbin:/bin:/sbin:/usr/X11R6/bin
        运行这一句后,sudo语句暂时可以运行,赶紧进/etc/profile把添加进去的环境变量路径删掉,然后用如下语句刷新:
source /etc/profile
        系统sudo语句恢复正常。

        所以raspberry的系统文件修改有风险!还有就是要事先设置好root账户的密码,这样sudo用不了以后可以用root账户登录,不用sudo语句就可以修改。

        需要修改环境变量的缘起,是将流星监测站的叠加图上传由sm图床改为腾讯云COS自建图床,当时试验是好的,后面就没有能够收到图片推送,今天putty登录人工运行python脚本发现报错缺少qcos模块,可是我已经安装过cos-python-sdk-v5模块了啊,pip freeze也能看到安装的模块,最后各种添加环境变量都没有用,还是用pip uninstall以后再install这个模块才解决了这个问题。记住,以后再有这样的幺蛾子,先卸载,再安装试试。

        两次到轿子山,都留下了美好的印象。一次走一线天,一次走轿顶,风光各有千秋,高原杜鹃林的繁茂和清凉固然让人神清气爽,然而苔藓地衣装点的高原草甸更让人回肠荡气。雨季的轿子山遍地都是小溪和瀑布,雷鸣般的水声让缆车里的我以为是天降暴雨。轿顶云雾缭绕,无人机数次起飞才在云雾变幻的缝隙一窥壮阔的美景。没有办法,山已在云里。
        我喜欢攀登高山,喜欢站在山顶看几公里几十公里外的群山,喜欢头顶蓝得近乎黑色的天空,喜欢峰巅狂野得令人站不住脚的大风,喜欢脚下依次铺陈开去的绿色草甸与莽莽森林,喜欢经过长时间攀登后筋疲力尽疲惫的感觉,喜欢还有更高山峰可以攀登的期待。

DJI_0341_小.jpg
DJI_0330_小.jpg
DJI_0358_小.jpg
DJI_0347_小.jpg
DJI_0357_小.jpg
DJI_0360_小.jpg
DJI_0363_小.jpg
DJI_0367_小.jpg
DJI_0368_小.jpg
DJI_0371_小.jpg
_P1M0283_副本.jpg
_P1M0277_副本.jpg
_P1M0270_副本.jpg
_P1M0292_副本.jpg
_P1M0285_副本.jpg
_P1M0296_2_副本.jpg