Bunury 2021-11-28 23:33 采纳率: 0%
浏览 74
已结题

用c语言实现图像均值滤波,中值滤波prewitt梯度,拉普拉斯算子

  1. 利用空间域滤波对图像进行增强处理,要求:
    ● 通过C#控制台应用程序读入一个灰度图像;
    ● 获取灰度图像的像素值,并存入二维数组;
    ● 选择不同的空间域滤波器对二维数组进行卷积运算;
    ● 利用卷积运算后的新图像像素值重新生成图像,并存储图像文件。
    1  由于读取图像和存储图像、对图像变量进行操作,均需要使用Bitmap类,该类需要在解决方案资源管理器添加引用“System.Drawing”,并在Program.cs代码文件中引用命名空间“using System.Drawing;”:

    img


    2  读取灰度图像文件,并存入图像实例(如myImage):
    string filename = "E:\a.jpg"; //换成自己的图像文件地址
    Bitmap myImage = new Bitmap(filename);
    int x = myImage.Width; //图像的宽度,即列数
    int y = myImage.Height; //图像的高度,即行数
    请自行声明二维数组(如pixel[,])用以存放图像像素值。
    3  像元[i,j]处像素值的获取,可使用图像实例的GetPixel()方法:
    //因为是灰度图像,所以每个像素的RGB三个通道值均可作为图像亮度值
    pixels[i, j] = myImage.GetPixel(i, j).R;
    4  要求从控制台读入一个整数,并根据整数值选择相应的滤波器,如果输入的整数不是正确序号,应该给出处理的方法(使用goto跳转语句),可参考:

    img

5  根据选择的滤波器进行卷积运算,使用的滤波器包括(也可自行设计滤波器):
均值滤波:

img


中值滤波:9个像元按大小排序,求中间位置的像元。

Prewitt梯度:注意两个模版分别卷积计算后的绝对值再求和

img


拉普拉斯算子:(正负号也可颠倒)

img


注意:
➢ 卷积运算是由当前像元和8个邻域与滤波器对应位置权重值相乘后求和(中值滤波是排序取中间值,Prewitt梯度是两个权重模板);
➢ 图像边缘的像素8个邻域有缺失,因此需要对图像外围进行填充,或者直接放弃边缘像素(此时图像比原来小一圈),如下图所示;

img


➢ 可定义卷积运算的静态方法(在类的内部,静态方法可直接通过方法名调用,不需要加类名;实例方法必须通过实例来调用),将输入的滤波器序号作为输入参数,设置选择语句(if或switch)控制不同的计算形式;
➢ 考虑到像素值表示亮度,在图像中用以合成颜色,而经过卷积运算的图像像素值可能超过0255的区间,因此应该对超限值进行处理,即<0的值设为0、>255的值设为255(或者按照“最小值最大值”的区间进行线性拉伸至0~255)。
6  卷积运算后得到新的图像像素值,要使用该值构建颜色变量(RGB三通道),然后将每个像素的颜色变量赋给图像像素(可使用原有图像实例myImage或创建新的图像实例newImage)
Bitmap newImage = new Bitmap(x, y);//创建一个新图像变量
for (int i = 0; i < x; i++)
{
for (int j = 0; j < y; j++)
{
Color c = Color.FromArgb(pixels[i, j], pixels[i, j], pixels[i, j]); //通过像素值生成颜色
newImage.SetPixel(i, j, c); //将颜色赋给对应的像元
}
}
7  将重新赋值后的图像变量进行输出,保存为图像文件:
newImage.Save("E:\a" + s + ".jpg", System.Drawing.Imaging.ImageFormat.Jpeg); //将新图像变量存储为图像文件

img

  • 写回答

0条回答 默认 最新

    报告相同问题?

    问题事件

    • 系统已结题 12月6日
    • 创建了问题 11月28日

    悬赏问题

    • ¥15 onlyoffice编辑完后立即下载,下载的不是最新编辑的文档
    • ¥15 求caverdock使用教程
    • ¥15 Coze智能助手搭建过程中的问题请教
    • ¥15 12864只亮屏 不显示汉字
    • ¥20 三极管1000倍放大电路
    • ¥15 vscode报错如何解决
    • ¥15 前端vue CryptoJS Aes CBC加密后端java解密
    • ¥15 python随机森林对两个excel表格读取,shap报错
    • ¥15 基于STM32心率血氧监测(OLED显示)相关代码运行成功后烧录成功OLED显示屏不显示的原因是什么
    • ¥100 X轴为分离变量(因子变量),如何控制X轴每个分类变量的长度。