- 使用 Spring Initializr 创建 Spring Boot 应用程序
- 在Spring Boot中配置Cassandra
- 在 Spring Boot 上配置 Tomcat 连接池
- 将Camel消息路由到嵌入WildFly的Artemis上
大家好,我是【1+1=王】, 热爱java的计算机(人工智能)渣硕研究生在读。
如果你也对java、人工智能等技术感兴趣,欢迎关注,抱团交流进大厂!!!
Good better best, never let it rest, until good is better, and better best.
近期会把自己本科阶段的一些课程设计、实验报告等分享出来,供大家参考,希望对大家有帮助。
博客更新至专栏【课程设计实验报告】:https://blog.csdn.net/weixin_43598687/category_11640051.html
1、 掌握并通过编程实现均值滤波算法。
2、 掌握并通过编程实现中值滤波算法,先对图像加噪声,通过算法去除噪声。
3、 掌握并通过编程实现拉普拉斯锐化算法。
在程序中,分别在对应的函数位置添加相应算法的代码,实现均值滤波、中值滤波、拉普拉斯锐化算法,最后用MISS图片来反映这三种算法的效果。
1) 原理
(1) 均值滤波也称为领域平均法,是一种图像平滑算法,图像平滑是指用于突出图像的宽大区域、低频成分、主干部分或抑制图像噪声和干扰高频成分,使图像亮度平缓渐变,减小突变梯度,改善图像质量的图像处理方法。可以用加权平均或者非加权平均。
(2) 中值滤波,原理是把数字图像或数字序列中一点的值用该点的一个邻域中各点值的中值代替,让周围的像素值接近的真实值,从而消除孤立的噪声点。
(3) 图像锐化处理的目的是为了使图像的边缘、 轮廓线以及图像的细节变的清晰,经过平滑的图像变得模糊的根本原因是因为图像受到了平均或积分运算,因此可以对其进行逆运算(如 微分运算)就可以使图像变的清晰。
2) 流程
(1) 打开VC++6.0,打开工作空间,然后打开project。
(2) 找到图像平滑函数,在相应位置添加代码。先开辟一个新的空间lpSrc,存放平滑后的图像;将源图像的像素点领域分别与a[i]相乘,做加权或非加权处理得到目标图像的像素值。
(3) 先在GetMedianNum函数中添加代码,补充完整,此函数用来将源图像的像素点和它的领域冒泡排序,返回中指。找到中值滤波函数,在相应位置添加代码。先开辟一个新的空间lpSrc,存放中值滤波后的图像;在循环中得到对应的目标图像图像的像素值。
(4) 图像锐化和图像平滑过程类似,但是不用做加权或者非加权处理,因为它的a[i]的系数和始终为1。
3) 数据输出
分析:图像平滑突出图像的宽大区域、低频成分、主干部分或抑制图像噪声和干扰高频成分,使图像亮度平缓渐变,减小突变梯度,改善图像质量。
分析:中值滤波可以去除图片中的噪声,但是拐角处不能去除,因为拐角处占的比例比较大。
分析:先对图像作平滑处理,然后再进行图像锐化操作,最开始,图像锐化对图片的边缘有明显的效果,再继续图像锐化,图片就会呈现块状。
均值滤波:
double *tempt=new double[lWidth*lHeight];
int *b=new int[9];
int k;
double sum,mean;
for(i=1;i<lHeight-1;i++)
{
for(j=1;j<lWidth-1;j++)
{
lpSrc=lpDIBBits+lLineBytes*i+j;
b[0]=*(lpDIBBits+lLineBytes*(i-1)+j-1);
b[1]=*(lpDIBBits+lLineBytes*(i-1)+j);
b[2]=*(lpDIBBits+lLineBytes*(i-1)+j+1);
b[3]=*(lpDIBBits+lLineBytes*i+j-1);
b[5]=*(lpDIBBits+lLineBytes*i+j);
b[6]=*(lpDIBBits+lLineBytes*(i+1)+j-1);
b[7]=*(lpDIBBits+lLineBytes*(i+1)+j);
b[8]=*(lpDIBBits+lLineBytes*(i+1)+j+1);
sum=0;
mean=0;
for(k=0;k<9;k++)
{
sum=sum+a[k]*b[k];
mean=sum/9;
}
tempt[lWidth*i+j]=mean;
}
}
for(i=1;i<lHeight-1;i++)
{
for(j=1;j<lWidth-1;j++)
{
lpSrc=lpDIBBits+lLineBytes*i+j;
if(tempt[lWidth*i+j]>255)
{
*lpSrc=(unsigned char)255;
}
else if(tempt[lWidth*i+j]<0)
{
*lpSrc=(unsigned char)0;
}
else
{
*lpSrc=(unsigned char)tempt[lWidth*i+j];
}
}
}
中值滤波:
int *tempt=new int[lWidth*lHeight];
unsigned char *b=new unsigned char[9];
for(i=1;i<lHeight-1;i++)
{
for(j=1;j<lWidth-1;j++)
{
lpSrc=lpDIBBits+lLineBytes*i+j;
b[0]=*(lpDIBBits+lLineBytes*(i-1)+j-1);
b[1]=*(lpDIBBits+lLineBytes*(i-1)+j);
b[2]=*(lpDIBBits+lLineBytes*(i-1)+j+1);
b[3]=*(lpDIBBits+lLineBytes*i+j-1);
b[5]=*(lpDIBBits+lLineBytes*i+j);
b[6]=*(lpDIBBits+lLineBytes*(i+1)+j-1);
b[7]=*(lpDIBBits+lLineBytes*(i+1)+j);
b[8]=*(lpDIBBits+lLineBytes*(i+1)+j+1);
tempt[lWidth*i+j]=GetMedianNum(b,9);
}
}
for(i=1;i<lHeight-1;i++)
{
for(j=1;j<lWidth-1;j++)
{
lpSrc=lpDIBBits+lLineBytes*i+j;
if(tempt[lWidth*i+j]>255)
{
*lpSrc=(unsigned char)255;
}
else if(tempt[lWidth*i+j]<0)
{
*lpSrc=(unsigned char)0;
}
else
{
*lpSrc=(unsigned char)tempt[lWidth*i+j];
}
}
}
锐化:
double *tempt=new double[lWidth*lHeight];
int *b=new int[9];
int k;
double sum;
for(i=1;i<lHeight-1;i++)
{
for(j=1;j<lWidth-1;j++)
{
lpSrc=lpDIBBits+lLineBytes*i+j;
b[0]=*(lpDIBBits+lLineBytes*(i-1)+j-1);
b[1]=*(lpDIBBits+lLineBytes*(i-1)+j);
b[2]=*(lpDIBBits+lLineBytes*(i-1)+j+1);
b[3]=*(lpDIBBits+lLineBytes*i+j-1);
b[5]=*(lpDIBBits+lLineBytes*i+j);
b[6]=*(lpDIBBits+lLineBytes*(i+1)+j-1);
b[7]=*(lpDIBBits+lLineBytes*(i+1)+j);
b[8]=*(lpDIBBits+lLineBytes*(i+1)+j+1);
sum=0;
for(k=0;k<9;k++)
{
sum=sum+a[k]*b[k];
}
tempt[lWidth*i+j]=sum;
}
}
for(i=1;i<lHeight-1;i++)
{
for(j=1;j<lWidth-1;j++)
{
lpSrc=lpDIBBits+lLineBytes*i+j;
if(tempt[lWidth*i+j]>255)
{
*lpSrc=(unsigned char)255;
}
else if(tempt[lWidth*i+j]<0)
{
*lpSrc=(unsigned char)0;
}
else
{
*lpSrc=(unsigned char)tempt[lWidth*i+j];
}
}
}
博客更新至专栏【课程设计实验报告】:https://blog.csdn.net/weixin_43598687/category_11640051.html
我正在测试 SQL,但我陷入了一个查询。这是一个无用的查询,但我想理解它。 select count(*), floor(rand()*2) as x from table_name group by
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 这个问题似乎不是关于 a specific programming problem, a softwar
在我编写代码时,我经常喜欢查看代码库中特定区域的工作原理或某些表达式产生的结果。 大多数其他语言都提供了在运行时评估新的自定义表达式的工具。 Golang 似乎还没有提供这个功能,或者至少没有我使用过
1、kvm 简介 kernel-based virtual machine的简称,是一个开源的系统虚拟化模块,自linux 2.6.20之后集成在linux的各个主要发行版本中。它使用linux
我是中继新手,我正在尝试在并发模式下使用中继现代实验。我已经能够使用 Suspense 和 ErrorBoundary 很好地加载节点、边等。我现在正在处理用于创建和更新对象的表单。 我无法弄清楚如何
我正在参加在线软件安全类(class)。我正在尝试使用 shellcode 进行实验。我编写了一个易受攻击的服务器、一个注入(inject)程序、一个(可能已损坏的)shellcode,我将其转换为程
我最糟糕的噩梦是日期对象,所以我创建了一个 fiddle 来查看它是如何工作的,并尝试为以下格式的 date strings 找到解决方案 2015-10- 05T11:49:13.587Z 但要注意
我一直在研究 Accessibility Object Model API,我认为尝试在 Puppeteer 测试中使用它会很酷。 getComputedAccessibleNode 返回一个 pro
我目前正在概述 C++11 的新特性,由于目前不明原因,其中一些特性无法编译。我使用 gcc version 4.6.0 20100703 (experimental) (GCC) 所以根据 GNU
1.动态年龄判定规则 对象进入老年代的4个常见的时机: 1、 躲过15次gc,达到15岁高龄之后进入老年代; 2、 动态年龄判定规则,如果Survivor区域内年龄1+年龄2+年龄3+年龄n的对象
有没有办法停止ray.tune实验(例如使用 PBT)当明显过度拟合或一个指标长时间没有改善时? 最佳答案 现在,这在 Tune 中得到了很好的支持,https://github.com/ray-pr
我尝试在gcc 6.0的开发中实际使用新的c++ 1z功能。 如果我尝试这个小例子: #include #include namespace fs = std::experimental::fil
我想知道为什么我在服务器端运行实验时必须包含 JavaScript cxApi。此外,我可以通过 PHP 发送选定的实验和变体吗?或者可能通过在没有外部资源(如 cxApi)的情况下注入(inject
我正在开发一个使用 Firebase iOS SDK 的 iOS 应用,我正在尝试弄清楚如何访问用户已看到的所有 Firebase AB 实验以及用户参与的实验变体。 我查看了文档以及 Firebas
我用 python 2.7.7 运行了以下命令: import gc import memory_profiler print memory_profiler.memory_usage()[0] x
我在浏览器控制台中做了一个 JavaScript 实验 - 首先我创建了一个新对象 foo 如下 var foo = { bar: function() { return this.baz
据说“4916 个正面训练示例经过手工挑选对齐、归一化并缩放到 24x24 的基本分辨率。通过从 9500 张不包含人脸的图像中随机挑选子窗口来选择 10,000 个负面示例。”在论文“Paul Vi
这个问题在这里已经有了答案: 关闭 12 年前。 Possible Duplicate: Can you write object oriented code in C? 嗨! 只是为了好玩,这两天
1. 程序的JVM参数示范 已知,平时系统运行创建的对象,除非是那种大对象,否则通常来说都是优先分配在新生代中的Eden区域的。 而且新生代还有另外两块Survivor区域,默认Eden区域占据新
在 上创建新实验DAGsHub 使用Git,".._metrics.csv"的格式应该是什么和 ".._params.yml"文件? 不幸的是,我在任何地方都找不到引用。 最佳答案 特尔;博士: 对于
我是一名优秀的程序员,十分优秀!