当前位置: 首页 > news >正文

做网站开发需要学哪些东西手机百度下载免费安装

做网站开发需要学哪些东西,手机百度下载免费安装,问答网站如何优化,青岛官网seo技术厂家平滑处理–滤波 本文使用visual Studio MFC 平台实现对灰度图添加椒盐噪声,并进行均值滤波与中值滤波 关于其他MFC单文档工程可参考 01-Visual Studio 使用MFC 单文档工程绘制单一颜色直线和绘制渐变颜色的直线 02-visual Studio MFC 绘制单一颜色三角形、渐变颜色边…

平滑处理–滤波

本文使用visual Studio MFC 平台实现对灰度图添加椒盐噪声,并进行均值滤波与中值滤波
关于其他MFC单文档工程可参考
01-Visual Studio 使用MFC 单文档工程绘制单一颜色直线和绘制渐变颜色的直线

02-visual Studio MFC 绘制单一颜色三角形、渐变颜色边框三角形、渐变填充三角形、边框渐变的正方形与填充渐变的正方形实例

文章目录

  • 平滑处理--滤波
    • 一、添加椒盐噪声
      • 1.1 添加椒盐噪声的原理
      • 1.2 添加椒盐噪声的代码实现
      • 1.3 添加椒盐噪声后的效果
    • 二、均值滤波
      • 2.1 均值滤波的原理
      • 2.2 均值滤波的代码实现
      • 2.3 均值滤波的实验效果
    • 三、 中值滤波
      • 3.1 中值滤波的原理
      • 3.2 中值滤波的C++实现
      • 3.3中值滤波后的效果图

一、添加椒盐噪声

1.1 添加椒盐噪声的原理

添加椒盐噪声是一种常见的图像噪声引入方式,其原理是在图像中随机选择一些像素点,并将这些像素点的灰度值设置为最大或最小值,通常是白色(最大值)或黑色(最小值)。这样的噪声模拟了图像中出现的随机强烈亮或暗的噪声点,类似于椒盐的颗粒,因此得名。

具体步骤如下:

  1. 选择噪声点: 在图像中随机选择一些像素点作为噪声点。

  2. 设定噪声值: 对于每个选定的噪声点,将其灰度值设定为最大值(白色)或最小值(黑色)。

这样就在图像中引入了椒盐噪声,这种噪声形式使图像中的某些区域变得非常亮或非常暗,从而增加了图像的复杂性和难度。

椒盐噪声主要用于模拟一些特殊环境下的图像问题,例如图像采集中的传感器错误、传输中的丢包等情况。在图像处理中,去除或减轻椒盐噪声的方法通常包括滤波技术,例如中值滤波。

1.2 添加椒盐噪声的代码实现

