图像线性变化java代码 线性变换下的像

java BufferedImage 如何使图像更小貌似处理2D图形缩放用的是AffineTransform,在JDK文档(我看的中文的哈)里有详细的参数解释,只要学过数组相乘就行了 。
此矩阵将源坐标 (x,y) 变换为目标坐标 (x',y'),这一过程将坐标视为列向量,并用矩阵乘以坐标向量,步骤如下:
[ x'][m00m01m02] [ x ][ m00xm01ym02 ]
[ y'] = [m10m11m12] [ y ] = [ m10xm11ym12 ]
[ 1 ][001] [ 1 ][1]
方法TYPE_MASK_SCALE可以进行缩放操作 , 主要是要会算哈 , 不会就去学线性代数 , 很简单的
常用的像素操作算法:Resize、Flip、Rotate图像缩放是把原图像按照目标尺寸放大或者缩小,是图像处理的一种 。
图像缩放有多种算法 。最为简单的是最临近插值算法,它是根据原图像和目标图像的尺寸,计算缩放的比例,然后根据缩放比例计算目标像素所依据的原像素,过程中自然会产生小数,这时就采用四舍五入,取与这个点最相近的点 。
除此之外,还有双线性插值算法 。
其公式如下:
f(i u,j v) =(1-u)(1-v)f(i,j)(1-u)vf(i,j 1)u(1-v)f(i 1,j)uvf(i 1,j 1)
其中U和V表示浮点坐标的小数部分,显然离目标点距离越近的点的权重越大,这也正符合目标点的值与离他最近的点最接近这一事实 。
cv4j 的resize目前支持这两种算法 。通过Resize类的源码,可以看到有两个常量
使用最临近插值算法,将原图缩小到0.75倍 。
使用双线性插值算法 , 将原图放大2倍 。
效果如下:
Flip是翻转的意思 , 也被称为镜像变换 。又可以分为水平镜像和垂直镜像,水平镜像即将图像左半部分和右半部分以图像竖直中轴线为中心轴进行兑换,而竖直镜像则是将图像上半部分和下半部分以图像水平中轴线为中心轴进行兑换 。
flip的算法很简单
实现具体的左右翻转
实现具体的上下翻转
效果如下:
图像旋转是指图像以某一点为中心旋转一定的角度 , 形成一幅新的图像的过程 。当然这个点通常就是图像的中心 。既然是按照中心旋转,自然会有这样一个属性:旋转前和旋转后的点离中心的位置不变 。
图像的旋转是图像几何变换的一种,旋转前后的图像的像素的RGB都是没有改变的,改变的只是每一个像素的所在位置 。
cv4j 提供两种旋转的算法:NormRotate和FastRotate
下面以NormRotate为例,使用起来很简单,旋转120度,背景为红色 。
效果如下:
cv4j是 gloomyfish 和我一起开发的图像处理库,纯java实现,我们已经分离了一个Android版本和一个Java版本 。
像素操作是cv4j的基本功能之一,本文介绍了三种常见的变换 。我们可以通过图像的Resize、Flip、Rotate变换来丰富图片数据的多样性 。
如果您想看该系列先前的文章可以访问下面的文集:
APAP:使用移动直接线性变换尽可能投影图像拼接 作者研究了模型不足下图像线性变化java代码的投影估计图像线性变化java代码,即当数据不完全满足投影模型图像线性变化java代码的基础假设时图像线性变化java代码,图像线性变化java代码我们专注于图像拼接的任务,该任务通常通过估计投影扭曲来解决。当场景是平面或视图完全因旋转而不同时,这种模型是合理的 。在实践中很容易违反这些条件,这会产生带有重影伪影的拼接结果,因此需要使用去重影算法 。为此,我们提出尽可能投影的扭曲,即旨在全局投影的扭曲,但允许局部非投影偏差解释对假设成像条件的违反 。基于一种称为移动直接线性变换 (Moving DLT) 的新型估计技术,我们的方法无缝地桥接了与投影模型不一致的图像区域 。结果是高度准确的图像拼接,显着减少了重影效果,从而降低了对事后反重影的依赖 。
在图像拼接任务中,通常采用估计2D投影扭曲使图像对齐,即估计一个的单应矩阵 。但当场景并非平面,或者视图完全不同时,投影模型无法充分表征所需扭曲,导致错位或者重影 。
商业软件,如AutoStitch、Photosynth等,使用投影扭曲使图像对齐,当条件不满足时 , 依赖去重算法实现最终效果 。
作者提出的As-projective-as-possible方法通过全局投影,但允许局部偏差来解释因为模型的不足 。作者提到,投影扭曲模型不能完全解释实际中的相机移动情况下的图像拼接并不是因为图像中有噪声存在,而是实际的模型本身并不是完全线性的 。如下图所示 。
作者将二维的图像对应关系投影到一维 , 发现两个视图对应关系并不是完全线性的,且并不是由于噪声带来的误差 。尽可能仿射的方法拟合的模型只能调整局部偏差尽量拟合模型,而不能强加全局投影 。但在尽可能投影的方法中却能更好地拟合模型 。
投影扭曲
令具有重叠部分的图像和间的匹配点对为和 , 则投影变换或单应矩阵为
其中是的齐次坐标 。
其中表示的第行的元素 。(分母部分的上标似乎是转置符号)
由可得
令为上式矩阵的前两行,与第对数据有关,DLT估计的值为
其中是的垂直堆叠,并约束,。
移动DLT
为了避免产生伪影,作者的想法是根据每一个使用位置依赖单应变换:
其中需要添加一个权重 。
约束并且权重计算公式为:
其中是尺度因子,其中距离越远的产生的权重越小 。
因此局部扭曲变换估计可以由下式表示:
其中权重矩阵,即
当处于一个较差的位置时,权重将不重要,采用一个小的值抵消掉权重,.
移动DLT可以看作是MLS的投影版本,MLS利用矩阵估计每一个的仿射变换 。
作者采用RANSAC算法作为全局单应性求解 。
划分单元格
对图像中所有的都估计局部单应显然是浪费时间的,作者将图像划分为的网格,只对网格中心的坐标估计局部单应变换,可以有效将WSVD(带权重的SVD)的数量减少到个 。
更新加权SVD
当设置时,由上图直方图统计可以看出 , 在实际拼接场景中大部分网格拥有少于20个权重 。作者利用这一观察结果,可以从以前的方案中更新WSVD , 而不是从头计算 。
令,令 , 则
令,除了第个对角线元素,的分解可以变为单秩更新 。
其中,表示的第行 , 且,单秩更新的算法复杂度为.
我们已经提出了一种用于 2D 变形函数的尽可能投影的估计方法 。图像拼接的结果显示出令人鼓舞的结果,我们的方法能够准确地对齐差异超过纯旋转的图像 。实验还表明,当相机平移趋于零时,所提出的扭曲可以优雅地减少为全局单应性,但随着平移的增加,可以灵活地适应模型的不足 。这产生了高度准确的图像拼接技术 。
MTK P修改亮度调节线性变换为等差变换通过调节亮度找log可以发现调节亮度时,进入的是SystemUI\src\com\android\systemui\settings\BrightnessDialog.java
修改GAMMA_SPACE_MAX为245
245 = (255 -10 ) ; 其中的255表示最大亮度,10 表示最低亮度(不可为0)
val取值范围(10 - 255 )
修改如下:
convertGammaToLinear方法中修改:移除相关处理 , 修改为return当前的值
convertLinearToGamma方法中修改:移除相关处理 , 直接return当前的值
图像线性变换的本质图像线性变换图像线性变化java代码的本质是什么的呀图像线性变化java代码?
图像的线性变换实际上就是图像的缩小和放大的意思的吧图像线性变化java代码,
就是相当于对图像进行PID的变换而已 。
求一个C语言图形变换程序,先进行图形绘制,后能进行图形复制、移动、缩放、旋转,跪求啦 。。。从这一部分开始 , 进入了图形编程的比较烦琐的部分,要真正对图形编程有所了解,这一部分的内容是必须要掌握的 。
在计算机绘图过程中,经常需要进行绘图变换,主要包括二维图形变换和三维图形变换 。这一部分讨论二维图形变换 , 其内容有用户坐标到屏幕坐标的变换、图形的比例变换、对称变换、错切变换、旋转变换、平移变换和复合变换等 。后面讲到了二维剪裁,即线段裁剪与多边形裁剪 。
第一节用户坐标到屏幕坐标变换
假设纸上有一个图形,要用计算机把它在屏幕上画出来 。那么首先遇到的问题是,纸上的图形采用的坐标是实数域域中的直角坐标系或是极坐标系 , 统称为用户坐标系 。而屏幕上采用的坐标系是整数域中直角坐标系,这类坐标系统称为设备坐标系 。因此用户坐标系中图形需要经过变换才能绘制在屏幕上,显然这个变换的内容包括: 1)将用户坐标系中任意范围区域转换到屏幕某个范围区域,从而用户坐标系此范围区域内的图形也转换到屏幕上该范围区域内 。2)用户坐标系此区域内图形上的坐标值转换到屏幕上该范围区域内后不一定是整数,取整后才成为该范围区域内的屏幕坐标值 。3)用户坐标右手系到屏幕坐标左手系的坐标轴方向变换 。4)当屏幕坐标系水平方向与垂直方向刻度不等(即像素间距不等)时,为保持图形不走样,还要进行比例变换 。下面介绍这些内容的具体计算问题 。
1.窗口到视口的变换
更确切地说,是实际图形到屏幕图形的转换 。有时也称为数据规格化 。
在用户坐标系中,指定一矩形域以确定要显示(或绘制)的图形部分,这个矩形区域称为窗口 。在屏幕上可任选一矩形域以显示(或绘制)窗口内的图形,该域称为视口 。如图2-1所示 。
一般视窗口的四条边界分别为:
左边界 x=x1、右边界 x=x2.下边界 y=y1,上边界y=y2 。
视口的四条边界分别为:
左边界sx=sx1,右边界sx=sx2,上边界sy=sy1,下边界sy=sy2 。
经变换后应有,窗口的上边界线段(或下边界线段)长x2-x1变换成视口上边界线段(或下边界线段)长sx2-sx1 。设其比例变换因子为k1,则可得
k1*(x2-x1)=sx2-sx1
k1=(sx2-sx1)/(x2-x1)
对窗口内任一x坐标(x1=x=x2)变换后为视口内水平方向sx坐标(sx1=sx=sx2) 。由上述有:
k1*(x-x1)=sx-sx1
sx=sx1 k1*(x-x1)
=sx1 (x-x1)*(sx2-sx1)/(x2-x1)
同样,经变换后窗口的左边界线段(或右边界线段)长y2-y1变换成视口左边界线段(或右边界线段)长sy2-sy1 。设其比例变换因子为k2,则可得
k2*(y2-y1)=sy2-sy1
k2=(sy2-sy1)/(y2-y1)
对窗口内任一y坐标(y1=y=y2)变换后为视口内垂直sy坐标(sy1=sy=sy2),应有
k2*(y-y1)=sy-sy1
sy=sy1 k2*(y-y1)
=sy1 (y-y1)*(sy2-sy1)/(y2-y1)
于是对窗口内图形上任一点坐标(x,y)变换到屏幕上视口内成为(sx,sy),则
sx=sx1 (x-x1)*(sx2-sx1)/(x2-x1)
sy=sy1 (y-y1)*(sy2-sy1)/(y2-y1)
写成简式
sx=k1*x a
sy=k2*y b
这里
a=sx1-k1*x1
b-sy1-k2*y1
k1=(sx2-sx1)/(x2-x1)
k2=(sy2-sy1)/(y2-y1)
2. 实型值到整型值的变换
上面对窗口内图形上任一点坐标(x,y)变换到屏幕上视口内成为(sx,sy),
sx=k1*x a
sy=k2*y bk1,k2,a,b同上
这样计算出来的sx,sy一般是实型值,而屏幕上视口内屏幕坐标是整型值,因此要将sx,sy实型值转换成屏幕坐标系的整型值 。这可以通过四舍五入的方法将实型值的绝对值圆整化 。由于C语言中已经替我们想到了这点,它提供的函数可以自动取整,因此用户在调用标准函数在屏幕上绘图时一般不需要考虑这个问题 。当然也可以用赋值的类型转换规则来实现实型值到整型值的变换 。
3. y坐标值方向变换
一般屏幕坐标系是直角左手系,y轴方向向下为正,原点在屏幕的左上角,如图2-2所示 。
窗口内图形上任一点(x,y)变换到视口内成为(sx,xy),而(x,y)是相对用户坐标系(直角右手系)的 。(sx,sy)是相对屏幕坐标系(直角左手系)的,因此y轴方向相反 。为使窗口内图形变换到视口上图形其形状一致,需将视口上图形y轴方向变换成窗口内图形y轴方向 。这只要将求得的视口内各点的sy整型坐标均用sy2去减,即sy2-sy(整型)代替sy(整型)即可,经这样的坐标轴方向变换后得到的视口内图形与窗口内图形一致 。
4.长宽比例变换
屏幕坐标系x方向与y方向上的刻度可能不一样,这取决于水平方向像素间距与垂直方向偈素间距大小是否一致 。如果两个方向的刻度不相等,那么用户坐标系下一个正方形将显示(或绘制)成为一个长方形有,一个圆将成为一个椭圆 。
为保持原图形的长宽比 。使图形显示(或绘制)后不走样,需求出屏幕上两侍标轴刻度的比值(即纵横比) 。可以用函数getaspectratio()(见前文所述)返回x方向和y方向的比例数,从而求得这个比值 。再瘵原图形y方向坐标乘以该比值,这样显示(或绘制)出来的图形应不走样 。若不考虑图形的走样 , 就不必作这个变换 。
第二节 二维几何变换
图形的几何变换一般是指对图形的几何信息经过变换后产生新的图形,图形几何变换既可以看作是坐标系不动而图形变动,变动后的图形在坐标系中的坐标值发生变化;出可以看作图形不动而坐标系变动,变动后的图形在新坐标系下具有新的坐标值 。这两种情况本质上都是一样的,都是图形由新的坐标值表示 , 因此是新产生的图形 。图形几何变换包括比例变换、对称变换、错切变换、旋转变换、平移变换及其复合变换 。图形上所有的点在几何变换前后的坐标关系一般用解析几何方法可以求得,但这些几何关系用矩阵方法表示,运算更为方便 。
一、基本变换
图形基本几何变换是指比例变换、对称变换、错切变换、旋转变换和平移变换等 。除平移变换外,这里其它四种几何变换都可以用组成图形的点向量(或称1×2阶矩阵)和2×2阶变换矩阵相乘表示,而平移变换需引入新方法来实现 。
1、比例变换
设图形上一点P(x,y),经比例变换后成为新的菜上一点P'(x',y'),即有
x'=a*x
y'=d*y
式中a,d为比例因子
将此比例变换式写成矩阵式得
a0
[x' y']=[x y]= [x y] * T
0d
a0
这里 T=叫做比例变换矩阵 。若a=d,则x,y坐标按同一比例变换 。
0d
当a=d1时 , 图形放大;当0a=d1时 , 图形缩小 。
若a≠d,则x,y坐标按各自不同比例变换 。
30
例 1: 设有比例变换矩阵 T=, 三角形abc经过比例变换成为三角形a'b'c' 。
01
如图2-3所示 。
30
a [1 2]= [3 2]a'
01
30
b [2 2]= [6 2]b'
01
30
c [2 3]= [6 3]c'
01
2. 对称变换
图形上一点P(x,y)经关于原点对称变换后成为新图形上一点P'(x',y'),则
x' = -x
y' = -y
写成矩阵形式成为
-10
[x' y'] = [x y]= [x y] * T
0-1
-10
这里 T =为关于原点对称变换矩阵 。
0-1
若关于x轴对称,则对称变换的矩阵表示为
10
[x' y'] = [x y]= [x y] * T
0-1
10
于是关于x轴对称变换矩阵 T =
0-1
若关于y轴对称,则对称变换的矩阵表示为
-10
[x' y'] = [x y]= [x y] * T
01
-10
于是关于y轴对称变换矩阵 T =
01
若关于直线y = -x对称 , 则对称变换矩阵表示为
0-1
[x' y'] = [x y]= [x y] * T
-10
01
于是关于直线 y = x对称变换矩阵 T =
10
各种对称变换的图形均可由实例程序绘出 , 参见实例程序图形 。
3. 错切变换
对图形的任一点P(x,y) , 作线性变换如下
x' = xby
y' = ydx
式中b,d为不全为零的常 数,点P'(x',y')为新图形上相应的点,这个变换称为图形的错切变换 。
错切变换的矩阵表示为
1d
[x' y'] = [x y]= [x y] * T
b1
1d
T =叫做错切变换矩阵(b,d不全为零) 。
b1
① 当d=0时,x'=x by,y'=y,这时图形的y坐标不变,x坐标值随(x,y)及系数b作线性变化 。若b0时,图形沿x轴作错切位移;若b0,图形沿x轴负向作错切位移 。
② 当b=0时,x'=x,y'=dx y,此时图形的x坐标不变y坐标随(x,y)及系数d作线性变化 。如d0,图形沿y轴正向作错切位移;如d0 , 图形沿y轴负向作错切位移 。
③ 当b≠0且d≠0时,x'=x by,y'=y dx,图形沿x,y两个方向作错切位移 。
12
例 2: 设有错切变换 矩阵 T = , 正方形abcd经此错切变换成为四边形a'b'c'd',
01
如图2-4所示 。
12
a [0 0]= [0 0]a'
01
12
b [1 0]= [1 2]b'
01
12
c [1 1]= [1 3]c'
01
12
d [0 1]= [0 1]d'
01
4. 旋转变换
设图形上一点P(x,y)绕原点逆时针旋转θ角后成为新的图形上一点P'(x',y'),则由解析几何方法可得
x' = xcosθysinθ
y' = -xsinθycosθ
用矩阵表示为
cosθ-sinθ
[x' y'] = [x y]= [x y] * T
sinθcosθ
cosθ-sinθ
这里 T =为绕原点逆时针变换矩阵 。若顺时针旋转时,θ角为负值 。
sinθcosθ
5. 平移变换
若图形上一点P(x,y)沿x轴平移 l距离,沿y轴平移m距离后成为新的图形上一点P'(x',y'),则有
x' = xl
y' = ym
式中l,m不全为零 , 这称为平移变换 。但此变换无法用组成图形的点向量和2×2阶变换矩阵相乘来实现 。
用二维点向量和2×2阶矩阵相乘不能表示图形的平移变换,那么自然会想到用三维点向量和3×3阶矩阵相乘来实现图形的平移变换 。因此对图形上二个坐标的点向量需要添加一个坐标,使之成为三维点向量以便与三阶矩阵相乘,进而实现用矩阵表示平移变换 。实际上就是对上面的二个坐标变换式添加第三个坐标变换式,即成为
x' = xl
y' = ym
k = k
这第三个坐标变换式(即k=k)必须是恒等式,因为不需作变换,本质上是为了进行矩阵运算而引入的 。
将此三个变换式(仍然是图形的平移变换,不妨将k = k取成1=1)写成矩阵得
100
[x' y' l] = [x y l]010= [x y 1] * T
lm1
100
显然 T =010为图形的平移变换矩阵 。
lm1
这里通过对原图形上二维点向量引进第三个坐标成为三维点向量 , 从而使原图形的平移变换 能用矩阵表示 。同样其它基本变换也可以如此用矩阵表示 。因此图形的基本变换都可以在这样的三维点向量下统一、整齐用矩阵表示 。这样的三维点向量称为齐次点向量,也叫三维齐次坐标点,简称三维齐次坐标 。只有在三维齐次坐标下,二维几何变换才都可以用矩阵表示 。下面再进一步讨论一下齐次坐标的优点 。
引用齐次坐标后,可将上面各种基本变换矩阵统一在一个三阶矩阵中 。即
ab0
T =cd0
lm1
式中左上角二阶矩阵实现比例、对称、错切、旋转等变换 , 左下角1×2阶矩阵实现平移变换 , 其中a,b,c,d,l,m只要赋以相应的值,并建立图形上点的齐次坐标(即在图形上点的坐标后引入第三个坐标1),这样就可以用图形上点的三维齐次坐标与此三阶矩阵相乘来表示三维图形的基本几何变换了 。而变换后,不用考虑第三个坐标1 , 前面两个坐标就反映了图形的整个变换情况 。
用齐次坐标表示一个图形上的点,可以有多种表示,如(6,8,1)、(12,16,2)、(30,40,5)等均表示图形上同一个点(6,8) 。这样,齐次坐标可以表示计算机无法容纳的数 。例如当计算机的字长为16位时,它能表示的最大整数为216-1=32767 。若点坐标为(80 000,40 000),则计算机无法表示 。但用齐次坐标可表示为(20 000,10 000,1/4),经过处理后再用第三个坐标支除前面两个坐标 , 从而得到原来通常的坐标 。
齐次坐标优点很多,在计算机绘图中都采用这种表示来处理图形 。下面介绍的图形复合几何变换就是如此 。
二、复合变换
图形的复合几何变换是指图形作一次以上的基本几何变换,变换结果是每次基本变换矩阵的乘积 。图殂的复合几何变换简称复合变换 。
1. 复合平移
若对图形首先作平移变换 T1,然后再作平移变换T2,相应的平移变换矩阵分别为
100
T1 = 010
l1m11
100
T2 = 010
l2m21
则变换结果为复合平移变换T,其复合平移变换矩阵为
T = T1 * T2
100100
= 010*010
l1m11l2m21
100
= 010
l1 l2m1|m21
【图像线性变化java代码 线性变换下的像】关于图像线性变化java代码和线性变换下的像的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站 。

    推荐阅读