gpt4 book ai didi

php - 确定 "visual clarity"或图像像素化的算法

转载 作者:可可西里 更新时间:2023-11-01 12:21:26 24 4
gpt4 key购买 nike

有没有这样的方法来确定图像在被认为“失焦”之前可以放大多少?

一个实际例子(以及我要解决的问题):

我有一张保存为多种不同尺寸的图像,比如 500x500、250x250 和 120x120。我要服务的是最高效的形象,也是最清晰的。如果用户要请求 125x125 的图像,显​​然增加 120x120 图像以适应不仅效率最高,而且很可能不会导致任何明显的像素化。

然而,如果用户要请求 180x180 的图像,增加 120x120 的图像可能更有效,但很可能会渲染出模糊的图像。在这种情况下,我想缩小 250x250 的图像。

显然,图像的“清晰度”可能是相对的,并且因人而异,也因图像而异,但我想知道是否有任何算法或函数可以确定图像的“像素化指数”排序...谢谢!

注意:使用 PHP 和 ImageMagick 进行图像处理,因此该领域的任何答案都很棒......

澄清一下:我并不是在为上面的示例寻找解决方案。我正在寻找原始问题的答案:是否有一种算法可以确定放大图像的“像素化”程度...上述问题只是一个实际示例算法可能会有用。

最佳答案

您可以对图像执行灰度 sobel 边缘检测滤波器,并对边缘的像素值求和;然后将此求和与像素数 (SumOfEdges/(width*height)) 进行平均。那会告诉你图像的“尖锐”。这只能用于比较图像类型。

这是我的 sobel opencl 过滤器内核

const sampler_t sampler = CLK_ADDRESS_CLAMP_TO_EDGE |
CLK_FILTER_NEAREST;
kernel void
sobel_grayscale(read_only image2d_t src, write_only image2d_t dst)
{
int x = get_global_id(0);
int y = get_global_id(1);

float4 p00 = read_imagef(src, sampler, (int2)(x - 1, y - 1));
float4 p10 = read_imagef(src, sampler, (int2)(x, y - 1));
float4 p20 = read_imagef(src, sampler, (int2)(x + 1, y - 1));
float4 p01 = read_imagef(src, sampler, (int2)(x - 1, y));
float4 p21 = read_imagef(src, sampler, (int2)(x + 1, y));
float4 p02 = read_imagef(src, sampler, (int2)(x - 1, y + 1));
float4 p12 = read_imagef(src, sampler, (int2)(x, y + 1));
float4 p22 = read_imagef(src, sampler, (int2)(x + 1, y + 1));

float4 gx = -p00 + p20 + 2.0f * (p21 - p01)-p02 + p22;

float4 gy = -p00 - p20 +2.0f * (p12 - p10) +p02 + p22;

float gs_x = 0.3333f * (gx.x + gx.y + gx.z);
float gs_y = 0.3333f * (gy.x + gy.y + gy.z);
float g = native_sqrt(gs_x * gs_x + gs_y * gs_y);
write_imagef(dst, (int2)(x, y), (float4)(g,g,g, 1.0f));
}

关于php - 确定 "visual clarity"或图像像素化的算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16843982/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com