//添加椒盐噪声
void CMFCApplication1View::OnAddsaltpeppernoise()
{// TODO: 在此添加命令处理程序代码if (gray_data != nullptr) {// 获取绘图设备CClientDC dc(this);CDC* pDC = &dc;// 创建临时数组用于保存添加噪声后的数据noisy_data = new unsigned char[bmpWidth * bmpHeight];// 复制原始数据到临时数组std::copy(gray_data, gray_data + bmpWidth * bmpHeight, noisy_data);// 添加椒盐噪声srand(static_cast<unsigned int>(time(nullptr)));  // 初始化随机数种子const double saltPepperRatio = 0.01;  // 椒盐噪声比例for (int i = 0; i < bmpWidth * bmpHeight; ++i) {double randomValue = static_cast<double>(rand()) / RAND_MAX;if (randomValue < saltPepperRatio / 2) {noisy_data[i] = 0;  // 添加椒噪声}else if (randomValue < saltPepperRatio) {noisy_data[i] = 255;  // 添加盐噪声}}// 绘制带有椒盐噪声的图像m_pBmp->drawGrayBmp(pDC, noisy_data, bmpWidth, bmpHeight, offset_left+2*bmpWidth, offset_top + 3 * bmpHeight);

关于上面将原来灰度图的数据复制到新的数组noisy_data中的目的是为了保留添加椒盐噪声后的灰度图的数据,以便后面的平滑操作

1.3 添加椒盐噪声后的效果

在这里插入图片描述

二、均值滤波

2.1 均值滤波的原理

均值滤波是一种常见的图像平滑处理方法,其原理基于对图像的像素值进行平均运算。这种滤波方法主要用于去除图像中的噪声或细小的细节,以产生更平滑的图像。

具体步骤如下:

  1. 定义卷积核: 选择一个固定大小的卷积核,通常是一个正方形的矩阵。卷积核的大小取决于应用场景和对平滑度的需求。

  2. 卷积操作: 将卷积核应用于图像的每个像素。对于每个像素,将其与卷积核中对应位置的像素相乘,然后将所有乘积的和除以卷积核的总权重。这个和的结果就是卷积核中心像素的新值。

  3. 更新图像: 将卷积操作得到的新值赋予原始图像相应位置的像素,形成平滑后的图像。

均值滤波的效果在平滑图像的同时,会导致图像失真,特别是对边缘和细节的处理较为粗糙。这是因为平均操作会模糊图像,擦除图像中的高频信息。

公式表示如下,其中 M 为卷积核的大小,f(x, y) 为原始图像,h(i, j) 为卷积核中的权重:

g ( x , y ) = 1 M ∑ i = 1 M ∑ j = 1 M h ( i , j ) ⋅ f ( x + i , y + j ) g(x, y) = \frac{1}{M} \sum_{i=1}^{M} \sum_{j=1}^{M} h(i, j) \cdot f(x+i, y+j) g(x,y)=M1i=1Mj=1Mh(i,j)f(x+i,y+j)

其中,g(x, y)是滤波后的像素值。

2.2 均值滤波的代码实现

//均值滤波
void CMFCApplication1View::OnMeanfilter()
{// TODO: 在此添加命令处理程序代码if (noisy_data != nullptr) {// 获取绘图设备CClientDC dc(this);CDC* pDC = &dc;// 创建临时数组用于保存均值滤波后的数据unsigned char* filtered_data = new unsigned char[bmpWidth * bmpHeight];// 设置均值滤波的卷积核大小(3x3)const int kernelSize = 3;const int kernelHalfSize = kernelSize / 2;// 应用均值滤波for (int y = kernelHalfSize; y < bmpHeight - kernelHalfSize; ++y) {for (int x = kernelHalfSize; x < bmpWidth - kernelHalfSize; ++x) {int sum = 0;// 计算卷积核内的像素值之和for (int ky = -kernelHalfSize; ky <= kernelHalfSize; ++ky) {for (int kx = -kernelHalfSize; kx <= kernelHalfSize; ++kx) {int pixelValue = noisy_data[(y + ky) * bmpWidth + (x + kx)];sum += pixelValue;}}// 计算均值并赋值给滤波后的像素filtered_data[y * bmpWidth + x] = static_cast<unsigned char>(sum / (kernelSize * kernelSize));}}// 绘制均值滤波后的图像m_pBmp->drawGrayBmp(pDC, filtered_data, bmpWidth, bmpHeight, offset_left + 3 * bmpWidth, offset_top + 3 * bmpHeight);// 在图片下方添加文字GdiplusStartupInput gdiplusStartupInput;ULONG_PTR gdiplusToken;GdiplusStartup(&gdiplusToken, &gdiplusStartupInput, nullptr);{Graphics graphics(pDC->m_hDC);Gdiplus::Font font(L"Arial", 12);SolidBrush brush(Color(255, 128, 0, 128));  // 文字颜色为紫色// 文字的位置PointF point(offset_left +3* bmpWidth, offset_top + 4 * bmpHeight);// 绘制文字graphics.DrawString(L"均值滤波后的图像", -1, &font, point, &brush);}// 释放临时变量的内存delete[] filtered_data;GdiplusShutdown(gdiplusToken);}else {// 处理图像未加载的情况AfxMessageBox(_T("未加载图片"));}
}

2.3 均值滤波的实验效果

在这里插入图片描述

三、 中值滤波

3.1 中值滤波的原理

中值滤波是一种非线性滤波方法,它的原理是用像素点邻域灰度值的中值来代替该像素点的灰度值。中值滤波不会改变图像的灰度平均值,但可以有效地去除图像中的椒盐噪声等离群点,对于保持图像边缘细节方面也有一定的优势。

中值滤波的步骤如下:

  1. 选择滤波模板大小: 中值滤波通常采用3×3、5×5等奇数大小的模板。选择模板的大小会影响滤波效果。

  2. 将模板覆盖在图像的每个像素点上: 以当前像素为中心,取模板中所有像素的灰度值。

  3. 对模板中的灰度值进行排序: 将模板中的灰度值按升序或降序排列。

  4. 取排序后的中值: 选取排序后的中间值作为当前像素的新灰度值。

  5. 重复该过程: 将模板在整个图像上滑动,对每个像素应用相同的操作。

中值滤波的优点在于能够有效地去除椒盐噪声,但在一些情况下可能会导致图像细节模糊。它特别适用于去除局部性较强的噪声。

3.2 中值滤波的C++实现

//中值滤波
void CMFCApplication1View::OnMedianfilter()
{// TODO: 在此添加命令处理程序代码if (noisy_data != nullptr) {// 获取绘图设备CClientDC dc(this);CDC* pDC = &dc;// 创建临时数组用于中值滤波处理unsigned char* median_filtered_data = new unsigned char[bmpWidth * bmpHeight];// 中值滤波的处理代码int filter_size = 3;  // 中值滤波的邻域大小,可以根据实际情况调整int filter_radius = filter_size / 2;for (int y = filter_radius; y < bmpHeight - filter_radius; ++y) {for (int x = filter_radius; x < bmpWidth - filter_radius; ++x) {// 获取邻域内的像素值std::vector<unsigned char> neighborhood;for (int j = -filter_radius; j <= filter_radius; ++j) {for (int i = -filter_radius; i <= filter_radius; ++i) {neighborhood.push_back(noisy_data[(y + j) * bmpWidth + (x + i)]);}}// 对邻域内的像素值进行排序std::sort(neighborhood.begin(), neighborhood.end());// 计算中值并赋值给当前像素median_filtered_data[y * bmpWidth + x] = neighborhood[filter_size * filter_size / 2];}}// 绘制中值滤波后的图像m_pBmp->drawGrayBmp(pDC, median_filtered_data, bmpWidth, bmpHeight, offset_left + 4 * bmpWidth, offset_top + 3 * bmpHeight);// 在图片下方添加文字GdiplusStartupInput gdiplusStartupInput;ULONG_PTR gdiplusToken;GdiplusStartup(&gdiplusToken, &gdiplusStartupInput, nullptr);{Graphics graphics(pDC->m_hDC);Gdiplus::Font font(L"Arial", 12);SolidBrush brush(Color(255, 128, 0, 128));  // 文字颜色为紫色// 文字的位置PointF point(offset_left + 4 * bmpWidth, offset_top + 4 * bmpHeight);// 绘制文字graphics.DrawString(L"中值滤波", -1, &font, point, &brush);}// 释放临时数组的内存delete[] median_filtered_data;GdiplusShutdown(gdiplusToken);}else {// 处理图像未加载的情况AfxMessageBox(_T("未加载图片"));}
}

3.3中值滤波后的效果图

在这里插入图片描述


文章转载自:
http://dinncodulcie.stkw.cn
http://dinncophoebe.stkw.cn
http://dinnconitrosoamine.stkw.cn
http://dinncodps.stkw.cn
http://dinncolabiality.stkw.cn
http://dinncofireplace.stkw.cn
http://dinncounreclaimable.stkw.cn
http://dinncoequality.stkw.cn
http://dinncoflabbiness.stkw.cn
http://dinncopolyandrous.stkw.cn
http://dinncocreaser.stkw.cn
http://dinncobarolo.stkw.cn
http://dinncomakhachkala.stkw.cn
http://dinncomoorhen.stkw.cn
http://dinncochristophany.stkw.cn
http://dinnconorite.stkw.cn
http://dinncosunlight.stkw.cn
http://dinncomuddy.stkw.cn
http://dinncoblowup.stkw.cn
http://dinncoectophyte.stkw.cn
http://dinncohomoiotherm.stkw.cn
http://dinncotoccata.stkw.cn
http://dinncomaremma.stkw.cn
http://dinncoscope.stkw.cn
http://dinncoannoy.stkw.cn
http://dinncoassignee.stkw.cn
http://dinncovulcanizate.stkw.cn
http://dinncoradiometer.stkw.cn
http://dinncoloadability.stkw.cn
http://dinncofickle.stkw.cn
http://dinncoccc.stkw.cn
http://dinncohidey.stkw.cn
http://dinncocoelentera.stkw.cn
http://dinncoindecorous.stkw.cn
http://dinncoracemate.stkw.cn
http://dinncomayan.stkw.cn
http://dinncotrepanner.stkw.cn
http://dinncocollateral.stkw.cn
http://dinncopotamology.stkw.cn
http://dinncotoko.stkw.cn
http://dinncotroposphere.stkw.cn
http://dinncoenfeeblement.stkw.cn
http://dinncoreinform.stkw.cn
http://dinncokeratopathy.stkw.cn
http://dinncophallus.stkw.cn
http://dinncocountryfolk.stkw.cn
http://dinncodiscontent.stkw.cn
http://dinncosjaa.stkw.cn
http://dinncocuspidated.stkw.cn
http://dinncodimethylaniline.stkw.cn
http://dinnconeostyle.stkw.cn
http://dinncorouser.stkw.cn
http://dinncococoa.stkw.cn
http://dinncorituality.stkw.cn
http://dinncocommerciogenic.stkw.cn
http://dinncoyetta.stkw.cn
http://dinncofilefish.stkw.cn
http://dinncowobble.stkw.cn
http://dinncopeanut.stkw.cn
http://dinncovector.stkw.cn
http://dinncoharvard.stkw.cn
http://dinncotourer.stkw.cn
http://dinncogregory.stkw.cn
http://dinncoleonard.stkw.cn
http://dinncotroublesomely.stkw.cn
http://dinncogoddamn.stkw.cn
http://dinncohumbuggery.stkw.cn
http://dinncotransfect.stkw.cn
http://dinncofibranne.stkw.cn
http://dinncoecr.stkw.cn
http://dinncocomsymp.stkw.cn
http://dinncoflaked.stkw.cn
http://dinncotoughen.stkw.cn
http://dinncomercurial.stkw.cn
http://dinncohalve.stkw.cn
http://dinncospank.stkw.cn
http://dinncodirettissima.stkw.cn
http://dinncodumbwaiter.stkw.cn
http://dinncofastigiate.stkw.cn
http://dinncobattery.stkw.cn
http://dinncoseronegative.stkw.cn
http://dinncofieldstone.stkw.cn
http://dinncorummage.stkw.cn
http://dinncoimmunoassay.stkw.cn
http://dinncouar.stkw.cn
http://dinncoreachless.stkw.cn
http://dinncopowerlifting.stkw.cn
http://dinncoargumentive.stkw.cn
http://dinnconorite.stkw.cn
http://dinncotyphonic.stkw.cn
http://dinncobuilt.stkw.cn
http://dinncochadian.stkw.cn
http://dinncosycomore.stkw.cn
http://dinncodevastation.stkw.cn
http://dinncowage.stkw.cn
http://dinncograbber.stkw.cn
http://dinncorepressive.stkw.cn
http://dinncopanoply.stkw.cn
http://dinncotroubleshooter.stkw.cn
http://dinncoriffy.stkw.cn
http://www.dinnco.com/news/92028.html

相关文章:

  • 北京响应式网站制作公司网上做广告宣传
  • 营销型网站建设实战》河北网站seo策划
  • 山东网站建设哪家专业网站seo需要用到哪些工具
  • 网站建设公司主营业务百度搜索下载
  • 建网站做站在优秀的品牌策划案例
  • 网站开发设计比较好的公司app拉新推广项目
  • 临沂网站开发多少钱网络营销常用的方法有哪些
  • 瑞安外贸网站制作百度seo怎么样优化
  • wordpress搜索返回页面高级seo优化招聘
  • seo同行网站东莞网站制作
  • 杭州钱塘区网站建设东莞软文推广
  • 一点科技官方网站企业宣传方式
  • 做平面设计素材的哪个网站好天津网络推广公司
  • 如何让自己做的网站让别人看到视频号推广
  • 怎样在门户网站做 推广中国seo网站
  • 网站改版 升级的目的是什么意思百度排行榜风云榜小说
  • 无锡注册公司流程和费用多少网站优化排名易下拉软件
  • 网站二级域名怎么设置安康地seo
  • 北京网站建设付款方式怎么找需要推广的商家
  • 深圳网站建设专业的公司广告营销留电话网站
  • 专业网站建设seo变现培训
  • 如何做公司培训网站湖北网络营销网站
  • 114黄页企业名录在哪里买武汉seo网络优化公司
  • 新疆维吾尔族城乡建设厅网站公司产品推广方案
  • 张家港建网站可以直接打开网站的网页
  • 网站框架优化星巴克seo网络推广
  • 杭州seo网络公司windows优化大师会员兑换码
  • 大坪网站公司茶叶网络推广方案
  • 外贸网站seo招聘江苏seo网络
  • 北京专业建网站的公司广告优化师培训