前言:
在之前的博客中讲到了用C#实现直方图均衡化的具体过程,
直方图均衡化
由于学校课程要求,在之前的基础上我对之前的程序进行了版本的更新,
得到一个更加完整,美观的版本!
前后对比:
V1.0界面:
实现功能:直方图均衡化
V2.0界面:
实现功能:
- 均衡化,暗角,马赛克,去色,底片,扩散,降低亮度,镜像;
- 图片浏览;
- 图片清除;
- 动画启动。
代码文件结构:
1.关于程序的代码,views里存放的是两个窗体:
- Start_Form为程序开始的启动界面;
- Showpicture为浏览界面。
2.在Contorl文件夹里的Operation.cs,封装的是程序的主要功能的代码;
3.Form1为项目的主界面;
主要功能的实现:
整体来说:
将业务逻辑层的代码放在Contorl文件夹里的Operation.cs中
然后在主界面Form1,的RadioButton的Checked事件进行调用,
if(radioButton1.Checked == true)
{
newbitmap = Operation.Equalization(bitmap);
if(newbitmap != null)pictureBox2.Image = newbitmap.Clone() as Image;
//显示至pictureBox2
else { MessageBox.Show("原始图片为空!", "提示:"); }
}
以上代码为调用Operation的Equalization方法,再将处理后图片显示在pictureBox2上。
均衡化
这个就不多说。直方图均衡化
暗角
暗角就是在图像的四角添加逐渐变黑的一个圈。
步骤:
计算顶点与中心的距离maxDistance
计算每个像素点与中心的距离distance
计算factor = distance / maxDistance
将当前像素点的颜色设置为 原颜色 * (1-factor)
/// <summary>
/// 暗角处理
/// </summary>
public static Bitmap Darkangle(Bitmap bitmap)
{
if (bitmap != null)
{
newbitmap = bitmap.Clone() as Bitmap;
int width = newbitmap.Width;
int height = newbitmap.Height;
float cx = width / 2;
float cy = height / 2;
float maxDist = cx * cx + cy * cy;
float currDist = 0, factor;
Color pixel;
for (int i = 0; i < width; i++)
{
for (int j = 0; j < height; j++)
{
currDist = ((float)i - cx) * ((float)i - cx) + ((float)j - cy) * ((float)j - cy);
factor = currDist / maxDist;
pixel = newbitmap.GetPixel(i, j);
int red = (int)(pixel.R * (1 - factor));
int green = (int)(pixel.G * (1 - factor));
int blue = (int)(pixel.B * (1 - factor));
newbitmap.SetPixel(i, j, Color.FromArgb(red, green, blue));
}
}
}
return newbitmap;
}
效果:
马赛克
步骤:
马赛克的基本思想就是把一个像素点周围的点的像素取个平均,
然后把这些像素点的颜色设为这个平均值。
周围的像素点取的越多,马克赛的效果也就越明显。
/// <summary>
/// 马赛克处理
/// </summary>