minecraft吧 关注:2,576,394贴子:32,153,297

[求助] 可能是进错吧系列: 想问一下关于羊毛像素画的问题

只看楼主收藏回复

我在写一个自动生成 '一键生成像素画的mcfunction' 的东西
功能是这样的: 读入一个图像文件,读入材质信息(羊毛对应的色号),生成由setblock命令组成的能够产生像素画的mcfunction文件.
思路是这样的: 把图片对应的rgb矩阵读进来,然后对照羊毛的色号,计算在rgb色彩空间上最能代替某一像素色彩的羊毛的id(包括附加值).
我的具体算法是这样的: 首先定义rgb空间上的距离(或者平方距离),羊毛到某一像素点的rgb空间平方距离=(r通道取值之差)^2+(g通道取值之差)^2+(b通道取值之差)^2. 然后读入图片rgb矩阵,对矩阵元素遍历并计算每一个像素点处最佳羊毛id(和此像素点的rgb空间平方距离最小). 遍历的同时选择最佳的羊毛并生成setblock命令写入mcfunction文件. 最后保存并关闭这个mcfunction文件,在游戏中载入并执行这个function就可以了.
问题是生成的像素画和原本的图片相差太大…… 怀疑是选择最佳羊毛的算法有问题…… 希望有人能帮忙改进算法(我知道有现成的像素画生成工具,但不懂它们的原理,如果有此类**开源**的工具的话,也可以推荐一下,多谢)
(之后会贴出对比图和算法源代码(matlab写的))


IP属地:北京1楼2018-09-21 21:35回复
    这是原图和mc像素画对比(请不要在意we红框,之前删了一幅更丑的像素画):
    >原图(皮卡丘做错了什么):

    >对比图(前方高能……):


    IP属地:北京2楼2018-09-21 21:38
    回复
      2026-05-04 12:03:20
      广告
      不感兴趣
      开通SVIP免广告
      该楼层疑似违规已被系统折叠 查看此楼


      IP属地:北京3楼2018-09-21 21:40
      回复
        其中的材质信息如下:

        对应的羊毛id分别是 'minecraft:wool %d' %d表示从0到15顺序下来的整数 色号数据来自minecraft wiki


        IP属地:北京4楼2018-09-21 21:47
        回复
          重复下问题
          皮卡丘很崩坏 我很伤心 像素画生成的时候应该如何选择合适的羊毛? 能否提供算法 或相关的开源工具?
          多谢


          IP属地:北京5楼2018-09-21 21:48
          收起回复
            啊 对了 那个rgba数组里边最后一项是指alpha值 本来我还想在备选列表里边加上染色玻璃来处理包含了透明通道的图片的…… 然而似乎不透明的情况都没有处理好 所以暂时没有用到


            IP属地:北京6楼2018-09-21 21:51
            回复
              MATLAB代码好乱啊


              IP属地:吉林7楼2018-09-21 22:28
              回复(1)
                是不是颜色移了一位


                IP属地:吉林8楼2018-09-21 22:36
                回复
                  2026-05-04 11:57:20
                  广告
                  不感兴趣
                  开通SVIP免广告
                  关于为什么取色不准,首要原因是因为颜色库太小
                  例如spritecraft的转化结果:

                  如果能提高颜色库容量

                  就能精确很多
                  再就是算法问题
                  RGB颜色空间计算色差是不准确的
                  “用RGB比较颜色之间的相似度时,存在很大的问题,不建议直接使用,因为往往一个通道的一点改变,会导致最后融合在一起的颜色发生巨大变化,而如果三个通道的同时改变,却只会使最后的明暗发生变化,色调并不会产生巨大变化.而这也是H系列色彩空间普遍存在的问题.”
                  https://blog.csdn.net/qq_16564093/article/details/80698479
                  点击上面的文章提供了更准确地算法


                  IP属地:上海9楼2018-09-21 23:05
                  回复(4)
                    害怕到不敢发言


                    IP属地:广东来自Android客户端10楼2018-09-21 23:45
                    回复
                      按hsv空间计算的结果 看上去好像是hsv椎体的高度不够 我明天试试看能不能根据输入图像动态调节这个椎体的高度:

                      色彩库什么的明天再写吧 先谢过a324大佬


                      IP属地:北京11楼2018-09-22 00:01
                      收起回复
                        看不懂,告辞


                        IP属地:广东来自Android客户端12楼2018-09-22 00:06
                        回复
                          该楼层疑似违规已被系统折叠 查看此楼


                          IP属地:上海13楼2018-09-22 00:36
                          回复(3)


                            IP属地:四川来自Android客户端14楼2018-09-22 10:29
                            回复
                              2026-05-04 11:51:20
                              广告
                              不感兴趣
                              开通SVIP免广告
                              羊毛颜色不够的话可以加入诸如硬化粘土之类的方块来减小色差吧?


                              IP属地:江苏来自iPhone客户端15楼2018-09-22 18:54
                              回复