Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

bitmap转gif摩尔纹&噪点问题 #115

Open
AndyYoung1004 opened this issue Aug 19, 2023 · 5 comments
Open

bitmap转gif摩尔纹&噪点问题 #115

AndyYoung1004 opened this issue Aug 19, 2023 · 5 comments

Comments

@AndyYoung1004
Copy link

AndyYoung1004 commented Aug 19, 2023

hi dragon66:

大佬,你好,非常感谢这个gif工具,帮我解决了很大问题,
我在使用中发现,某些图片经过gif编码之后,会产生摩尔纹,同样的照片我用三星手机的相册生成摩尔纹比较轻微,三星用的是一家开源算法叫做quramsoft的图片处理算法,猜测是算法效果的差异。
请问我们这个方案有办法解决这个问题吗?我打开了dither功能优化不大,下面是我的代码:

            Bitmap bitmap1 = BitmapFactory.decodeFile("/sdcard/DCIM/girl1.jpg");
            bitmap1 = Bitmap.createScaledBitmap(bitmap1, WIDTH, HEIGHT, true);

            Bitmap bitmap2 = BitmapFactory.decodeFile("/sdcard/DCIM/girl2.jpg");
            bitmap2 = Bitmap.createScaledBitmap(bitmap2, WIDTH, HEIGHT, true);

            Bitmap bitmap3 = BitmapFactory.decodeFile("/sdcard/DCIM/boy.jpg");
            bitmap3 = Bitmap.createScaledBitmap(bitmap3, WIDTH, HEIGHT, true);

            AnimatedGIFWriter writer = new AnimatedGIFWriter(true);
            try {
                OutputStream os = new FileOutputStream("/sdcard/DCIM/dragon.gif");
                writer.prepareForWrite(os, -1, -1);
                writer.writeFrame(os, bitmap1, 1000);
                writer.writeFrame(os, bitmap2, 1000);
                writer.writeFrame(os, bitmap3, 1000);
                writer.finishWrite(os);
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            } catch (Exception e) {
                e.printStackTrace();
            }
@AndyYoung1004 AndyYoung1004 changed the title bitmap转gif摩尔纹问题 bitmap转gif摩尔纹&噪点问题 Aug 21, 2023
@AndyYoung1004
Copy link
Author

附件中是2个对比的gif文件,可以看到在图片噪点控制方面,三星的效果比我们当前效果要好一些

@dragon66
Copy link
Owner

dragon66 commented Aug 21, 2023

@AndyYoung1004 这个程序目前没有太大空间可以设置不同的量化和抖动方法。默认是吴氏量化和弗洛伊德抖动。在quant目录下有一个更好的量化算法neuquant。你可以试试和这个结合一下。据我测试,很多时候不用抖动效果就很好。至于抖动,同一目录下还有一个Bayer方法和相关的矩阵可用。你都可以试一下。我手机看不了邮件附件所以不知有多大差别。你如果能付到这个问题下我就能看到区别了。

可以看到了。不过我觉得差别并不是很明显。我相信如果你用neuquant量化算法效果可能会比三星的好。

@AndyYoung1004
Copy link
Author

@dragon66 尝试了一下wuquant和nequant,发现wuquant的效果更好
抖动目前都还好,主要还是有些图片会有一圈一圈的摩尔纹出现,不知道摩尔纹是不是和量化方法有关

@AndyYoung1004
Copy link
Author

摩尔纹的问题,我猜测是和调色盘有关系,我们有办法增大调色盘的颜色种类吗?

https://zhuanlan.zhihu.com/p/565191032?utm_id=0

这篇文章里面有对比增加调色盘梳理,改善整体效果

@dragon66
Copy link
Owner

dragon66 commented Aug 23, 2023

如果是摩尔纹应当和硬件关系更大。单纯从量化角度来说对特殊空间颜色分布的图片有可能产生纹路。所以通常要加入抖动模糊一下。至于色盘的选择通常是量化的一部分,按照各种颜色出现的频率选几率最高的小于256色的作为色盘。这其中并不会考虑颜色的空间分布。编码已经做到利用256色内的所有颜色了,没有办法增加颜色了。

你提供的链接我看了一下,主要着重在通过减少帧数和色盘颜色来减少文件尺寸。这对你的应用没有帮助。

如果改变量化算法无法提高效果那问题就比较复杂了。由于这个编码器是作为整个程序库的一个小部分,目前无法做到优化和最精。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants