基于C#图像融合的设计Word文件下载.docx
- 文档编号:20805706
- 上传时间:2023-01-25
- 格式:DOCX
- 页数:20
- 大小:4.02MB
基于C#图像融合的设计Word文件下载.docx
《基于C#图像融合的设计Word文件下载.docx》由会员分享,可在线阅读,更多相关《基于C#图像融合的设计Word文件下载.docx(20页珍藏版)》请在冰豆网上搜索。
主题:
《图像融合》
详细说明:
分别读入资源图片和背景图片,对资源图分别进行色彩空间处理、三种颜色分量的变换、修改透明度并进行切割等操作。
将分割出来的资源图像复制到背景图像的对应的位置上(利用的是色素的拷贝)。
对最终融合的图像进行颜色和光照的处理。
二、现实意义:
对象场景融合在图像编辑领域有非常广泛的应用,特别是在影视制作过程中,很多镜头无法通过实地拍摄获得,这些镜头就可以借助对象场景融合技术来实现。
3、涉及知识内容:
1.读入图像
2.RGB色彩空间转换HSI色彩空间的算法
3.RGB色彩空间转换为灰度图形的算法
4.提取每个像素点上的各个的色彩分量
5.增减和减少每个色素点分量的值
6.在指点的区域空间上显示一张图片
7.按照指定的区域空间惊醒切割图像
8.像素的拷贝
9.把Graphics图像转换为Image图像
10.对图形的保存
11.对像素部分区域操作实现光照效果
12.保存操作完成的图片
4、实例分析及截图效果:
1.读入背景图和资源图片
实现代码
privatevoid打开资源图ToolStripMenuItem_Click(objectsender,EventArgse)
{
openFileDialog1.Filter="
*.jpg,*.jpeg,*.bmp|*.jpg;
*.jpeg;
*.bmp"
;
openFileDialog1.ShowDialog();
if(this.openFileDialog1.FileName.Trim()=="
"
)
return;
try
ImagemyImage=System.Drawing.Image.FromFile(openFileDialog1.FileName);
MyBitmap=newBitmap(myImage);
//把打开的图像赋给Bitmap变量
BitmapSrcBitmap=newBitmap(this.openFileDialog1.FileName);
MyBitmap=newBitmap(SrcBitmap,MyBitmap.Width,MyBitmap.Height);
pictureBox2.Visible=true;
pictureBox2.Width=myImage.Width;
pictureBox2.Height=myImage.Height;
this.pictureBox2.Image=MyBitmap;
//在控件上显示图像
theImage=pictureBox2.Image;
ig=Graphics.FromImage(MyBitmap);
ig.DrawImage(MyBitmap,pictureBox2.ClientRectangle);
}
catch
//提示对话框
MessageBox.Show(this,"
打开图像文件错误"
"
信息提示"
MessageBoxButtons.OK,MessageBoxIcon.Information);
privatevoid打开背景图ToolStripMenuItem_Click(objectsender,EventArgse)
editFileName=openFileDialog1.FileName;
//把打开的图像赋给Bitmap变量
myImage=Image.FromFile(openFileDialog1.FileName);
theImageB=Image.FromFile(openFileDialog1.FileName);
pictureBox1.Width=myImage.Width;
pictureBox1.Height=myImage.Height;
this.pictureBox1.Image=MyBitmap;
打开图像文件错误?
运行结果截图
2.对资源图片进行红、绿、蓝三色的变化
实现代码(只显示了蓝色分量,红色和绿色类似)
privatevoid增强蓝色分量ToolStripMenuItem_Click(objectsender,EventArgse)
intHeight=this.pictureBox2.Image.Height;
intWidth=this.pictureBox2.Image.Width;
Bitmapnewbitmap=newBitmap(Width,Height);
Bitmapoldbitmap=(Bitmap)this.pictureBox2.Image;
Colorpixel;
for(intx=1;
x<
Width;
x++)
for(inty=1;
y<
Height;
y++)
intr,g,b;
pixel=oldbitmap.GetPixel(x,y);
r=pixel.R;
g=pixel.G;
b=pixel.B+10;
if(b>
=255)
b=255;
newbitmap.SetPixel(x,y,Color.FromArgb(r,g,b));
this.pictureBox2.Image=newbitmap;
theImage1=newbitmap;
theImage=newbitmap;
catch(Exceptionex)
MessageBox.Show(ex.Message,"
3.调整HSI空间上的值(资源图和背景图)
publicvoidadjustCom1(bytechangTab,intnumCom1,intnumCom2,intnumCom3,intp)
intHeight;
intWidth;
Bitmapnewbitmap;
Bitmapoldbitmap;
if(p==1)
Height=pictureBox2.Image.Height;
Width=pictureBox2.Image.Width;
newbitmap=newBitmap(Width,Height);
oldbitmap=(Bitmap)pictureBox2.Image;
else{
Height=pictureBox1.Image.Height;
Width=pictureBox1.Image.Width;
oldbitmap=(Bitmap)pictureBox1.Image;
doubler,g,b;
if(changTab==255)
b=pixel.B;
newbitmap.SetPixel(x,y,Color.FromArgb((int)r,(int)g,(int)b));
doublevalueCom1=numCom1/100.0;
doublevalueCom2=numCom2/100.0;
doublevalueCom3=numCom3/100.0;
doublehue,sat,inten;
if(changTab==0)
if(valueCom1<
=0)
r=(byte)(r*(1.0+valueCom1));
else
r=(byte)(r+(255.0-r)*valueCom1);
if(valueCom2<
g=(byte)(g*(1.0+valueCom2));
g=(byte)(g+(255.0-g)*valueCom2);
if(valueCom3<
b=(byte)(b*(1.0+valueCom3));
b=(byte)(b+(255.0-b)*valueCom3);
else
valueCom1=valueCom1*Math.PI/1.8;
r=pixel.R/255.0;
g=pixel.G/255.0;
b=pixel.B/255.0;
doubletheta=Math.Acos(0.5*((r-g)+(r-b))/Math.Sqrt((r-g)*(r-g)+(r-b)*(g-b)+0.0000001))/(2*Math.PI);
hue=(b<
=g)?
theta:
(1-theta);
sat=1.0-3.0*Math.Min(Math.Min(r,g),b)/(r+g+b+0.0000001);
inten=(r+g+b)/3.0;
hue=hue*2*Math.PI;
hue=(hue+valueCom1+2*Math.PI)%(2*Math.PI);
sat=sat*(1.0+valueCom2);
sat=sat+(1.0-sat)*valueCom2;
inten=inten*(1.0+valueCom3);
inten=inten+(1.0-inten)*valueCom3;
if(sat==1.0)
sat=sat*(1-valueCom3);
if(sat==0.0)
hue=0;
if(hue>
=0&
&
hue<
2*Math.PI/3)
b=inten*(1-sat);
r=inten*(1+sat*Math.Cos(hue)/Math.Cos(Math.PI/3-hue));
g=3*inten-(r+b);
elseif(hue>
=2*Math.PI/3&
4*Math.PI/3)
r=inten*(1-sat);
g=inten*(1+sat*Math.Cos(hue-2*Math.PI/3)/Math.Cos(Math.PI-hue));
b=3*inten-(r+g);
g=inten*(1-sat);
b=inten*(1+sat*Math.Cos(hue-4*Math.PI/3)/Math.Cos(5*Math.PI/3-hue));
r=3*inten-(g+b);
if(r>
1)
r=1;
if(g>
g=1;
b=1;
r=r*255;
g=g*255;
b=b*255;
this.pictureBox1.Image=newbitmap;
4.调整透明度
publicvoidTouMing(intn)
float[][]nArray={newfloat[]{1,0,0,0,0},
newfloat[]{0,1,0,0,0},
newfloat[]{0,0,1,0,0},
newfloat[]{0,0,0,n*0.1f,0},
newfloat[]{0,0,0,0,1}};
ColorMatrixmatrix=newColorMatrix(nArray);
ImageAttributesattributes=newImageAttributes();
attributes.SetColorMatrix(matrix,ColorMatrixFlag.Default,ColorAdjustType.Bitmap);
Bitmapoldbitmap=(Bitmap)theImage;
BitmapresultImage=newBitmap(oldbitmap.Width,oldbitmap.Height);
Graphicsg=Graphics.FromImage(resultImage);
g.DrawImage(oldbitmap,newRectangle(0,0,oldbitmap.Width,oldbitmap.Height),0,0,oldbitmap.Width,oldbitmap.Height,GraphicsUnit.Pixel,attributes);
this.pictureBox2.Image=resultImage;
theImage1=pictureBox2.Image;
5.切割
1 固定需要切割的区域
privatevoidpictureBox2_MouseMove(objectsender,MouseEventArgse)
if(e.Button==MouseButtons.Right)
if(flag)
pictureBox2.Left=pictureBox2.Left+(e.X-x);
pictureBox2.Top=pictureBox2.Top+(e.Y-y);
Graphicsg;
g=pictureBox2.CreateGraphics();
if(isDrawing)
switch(tool)
caseTools.None:
break;
caseTools.Pen:
//从上一个点到当前点绘制线段
g.DrawLine(newPen(foreColor,1),oldPoint,newPoint(e.X,e.Y));
ig.DrawLine(newPen(foreColor,1),oldPoint,newPoint(e.X,e.Y));
oldPoint.X=e.X;
oldPoint.Y=e.Y;
caseTools.Ellipse:
//首先恢复此次操作之前的图像,然后再添加Ellipse
this.pictureBox2_Paint(this,newPaintEventArgs(pictureBox2.CreateGraphics(),pictureBox2.ClientRectangle));
g.DrawEllipse(newPen(foreColor,1),startPoint.X,startPoint.Y,e.X-startPoint.X,e.Y-startPoint.Y);
w=e.X-startPoint.X;
h=e.Y-startPoint.Y;
caseTools.Rectangle:
//首先恢复此次操作之前的图像,然后再添加Rectangle
g.DrawRectangle(newPen(foreColor,1),startPoint.X,startPoint.Y,e.X-startPoint.X,e.Y-startPoint.Y);
2 切割
Privatevoid切割ToolStripMenuItem1_Click(objectsender,EventArgse)
if(tool==Tools.Rectangle)
Bitmapnewbitmap=newBitmap(w,h);
Bitmapoldbitmap=(Bitmap)theImage1;
newbitmap=oldbitmap;
Rectanglerc=newRectangle(startPoint.X,startPoint.Y,w,h);
Bitmapbt=oldbitmap.Clone(rc,oldbitmap.PixelFormat);
this.pictureBox2.Width=bt.Width;
this.pictureBox2.Height=bt.Height;
this.pictureBox2.Image=bt;
theImage=bt;
a.划分区域图
b.切割图
6.合成一张图片
privatevoidpictureBox1_MouseDoubleClick(objectsender,MouseEventArgse)
System.Drawing.ImagecopyImage=pictureBox2.Image;
Bitmapbmp=newBitmap(pictureBox1.Image);
Graphicsg2=Graphics.FromImage(bmp);
g2.DrawImage(copyImage,e.X,e.Y,copyImage.Width,copyImage.Height);
pictureBox1.Image=bmp;
MessageBoxButtons.OK,M
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 C# 图像 融合 设计
![提示](https://static.bdocx.com/images/bang_tan.gif)