图像LR算法
1. LR分析法的LR(0)分析表的构造
顾名思义,LR(0)分析就是LR(K)分析当K=0的情况,亦即在分析的每一步,只要根据当前的栈顶状态 (或者说根据当前分析栈中已移进或归约出的全部文法符号)就能确定应采取何种分析动作,而无须向前查看输入符号。
为了给出构造LR分析表的算法,我们首先需要引入一些非常重要的概念和术语。 由例4?6对输入串“a,b,a”的分析过程容易看出,如果所分析的输入串没有语法错误,则在分析的每一步,若将分析栈中已移进和归约出的全部文法符号与余留的输入符号串拼接起来,就形成了所给文法的一个规范句型。换言之,也就是在分析的每一步,如输入串已被扫视的部分无语法错误,则当前分析栈中的全部文法符号应当是某一规范句型的前缀。而且还不难看出,此种规范句型的前缀决不会含有句柄右边的任何符号,这是因为一旦句型的句柄在栈的顶部形成,将会立即被归约之故。以后,我们将把规范句型具有上述性质 (即不含句柄之右的任何符号)的前缀称为它的活前缀。例如,对于文法G[L]的规范句型“E,b,a” (见表412分析过程第5步),其句柄为“b”,栈中的符号串为“E,b”,此句型的活前缀为ε,“E”,“E,”,“E,b”等。
由此可见,一个LR分析器的工作过程,实质上也就是一个逐步产生 (或识别)所给文法的规范句型之活前缀的过程。同时,在分析的每一步,分析栈中的全部文法符号 (如果输入串无语法错误)应是当前规范句型的活前缀,并且与此时的栈顶状态相关联。因此,我们自然会想到,如果能构造一个识别所给文法的所有活前缀的有限自动机,那么就能很方便地构造出相应的LR分析表来。稍后我们将讨论这一问题。 上面我们已经说过,在一个规范句型的活前缀中决不含有句柄右边的任何符号。因此,活前缀与句柄的关系不外下述三种情况:
(1) 其中已含有句柄的全部符号 (句柄的最右符号即为活前缀的最右符号);
(2) 其中只含句柄的一部分符号 (句柄开头的若干符号与活前缀最右的若干个符号一致);
(3) 其中全然不含有句柄的任何符号。
第一种情况表明,此时某一产生式A→β的右部符号串β已出现在栈顶,因此相应的分析动作应是用此产生式进行归约。第二种情况意味着形如A→β1β2的产生式的右部子串β1已出现于栈顶,正期待着从余留输入串中看到能由β2推出的符号串。而第三种情况则意味着期望从余留输入串中能看到由某一产生式A→α的右部,即α所推出的符号串。为了刻画在分析过程中,文法的一个产生式右部符号串已有多大一部分被识别,我们可在该产生式的右部的某处加上一个圆点“·”来指示位置。例如,对于上述三种情况,标有圆点的产生式分别为A→β·,A→β1·β2以及A→·α。我们把右部某位置上标有圆点的产生式称为相应文法的一个LR(0)项目。特别,对形如A→ε的产生式,相应的LR(0)项目为A→·。显然,不同的LR(0)项目反映了分析过程中栈顶的不同情况。下面我们就会看到,文法的全部LR(0)项目,将是构造识别其全部活前缀的有限自动机的基础。 在作出文法的全部LR(0)项目之后,现在用它们来构造识别全部活前缀的DFA。这种DFA的每一个状态由若干个LK(0)项目所组成的集合 (称为项目集)来表示。下面以例4?7所给出的文法为例来说明构造此种DFA的方法。
首先,我们用I0表示这个DFA的初态,它预示着分析过程的开始,并且期待着将给定的输入符号串逐步归约为文法的开始符号S′。或者反过来说,我们所期待的是,从使用产生式S′→S开始,能够逐步推导出所给的输入符号串。因此,我们应将项目S′→·S列入状态I0中。换言之,也就是我们期待着将要扫视的输入串正好就是能由S推出的任何终结符号串。然而,由于不能从输入串中直接读出非终结符号S,因此我们也应当把项目S→·A以及S→·B列入到I0中。由于A和B同样是非终结符号,所以又应当将A→·aAb,A→·c和B→·aBb,B→·d列入I0中。由于最后列入I0的项目中,圆点之后都是终结符号,故I0已经“封闭”,构造项目集I0宣告结束。这样,表示初态的项目集I0由如下的项目组成:
I0: S′→·SS→·AA→·aAb
S→·BB→·aBbB→·d
A→·c
我们将项目S′→·S称为项目集I0的基本项目。上述从项目S′→·S出发构造项目集I0的过程,可用一个对其基本项目集{S′→·S}的闭包运算,即CLOSURE({S′→·S})来表示。一般地,设I为一项目集,则构造I的闭包CLOSURE(I)的算法如下:
(1) I中每一项目都属于CLOSURE(I);
(2) 若形如A→α·Xβ的项目属于CLOSURE(I),且X为非终结符号,则文法中任何X产生式的一切圆点在最左边的项目X→·γ也都属于CLOSURE(I);
(3) 重复上述过程,直至不再有新的项目加入CLOSURE(I)为止。
有了初态I0之后,我们来说明如何确定从I0可能转移到的下一个状态。设X为一个文法符号 (终结符号或非终结符号),若I0中有圆点位于X左边的项目A→α·Xβ (其中α可以为ε),则当分析器从输入串识别出 (即移进或归约出)文法符号X后,分析器将进入它的下一个状态。设此状态为Ii,显然Ii中必含有全部形如A→αX·β的项目,我们将这样的项目称为A→α·Xβ的后继项目。对于每一文法符号X,如果存在这样的后继项目,则可能不止一个,设其组成的集合为J,J中的每个项目也就是项目集Ii的基本项目。因此,按照与上面构造项目集I0相类似的讨论,我们就有
Ii=CLOSURE(J)
为了指明Ii是“I0关于文法符号X的后继状态”这一事实,我们可定义一个状态转移函数
GO(I,X)=CLOSURE(J)
其中,I为当前状态,X为文法符号,J为I中所有形如A→α·Xβ的项目的后继项目所组成的集合,而CLOSURE(J)就是项目集I (即状态I)关于X的后继项目集 (即后继状态)。例如,对于上例,我们有:
I1=GO(I0,S)=CLOSURE({S′→S·})={S′→S·}
I2=GO(I0,A)=CLOSURE({S→A·})={S→A·}
I3=GO(I0,B)=CLOSURE({S→B·})={S→B·}
I4=GO(I0,a)=CLOSURE({A→a·Ab,B→a·Bb})=
{A→a·Ab, B→a·Bb, A→·aAb, B→·aBb, A→·c, B→·d}
I5=GO(I0,c)=CLOSURE({A→c·})={A→c·}
I6=GO(I0,d)=CLOSURE({B→d·})={B→d·}
请注意,由于I0中无圆点在b之前的项目,故GO(I0,b)无定义。这样,我们求出了I0的全部后继项目集I1,I2,I3,I4,I5,I6。容易看出,由于I1,I2,I3,I5,I6诸项目集中的项目均无后继项目,因此它们都没有后继状态。对于项目集I4,我们再仿此求出它的后继状态,这些后继状态是:
I7=GO(I4,A)=CLOSURE({A→aA·b})={A→aA·b}
I9=GO(I4,B)=CLOSURE({B→aB·b})={B→aB·b}
此外,由于
GO(I4,a)=I4GO(I4,c)=I5GO(I4,d)=I6
故它们均不产生新的项目集。最后,再求出I7,I9的后继项目集。它们分别是
I8=GO(I7,b)=CLOSURE({A→aAb·})={A→aAb·}
I10=GO(I9,b)=CLOSURE({B→aBb·})={B→aBb·}
由于I8和I10已无后继项目集,所以至此我们已求出所给文法G[S]的全部项目集I0~I10,通常,我们将这些项目集的全体称为文法G[S]的LR(0)项目集规范族,并记为
C={I0,I1,I2,I3,…,I10}
于是,我们所要构造的识别文法G[S]全部活前缀的DFA为
M=(C,V,GO,I0,C)
其中: M的状态集也就是文法的LR(0)项目集规范族C={I0,I1,…,I10};
M的字母表也就是文法的字汇表V={S′,S,A,B,a,b,c,d};
M的映像也就是如上定义的状态转换函数GO;
M的终态集也是C,这表明M的每一状态都是它的终态。
对于上述文法G[S],如上构造的识别其全部活前缀的DFA的状态转换图如图416所示。
由于状态转换图416中的每一个状态都是终态,因此在上述DFA工作的过程中,从初态I0出发,沿着有向边所指示的方向前进,可以使DFA在所经历的任何状态上中止它的工作。当DFA到达某一状态时,我们把从初态I0出发,到达该状态所经过的全部有向边上的标记符号依次连接起来,就得到了DFA在到达该状态时,所识别出的某规范句型的一个活前缀。例如:当上述DFA处于初态I0时,它所识别的活前缀为ε;当M处于状态I3时,它所识别的活前缀为B;当M处于I4时,它所识别的活前缀为aa*;而达到I9时,它所识别的活前缀为aa*B等等。需要注意的是,对那些只含有归约项目的项目集,即M的I1,I2,I3,I5,I6,I8和I10,当M到达这些状态时,表明活前缀中已含有相应句柄的全部符号 (即句柄已在栈顶形成),因此,我们将这些状态称为句柄识别状态。特别是当M处于状态I1时,M所识别的活前缀为S,这意味着已将所给的输入串归约为S,如果再按产生式S′→S归约一步,就得到了拓广文法G′的开始符号S′。因此,我们将状态I1称为“接受状态”,它预示着对输入串的分析已成功地完成。
对于一个给定文法G的拓广文法G′,当识别它的全部活前缀的DFA作出之后,我们就可据此构造相应的LR(0)分析表了。然而,应当首先注意的是,用前述方法所构造的每一个LR(0)项目集,实质上表征了在分析过程中可能出现的一种分析状态;再根据前面对LR(0)项目的分类,项目集中的每一个项目又与某一种分析动作相关联,因此,我们自然会提出这样的要求,即每一项目集中的诸项目应当是相容的。所谓相容,是指在一个项目集中,不出现这样的情况:
(1) 移进项目和归约项目并存;
(2) 多个归约项目并存。
如果一个文法G满足上述条件,也就是它的每个LR(0)项目集中都不含冲突项目,则称G为LR(0)文法。显然,只有当一个文法是LR(0)文法时,才能构造出不含冲突动作的LR(0)分析表来。
从前面的讨论和分析,我们将不难得出构造LR(0)分析表的算法。为方便起见,我们用整数0,1,2,…表示状态I0,I1,…,而且如表411那样,也将GOTO子表中有关终结符号的各列并入ACTION子表相应的各列中去,此外,算法中形如sj和rj等记号的含义同前,此算法如下:
(1) 对于每个项目集Ii中形如A→α·Xβ的项目,若GO(Ii,X)=Ij,且X为一终结符号a时,置ACTION[i,a]=sj。但若X为非终结符号时,则仅置GOTO[i,X]=j。
(2) 若归约项目A→α·属于Ii,设A→α为文法的第j个产生式,则对文法的任何终结符号或句子的右界符# (将它们统一地记为a),置ACTION[i,a]=rj。
(3) 若接受项目S′→S·属于Ii,则置ACTION[i,#]=acc。
(4) 在分析表中,凡不能按上述规则填入信息的元素,均置为“出错”。
2. 12 - SVM, KNN,LR, RF简要介绍
这里接 第11篇 的介绍。
支持向量机是可对类别进行分类的有监督的学习算法。其在样本的特征空间中找出间隔最大的超平面对样本进行分类。SVM根据其学习算法不同可划分为线性可分SVM、线性近似可分SVM与非线性SVM。实现上述三种SVM主要依靠核函数—线性核函数、高斯核函数、多项式核函数与Sigmoid核函数,后三种核函数为非线性,一般建议使用高斯核函数。
如上图,对于二分类,SVM需要确定一条最优直线使两类样本分开,在图1-4中A可以看到有多条直线可将两组分开,但最优的是图1-4中B的w*x+b=0直线。对于最优直线的确定,需要使最优直线到最近点的距离最大,最近点被称为支持向量(如图1-4中B的红点/圈),这里的距离是求出点到直线的距离最大,这是在二维空间,当在三维及其以上的空间时,直线变为超平面,距离则需要求点到超平面的几何距离(Westreich et al 2010)。
SVM的优点:(1)适用各种形式的数据,如文本、图像等;(2)泛化能力较好,即其过拟合的风险小;(3)相对较好地处理高维度数据;(4)核函数的应用使其能很好的适应各种情况。其缺点:(1)对大规模数据难以处理;(2)只依靠少数支持向量决定最终结果,如有异常值,则结果容易出现较大偏差;(3)对缺失值敏感(Westreich et al 2010)。
K最近邻算法是通过计算样本特征之间的距离,根据距离k进行分类,属于无参数分类和回归方法(Altman 1992)。距离k的度量可以使用闵可夫斯基距离、欧氏距离与曼哈顿距离等距离公式进行计算,一般其取20以内的正整数,较大的k取值会降低噪音对分析的影响,且一般对于二分类问题,取k为奇数将有利于判别。
闵可夫斯基距离公式为:
上述公式中,当p=2时,变为欧氏距离,当p=1时,变为曼哈顿距离(Hechenbichler and Schliep 2004)。
KNN属于“懒惰学习”,即只是将训练集数据储存起来,再来新样本时进行距离计算,根据投票结果判别新样本属于哪一类。例如图1-6,蓝色方框与红色三角为已知的训练集,当有绿色圆圈新样本进行判别时,假设k为1,则有两个红色三角与一个为蓝色方框参与判别,这样投票结果为2:1,故绿色圆圈属于红色三角形一类;假如k为2,则有两个红色三角与三个为蓝色方框参与判别,这样投票结果为2:3,故绿色圆圈属于蓝色方框。所以k值需要选择,一般是根据经验进行设置,并且每个样本(如红三角)对判别决策所占的比重也可以进行设定即为权重KNN(Hechenbichler and Schliep 2004)。
逻辑回归是一种有监督的学习方法,其函数基本的公式:
上述公式为Sigmoid函数,图为1-7,其输出值在[0, 1]之间,需要选择一个阈值,通常是0.5,当p(x) > 0.5时,x为A类,如果p(x) < 0.5时,x为B类。阈值可以调整,其代表对于这个事情的把握度,如上述的阈值为0.5,如计算的p(x1)=0.3,则有50%的把握认为x1属于B类(Press 2013)。
LR的运算基本过程:(1)假设p(x)=1,构造sigmoid函数,即利用最大似然取对数作为误差函数,用梯度下降求最小的误差函数值,求出a与b;(2)根据训练数据集多组数据,重复循环(1)n次,计算数据集梯度,更新sigmoid参数,确定最终的sigmoid函数;(3)输入预测集数据;(4)运用最终sigmoid函数求解分类(Dreiseitl and Ohno-Machado 2002)。
LR的优点:(1)容易接收新数据,对模型更新;(2)能够容易解决变量间的共线性问题;(3)运算速度快,适合二分类问题。其缺点:(1)适用的数据和具体场景较少;(2)不适用于样本具有很大的特征值(即变量过多);(3)容易欠拟合,分类准确性较低;(4)使用前提是应变量和自变量有线性关系,只是广义线性模型,不能处理非线性问题。
随机森林是将多个决策树集合在一起的一种算法,基本单元为决策树,并且可以用于回归和分类(Breiman 2001, Liaw and Wiener 2002)。其名字由“随机”与“森林”组成,“随机”有两个含义,一指在训练集中随机且有放回的抽取n个样本进行建模,二指每个节点在特征值M中随机抽取k(k<M)个进行建模,且每个节点处的k应相同,这两个随机使该算法不容易过拟合(Ho 1998)。“森林”即为多个决策树组成,其要求基本同上述的决策树,但这里的决策树没有剪枝的过程,让其尽量生长(Cutler et al 2012)。其将多个决策树组合在一起是采用集成学习方法,该算法的中心思想是让每个决策树产生一个结果,再对这些结果进行统计,哪种结果数量最多,即为最终结果。
RF实现的过程(1)随机有放回的从样本N中选出n个子样本;(2)每个节点在特征值M中随机选出k个特征值;(3)重复第一与第二步s次,创建s个决策树;(4)对s个决策树结果分析,哪一类决策树最多,则最终判别为哪一类。
RF算法主要有两个参数,第一个为抽取每个样本的特征值k,第二个为决策树的数量。特征值k一般建议为全部特征值的开方(Geurts et al 2006)。在确定较优的k后,一般取决策树数为500进行尝试,查看随着决策树的数量增多,袋外错误率是否会稳定在一个定值,取能达到这个定值的最小决策树数的数量。
随机森林算法优点:(1)能够有效处理大数据;(2)能处理高维度变量的样本,不需要降维;(3)能较好处理缺失值问题。其缺点:(1)不能直观进行解释(2)过度拟合某些具有噪声分类。
上述的八种算法,一般多用于二分类问题,如“有或无”与“好或坏”等,但在实际应用中也有较多的多分类问题,如彩虹可以划分7种颜色,当判别一个新的颜色属于这7种颜色的哪一种时,这就需要解决一个七分类问题。多分类是二分类的一个拓展,解决办法有两种,第一种是一对多,即先从K类中选出一种,剩余K-1类归为一种,这样需要建立K个判别模型,当有新数据进行判别时,新样本需在K个判别模型中,同时进行判别,看被判别为哪一类的可能性最大,就判别为哪类;
3. 机器视觉算法有哪些
机器视觉算法基本步骤;
1、图像数据解码
2、图像特征提取
3、识别图像中目标。
机器视觉是人工智能正在快速发展的一个分支。
简单说来,机器视觉就是用机器代替人眼来做测量和判断。
机器视觉系统是通过机器视觉产品(即图像摄取装置,分CMOS和CCD两种)将被摄取目标转换成图像信号,传送给专用的图像处理系统,得到被摄目标的形态信息,根据像素分布和亮度、颜色等信息,转变成数字化信号;图像系统对这些信号进行各种运算来抽取目标的特征,进而根据判别的结果来控制现场的设备动作。
现在做视觉检测的公司比较多,国内国外都有,许多视觉算是很好的。
能提供完整的机器视觉软件解决方案,也可以为客户提供算法级的定制,覆盖所有的工业应用领域,适用范围比较广。机器视觉的应用会越来越多,因为计算的水平越来越高,可以处理更复杂的视觉算法;其实好多的东西,包括现在流行的GPS,最早都是外国的公司在做,程序都是中国人在做外包;
光机电的应用我个人觉得已经很成熟了,不会再有新东西。
4. lr图像大小一般调多少
lr图像大小一般调256k就可以了。JPG前期设置准确的话,画质一样不错,比较考验人,要求前期曝光准,白平衡准,所以另一种说法是大师用JPG,菜鸟用RAW。这个要看情况。
lr图像导出照片srgb大小介绍
机内直出JPG相当于机内压缩,JPG是8bit,RAW一般是14bit,LR把RAW转JPG相当于LR来压缩,只不过LR里面无损原件可调范围大,压缩算法更优秀。图片大小看内容的,你拍一张天空的照片,细节不多,就比较小,拍一张花丛的,就比较大,不信自己试。
另外导出可以限制图片大小的,类似无忌限制256k,你就可以设置这个值,这样导出的jpg如果在无限制情况下大于256k,限制情况下小于256k,尺寸一样,那么就不是100%画质,有一定的压缩,但网上小图区别不大。
5. svm,lr,dt的区别和各自的优势
SVM最早是二分类器,LR是回归方法,两者处理的问题不一样,根本不是一个模型,,,现在扩展了SVM做回归,称为SVR算法,SVR算法和LR的本质区别在于衡量误差标准的不同,所以拟合出来的结果不同,但都是好的拟合方法。
6. LR分析法的SLR(1)分析表的构造
在前面讨论LR(0)分析表的构造算法时,我们曾经指出,仅当一个文法G是LR(0)文法时,才能对它构造出无冲突动作的LR(0)分析表。然而,对于通常的程序设计语言来说,它们一般都不能用LR(0)文法来描述。例如,考虑如下“简单分程序”的文法G[B′]:
0? B′→B3? D→d
1? B→bD;Se4? S→s;S
2? D→D;d5? S→s
相应识别其全部活前缀的DFA及LR(0)分析表如图417及表414所示。由于在项目集I8中,既含有移进项目[S→s·;S],又含有归约项目[S→s·],因而反映到分析表中就出现了具有多重定义的元素ACTION[8,′;′]={s10,r5},前者指明当输入符号为“;”时应将它移进栈中,而后者则要求按第5个产生式S→s进行归约。于是就出现了有“移进归约”冲突的分析动作。又如,对于通常用来描述简单表达式的文法G[E],当构造它的项目集规范族时,也会出现类似的情况。这就表明,这两个文法都不是LR(0)文法。然而,尽管如此,对大多数程序设计语言来说,这种具有冲突项目的项目集,在整个项目集规范族中所占的比例毕竟是很小的。因此,如果我们能设法解决出现在一个项目集中的“移进归约”或“归约归约”冲突,那么,只要对前述构造LR(0)分析表的算法稍加修改,它仍能适用于我们现在讨论的情况。
表414G[B′]的LR(0)分析表
b[]d[];[]s[]e[]#[]B[]D[]S0[]s2[8]11[7]acc2[3]s4[9]33[4]s54[]r3[]r3[]r3[]r3[]r3[]r35[][]s7[][]s8[10]66[6]s97[]r2[]r2[]r2[]r2[]r2[]r28[]r5[]r5[]r5,s10[]r5[]r5[]r59[]r1[]r1[]r1[]r1[]r1[]r110[5]s8[10]1111[]r4[]r4[]r4[]r4[]r4[]r4
仔细分析上述构造LR(0)分析表的算法容易看出,使分析表中出现多重定义分析动作的原因在于其中的规则(2),即对于每一项目集Ii中的归约项目A→α·,不管当前的输入符号是什么,都把ACTION子表相应于Ii那一行 (即第i行)的各个元素指定为rj,其中j是产生式A→α的编号。因此,如果该项目集Ii中同时还含有形如B→α·bβ或C→α·的项目,则在分析表的第i行中,必然会出现多重定义的元素。
由此可见,对于含有冲突的项目集
Ii={B→α·bβ,A→α·,C→α·}
在构造分析表时,如果能根据不同的向前符号a,将Ii中各项目所对应的分析动作加以区分,那么就有可能使冲突得到解决。为此,对于文法中的非终结符号U,我们定义集合
FOLLOW(U)={a|S′#?*…Ua…, a∈VT∪{#}}
即FOLLOW(U)是由所有含U的句型中,直接跟在U后的终结符号或#组成的集合。现对上述项目集Ii,考察FOLLOW(A),FOLLOW(C)及{b},若它们两两不相交,则可采用下面的方法,对Ii中各个项目所对应的分析动作加以区分。
对任何输入符号a:
(1) 当a=b时,置ACTION[i,b]=“移进”;
(2) 当a∈FOLLOW(A)时,置ACTION[i,a]={按产生式A→α归约};
(3) 当a∈FOLLOW(C)时,置ACTION[i,a]={按产生式C→α归约};
(4) 当a不属于上述三种情况之一时,置ACTION[i,a]=“ERROR”。
一般地,若一个项目集I含有多个移进项目和归约项目,例如
I={A1→α·a1β1, A2→α·a2β2,…,Am→α·amβm, B1→α·, B2→α·, …, Bn→α·}
则当集合{a1,a2,…,am},FOLLOW(B1),FOLLOW(B2),…,FOLLOW(Bn)两两不相交时,可类似地根据不同的向前符号,对状态为i时的冲突动作进行区分。
上述用来解决分析动作冲突的方法称为SLR(1)规则。此规则是由F?DeRemer于1971年提出的。
有了SLR(1)规则之后,只须对前述构造LR(0)分析表的算法中的规则(2)作如下的修改:“(2)′若归约项目A→α·属于Ii,设A→α为文法的第j个产生式,则对于任何属于FOLLOW(A)的输入符号a,置ACTION[i,a]=rj”,且其余的规则仍保持不变,就得到了构造SLR(1)分析表的算法。
对于给定的文法G,若按上述算法构造的分析表不含多重定义的元素,则称文法G为SLR(1)文法。例如,对于上面的文法G[B′],它的项目集
I8={S→s·; S,S→s·}
含有冲突的项目,但由于FOLLOW(S)={e}≠{;},故冲突可用SLR(1)规则解决,与上述项目相应的分析动作分别是:
ACTION[8,;]=s10ACTION[8,e]=r5
此外,再注意到FOLLOW(B′)=FOLLOW(B)={#}和FOLLOW(D)={;},则按上述算法为G[B′]所构造的SLR(1)分析表b[]d[];[]s[]e[]#[]B[]D[]S0[]s2[8]11[7]acc2[3]s4[9]33[4]s54[4]r35[3]s7[][]s8[10]66[6]s97[4]r28[4]s10[][]r59[7]r110[5]s8[10]1111[6]r4
7. 怎么用单反相机照出的照片用PS修出偏胶片风格的图像 最好有图
下面操作步骤:
首先是在LR里面的操作
1)基本项:
曝光的控制根据自己的片子来调整,但黑色色阶通常会拉多一点让黑色不实,总之是基本项的思路就是低饱和,低对比度,让片子发灰一些再微加清晰度。这样做的好处,看直方图就可以明白,把两边的图片信息全部拉回来了,获得更多的“数据”,让之后的后期操作有更多的余地。
2)色调曲线项:
这是一个经典曲线,胶片感的曲线大多也就这个样式,“暗部不实,高光泛奶白”就是胶片的特征,这个曲线就把它当成一个公式记住就可以。
3)HSL,颜色选项:
虽然之后在PS里也会有颜色调整,但在LR可以大概的进行调色,LR调色比较直观一些。思路是统一色调,减少每种的颜色的“艳丽”感,如:统一远处的树木的黄色和绿色,绿色中加入一些黑色,让红色不那么艳丽发灰一些。
分离色调,细节选项无操作
4)效果选项:
适量加入一些噪点。
5)相机校准选项:
这个个人感觉很像PS里的混合通道器调色,而在LR里调整感觉更加简单直观容易理解且还有一个单独的饱和度选项,非常的好用。主要用来的让照片“色偏”。这里对红原色和绿原色进行调整
让其更加厚重感。
LR的调色完成导入PS调色,请不要在LR里执行导出操作再导入PS,直接点右键选择“在应用程序中编辑”即可。
在LR转PS的过程中会有一个选项,选择【用Lightroom渲染】,在PS里就是SRGB色域,但有可能有偏色现象,原因不解。选择【仍然打开】在PS里就是AdobeRGB色域,需要在PS手动转一次SRGB色域。
在照片导入LR的时候,不管相机是什么色域,导入后都会变成ProPhotoRGB色域,这是一个比AdobeRGB色域还要“大”的色域。前者选项会有一个ProPhotoRGB色域转SRGB色域的过程,可能是LR算法问题造成了一定的色彩丢失。
导入PS后就是一个可选颜色的微调,参数如下:
6)微调之后,就可以得到效果如下图片了:
7)最后就是色阶对曝光微调,液化,加水印等的常规操作了。
8. LR(1) 分析算法
LR(0) LR(1) 其实没有什么不同的地方,本质区别在于“分析表怎么画”
分析表中的一个状态被叫做项目
这个被叫做项目集。下面举个实例画这个分析表:
然后有以下规则:
首先解释什么是 FIRST_S 集合,简单来说 FIRST_S 集合就是 FIRST 集合,只不过 FIRST_S 可以是一串字符拼接就像图中 。
然后解释 a 的值是什么,简单来说 a 是 FOLLOW( ),所以在这条规则中 a 是 $,而 为空
所以 b = FIRST( $ ) = $
写到这里:关键的地方来了,由于 E 由被写进去了,所以还要将 E 又写进去,此时的 是 +E,a 是 $ 所以 FIRST(+E$ ) = +,最后合并在一起就变成
...
大概以后会看这篇文章:
https://www.ibm.com/developerworks/cn/linux/sdk/lex/index.html
9. lr和acr开raw图像,改成camera standard曝光和色彩还是和原图不同,怎么破。
首先raw本身就是原始数据,无所谓原图是什么样的。对于你的问题,我理解为:相机解析给你看的图像和LR等解析给你看的图像不一样。那是因为相机的机内算法和LR的算法不一样。初始曝光和色彩数据应该在raw的头文件里有记录,通过头文件传递给LR等处理软件,你的状况似乎是此头文件没有传递给LR,或者是LR无法正确解析。因为你没有提及你的相机型号和LR版本信息,无法进一步推测,但是你可以尝试更新LR版本以获得更多的设备型号和更好的支持。另外,在以上条件都满足的情况下,有可能因为误用LR导入时的默认预设也会出现类似情况,你可以先检查一下你的导入设置里是否默认使用了其它预设方案,如果是,将其改为“无”就可以了。
10. LR分析法的LR(1)分析表的构造
前面所介绍的SLR(1)分析法是一种较实用的方法。其优点是状态数目少,造表算法简单,大多数程序设计语言基本上都可用SLR(1)文法来描述。然而,也的确存在这样的文法,其项目集的“移进归约”冲突不可能通过SLR(1)规则得到解决。试看下面的例子。
例4?8考察文法G[S′]=({S′,S,A,B,C,D}, {a,b},,P,S′)其中,P由如下的产生式组成:
0? S′→S4?B→C
1?S→CbBA5?B→Db
2?A→Aab6?C→a
3?A→ab7?D→a
识别此文法的全部活前缀的DFA见图418。其中项目集I10={S→CbBA·,A→A·ab}存在“移进归约”冲突,但因FOLLOW(S)={#},故上述冲突可通过SLR(1)规则得到解决。然而,在项目集I8={C→a·,D→a·}中,由于FOLLOW(C)={a,b},FOLLOW(D)={b},即FOLLOW(C)∩FOLLOW(D)≠?,故用SLR(1)规则解决上述“归约归约”冲突无效。而且还可验证,对于任何K>0,上述文法也是非SLR(k)的,故不能通过任何SLR(k)规则使项目集I8中的“归约归约”冲突得到解决 [2]。因此,我们需要更强的LR分析法,即LR(1)分析方法来解决这一问题。
对SLR(1)规则稍作分析即可发现,它对某些文法失效的原因,在于当所给的文法出现冲突的分析动作时,SLR(1)规则仅孤立地考察输入符号是否属于与归约项目A→α·相关联的集合FOLLOW(A),以确定是否应按产生式A→α进行归约,而没有考察符号串α所在规范句型的“环境”,即没有考察α在规范句型中的“上下文”,这就具有一定的片面性。因为一旦α出现在分析栈的顶部 (设分析栈当前所存放的符号串为#δα),且当前的输入符号a也属于FOLLOW(A),就贸然将α归约为A,此时分析栈中的符号串将变成#δA,但若文法中并不存在以δAa为前缀的规范句型,那么,这种归约无效。例如,对于上述文法中的规范句型Cbabab,当分析达到格局
I0I2I4I8[]#Cbabab(4?50)
时,如果仅根据当前输入符号b∈FOLLOW(C),就将栈顶符号a按产生式C→a归约为C,则有如下的格局:
I0I2I4I6[]#CbCbab
但在该文法中,根本不存在以CbCb为前缀的规范句型,因此在执行下一动作将b移进之前,分析器将报告“出错”。由此可见,在分析过程中,当试图用某一产生式A→α归约栈顶符号串α时,不仅应查看栈中符号串δα,还应向前扫视一输入符号a (我们将a称为向前搜索符号),只有当δAa的确构成文法某一规范句型的前缀时,才能用此产生式进行归约。为了指明上述事实,应当在原来的每一LR(0)项目[A→α·β]中放置一个向前搜索符号a,使之成为[A→α·β,a]的形式,我们将此种项目称为一个LR(1)项目。同时,为了使分析的每一步都能在栈中得到一个规范句型的活前缀,还应要求每一个LR(1)项目对相应的活前缀都是有效的 (其定义在下面给出)。此外,为了克服分析动作的冲突,在必要时,我们还可将某些项目集进行分解,以便使每一个状态都能确切地指明: 当α已出现在栈顶,且面临哪些输入符号时,才能按产生式A→α将α归约为A。
所谓一个LR(1)项目[A→α·β,a]对活前缀γ=δα有效,是指存在规范推导
S?*δAy?δαβyy∈V*T
且满足下列条件:
(1) 当y≠ε时,a是y的首符号;
(2) 当y=ε时,a=#。
例如,对于例4?8所给文法,因有
S?CbBA?CbBab?CbDbab
其中,δ=Cb,α=D,β=b,y=ab,A=B,故LR(1)项目[B→D·b,a]对活前缀γ=CbD有效。又因
S?*CbDbab?Cbabab
其中,δ=Cb,A=D,α=a,β=ε,y=bab,故LR(1)项目[D→a·,b]对活前缀γ=Cba有效。由此也可看出,当分析器所处的格局为式(4?50)时,应当将栈顶符号a归为D,而不应将它归约为C。
与LR(0)文法的情况相类似,识别文法全部活前缀的DFA的每一个状态也是用一个LR(1)项目集来表示,而每一个项目集又是由若干个对相应活前缀有效的LR(1)项目组成。为了构造LR(1)项目集族,我们同样需要用到两个函数,即CLOSURE(I)及GO(I,X)。
对每一LR(1)项目集I,相应的CLOSURE(I)的定义如下:
(1) I中的任何LR(1)项目都属于CLOSURE(I)。
(2) 设项目[A→α·Bβ,a]∈CLOSURE(I),并假设它对活前缀γ=δα有效,则对文法中所有形如B→η的产生式和每一个b∈FIRST(βa),形如[B→·η,b]的全部项目也都对γ有效,故若[B→·η,b]原不在CLOSURE(I)中,则应将其放入。事实上,因为[A→α·Bβ,a]对γ=δα有效,则由定义我们有:
s?*δAy?δαBβyy∈V*T
且a∈FIRST(y)∪{#},故可将上面的推导写成
S?*δAy?δαBβaωω∈V*T∪{#}
现设文法已经过化简,故不论β是否为ε,从βaω总能推出终结符号串,于是可假定
βaω?*bω′
又因a≠ε,有FIRST(βaω)=FIRST(βa),从而就得到推导
S?*δαBbω′
由此可见,一切形如[B→·η,b]的项目也对活前缀γ=δα有效。
(3) 重复步骤(2)直到没有新的项目加入为止。
至于函数GO(I,X),其中I为一LR(1)项目集,X为某一文法符号,与LR(0)文法类似,我们也将它定义为:
GO(I,X)=CLOSURE(J)
其中J是由这样的一些LR(1)项目组成: 对I中所有圆点在X左边形如[A→α·Xβ,a]的项目,其后继项目[A→αX·β,a]∈J。注意,每一LR(1)项目与其后继项目有相同的向前搜索符号。
有了上述CLOSURE(I)和GO(I,X)的定义之后,采用与LR(0)类似的方法,可构造出所给文法G的LR(1)项目集族C及状态转换图。例如,对于上述文法,其LR(1)项目集及状态转换图如图419所示。
对于给定的文法G,当相应的LR(1)项目集族C及GO函数构造出来之后,便可按如下的算法构造它的LR(1)分析表:
(1) 对于每个项目集Ii中形如[A→α·Xβ,b]的项目,若GO(Ii,X)=Ij,且当X为一终结符号a时,置ACTION[i,a]=sj。但若X为一非终结符号时,则置GOTO[i,X]=j。
(2) 若归约项目[A→α·,a]∈Ii,A→α为文法的第j个产生式,则置ACTION[i,a]=rj。
(3) 若项目[S′→S·,#]∈Ii,则置ACTION[i,#]=acc。
(4) 在分析表中,凡不能照上述规则填入信息的元素,均置为“出错”。
对于一个文法G来说,若按上述算法所构造的分析表不含有多重定义的元素,则称此分析表为G的LR(1)分析表。凡具有LR(1)分析表的文法称为LR(1)文法。例如,上述文法的LR(1)分析表见表416,所以它是一个LR(1)文法。