逛奔的蜗牛

我不聪明,但我会很努力

   ::  :: 新随笔 ::  ::  :: 管理 ::
计算机内是离散的处理数字
 
把连续图像(如人眼看到的图像就是连续的)转化为数字图像:数字图像可用二维数组存放,也即把图像光栅化了。
图像的坐标(x, y),图像的强度,幅度或灰度 f(x, y)。
图像的坐标和幅度可能是连续的,数字化坐标称为取样,数字化幅度称为量化(离散的灰度值,如RGB 255 << 16 + 255 << 8 + 255种)。
一行沿水平方向从左到右对图像等间隔对图像取样,得到幅度的值,可画出一维曲线函数图,幅度值的随机变化是由图像噪声引起的。
一行一行的从上到下对图像取样,量化,最后得到存储在二维数组里的数字图像。取样和量化的结果是一个实际的矩阵。也即为什么图像
都是方形的。
 
数字图像的质量很大程度上取决于取样和量化中所使用的取样数和灰度级。
1. 简单的图像抽样(灰度级保持不变),从原图像中删去一样的行和列1024*1024 -> 512*512 -> 256*256 -> 64*64 -> 32*32,从大到小,很难看出抽样带来的影响。但如果把抽样后的图像复制行和列恢复到1024*1024大小后,就看出影响来了,出现小方块,图像不自然。这也是nearst的filter。
2. 取样数恒定,但灰度值以2的幂次数降低。
 
取样和量化是针对连续图像。
放大和缩小可用于数字图像。
简单的放大和缩小:500×500 -> 750*750
在原始图像上虚构一个750*750的栅格,显然栅格的间隔小于1个像素。为了对覆盖层上的任何点进行灰度赋值,在原始图像上寻找最靠
的像素并把它的灰度值赋给栅格上的像素:称为最邻近域内插法
寻找最邻近域:
array[y][x];
if (((float)x / 1.5 - 0.5) < 0.0)
        return floor((float)x / 1.5);
else   return ceil((float)x / 1.5);
整数倍扩大与缩小时可以使用像素复制法与删除法。
优点:速度快
缺点:马塞克,特别是放大时
 
稍微改进一点的方法:采用4个最邻近点的双线性内插:还可以采用更多邻近点的插值(更平滑)
v(x', y') = ax' + by' + cx'y' + d;
4个系数由点(x', y')的4个最邻近点写出的4个未知方程决定。
垂直和水平的4个邻近点:(x-1, y), (x+1, y), (x, y-1), (x, y+1)
对于通常数字图像的放大和收缩,双线性内插法首选,效果不错,计算量不大。
 
两个像素的连通性:它们是否相邻,这们的灰度值是否满足特定的相似性准则(比如相等,相差不大)。
 
距离度量:p(x, y), q(s, t)
1. 欧氏距离:D(p, q) = squrt((x-s)*(x-s) + (y-t)*(y-t)); 以(x, y)为圆心r为半径的圆平面
2. 城市街区距离:D(p, q) = |x-s| + |y-t|; 以(x, y)为中心的菱形 D == 1(4邻域)
3. 棋盘距离:D(p, q) = max(|x-s|, |y-t|); 以(x, y)为中心的方形 D == 1(8邻域)
 
线性与非线性操作:
两幅图像f和g与级两个标题a和b关系如下 ,则H称为线性算子:
H(a*f + b*g) = a*H(f) + b*H(g)
线性算子在图像处理中非常重要,是充分了解理解和实践的主要基础。
对K幅图像的求和是一个线性算子,计算两幅图像的差分绝对值的算不是线性算子。
posted on 2010-12-17 18:05 逛奔的蜗牛 阅读(923) 评论(1)  编辑 收藏 引用 所属分类: OpenGL

评论

# re: OpenGL:图像取样量化插值距离算子 2014-04-14 10:13 Friv 1
该算法是困难  回复  更多评论
  


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理