资源描述:
《图像处理之直方图匹配》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、直方图匹配,又称直方图规定化,即变换原图的直方图为规定的某种形式的直方图,从而使两幅图像具有类似的色调和反差。直方图匹配属于非线性点运算。 直方图规定化的原理:对两个直方图都做均衡化,变成相同的归一化的均匀直方图,以此均匀直方图为媒介,再对参考图像做均衡化的逆运算//////直方图匹配//////原始图像///匹配图像///处理后图像///处理成
2、功true失败falsepublicstaticboolHistogramMatching(BitmapsrcBmp,BitmapmatchingBmp,outBitmapdstBmp){if(srcBmp==null
3、
4、matchingBmp==null){dstBmp=null;returnfalse;}dstBmp=newBitmap(srcBmp);BitmaptempSrcBmp=newBitmap(srcBmp);BitmaptempMatchingBmp=newBitmap(matchingBmp);double[]srcCpR=null;double
5、[]srcCpG=null;double[]srcCpB=null;double[]matchCpB=null;double[]matchCpG=null;double[]matchCpR=null;//分别计算两幅图像的累计概率分布getCumulativeProbabilityRGB(tempSrcBmp,outsrcCpR,outsrcCpG,outsrcCpB);getCumulativeProbabilityRGB(tempMatchingBmp,outmatchCpR,outmatchCpG,outmatchCpB);doublediffAR=0,diffBR=0,diff
6、AG=0,diffBG=0,diffAB=0,diffBB=0;bytekR=0,kG=0,kB=0;//逆映射函数byte[]mapPixelR=newbyte[256];byte[]mapPixelG=newbyte[256];byte[]mapPixelB=newbyte[256];//分别计算RGB三个分量的逆映射函数//Rfor(inti=0;i<256;i++){diffBR=1;for(intj=kR;j<256;j++){//找到两个累计分布函数中最相似的位置diffAR=Math.Abs(srcCpR[i]-matchCpR[j]);if(diffAR-diffBR<
7、1.0E-08){//当两概率之差小于0.000000001时可近似认为相等diffBR=diffAR;//记录下此时的灰度级kR=(byte)j;}else{kR=(byte)Math.Abs(j-1);break;}}if(kR==255){for(intl=i;l<256;l++){mapPixelR[l]=kR;}break;}mapPixelR[i]=kR;}//Gfor(inti=0;i<256;i++){diffBG=1;for(intj=kG;j<256;j++){diffAG=Math.Abs(srcCpG[i]-matchCpG[j]);if(diffAG-diff
8、BG<1.0E-08){diffBG=diffAG;kG=(byte)j;}else{kG=(byte)Math.Abs(j-1);break;}}if(kG==255){for(intl=i;l<256;l++){mapPixelG[l]=kG;}break;}mapPixelG[i]=kG;}//Bfor(inti=0;i<256;i++){diffBB=1;for(intj=kB;j<256;j++){diffAB=Math.Abs(srcCpB[i]-matchCpB[j]);if(diffAB-diffBB<1.0E-08){diffBB=diffAB;kB=(byte)j;
9、}else{kB=(byte)Math.Abs(j-1);break;}}if(kB==255){for(intl=i;l<256;l++){mapPixelB[l]=kB;}break;}mapPixelB[i]=kB;}//映射变换BitmapDatabmpData=dstBmp.LockBits(newRectangle(0,0,dstBmp.Width,dstBmp.Height),ImageLockMode.ReadWrite,Pix