- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我一直在尝试做一个对图像应用均值过滤器的程序,我认为我已经接近正确地做到这一点,但图像中仍然存在小缺陷。例如:
黑底白点,相同数组:http://s72.photobucket.com/user/john_smith140/media/one%20array_zpswteno2eb.jpg.html?sort=3&o=1
黑底白点,不同排列:http://s72.photobucket.com/user/john_smith140/media/two%20array_zpskbyjg97o.jpg.html?sort=3&o=0
我可以考虑造成缺陷的两个原因。一种是算法本身,另一种是在将 char 转换为 float 然后再将 float 再次转换为 char 的过程中。
char转float是必须的,因为ifstream的读取函数读取的是char,然后我需要将每个乘以1/9,所以需要是 float 。然后转换回 char,以便写入函数可以将其写回。
算法的一些解释。我从第二行的第二个像素开始计算颜色值,然后一直计算到倒数第二行的倒数第二个像素。那是因为我使用的是 3x3 的内核,这样我就不会超出图像的限制(以及我存储它的 char 数组的限制)。对于 1024x768 的图像,其大小为 1024x768*3(3 个颜色分量)。所以它从位置开始:bitsPerPixel * image_width + bitsPerPixel 或 3*1024+ 3 = 4099,即第 2° 行的第 2° 像素。然后它将计算平均值,直到 2° 最后一行的 2° 最后一个像素应该是:imageSize - row_size - bitsPerPixel 或 (1024*768-3) - 1024*3 - 3。在区间内,它会计算char数组中每个位置的值,也就是说一个像素点的每个颜色 channel 的值都会被周围像素点的颜色 channel 计算出来。这是代码:
int size2 = bpp*width;
float a1_9 = (1.0f/9.0f);
float tmp;
for (int i=size2+bpp; i<size-size2-bpp; i++) {
tmp = a1_9 * ((float) image [i-size2-bpp] + (float) image [i-size2] + (float) image [i-size2+bpp] + (float) image [i-bpp] + (float) image [i] + (float) image [i+bpp] + (float)image [i+size2-bpp] + (float) image [i+size2] + (float) image [i+size2+bpp]);
image [i] = char (tmp);
float temp = (float) image [i];
}
我打印了赛车屏幕截图的一次交互值,对应于位置一百万的值并得到了这个:
Image values are: -56 -57 -57 9 -43 -41 108 108 109
tmp it is: 8.88889
temp it is: 8
这些值乍一看似乎是正确的(按手头的平均值计算),所以我不太清楚哪里出了问题。任何帮助将不胜感激。
最佳答案
2 关于你的算法的想法:
1.) 您正在使用 RGB 色彩空间?那为什么你的图像值是负的?您也不必转换为 float 。只需将整数值相加并将其除以 9。这样会快得多,最后您无论如何都将其转换回 char,因此结果应该相同。
2.) 你在每个迭代步骤中覆盖你的图像,这意味着在过滤器模式中:
-------
|1|2|3|
-------
|4|5|6|
-------
|7|8|9|
-------
值 1、2、3 和 4 已经被平滑,5 是从 5 个未平滑像素和 4 个平滑像素计算得出的。我建议创建一个新的空白图像并将结果(临时)存储在新图像中,同时从原始图像读取 - 即不要尝试使用输出图像处理 “就地”与输入图像相同。
关于c++ - 在图像上应用均值滤波器时出现小的颜色缺陷,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38205177/
我的 slideToggle 在幻灯片切换的底部有点跳动。会不会是因为那里有一个按钮之类的。任何使它更平滑的方法。尝试使用缓动但不是很成功。有什么建议 点击视频设置自己看看 The site $(do
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the
概述: 我的 B 对象是一个 100 000 * 5000 的 2 GB 大矩阵 我的 A 对象较小 1000 * 5000 analyse_with_glm <- function(Y) { c
关闭。这个问题是opinion-based .它目前不接受答案。 想改善这个问题吗?更新问题,以便可以通过 editing this post 用事实和引文回答问题. 6年前关闭。 Improve t
我在从 SQL Server (2008R2) 数据库中的 NVARCHAR 字段检索加密数据时遇到了问题,对于某些记录,我的 C# .NET 应用程序中数据的字符串值与数据库记录中的数据字符串值不同
我从 main.cpp 中包含两个头文件,它们在匿名命名空间中具有以下定义:const string strToken = ("%");使用 g++ 4.9 版编译结果如下: In file incl
我正在测试的代码中出现信任边界冲突。该代码在 session 中添加表单,并且由于违反信任边界而存在缺陷 Inside Struts Action class execute method { Ed
这个问题没有与之相关的实际问题,它更多的是一个好奇的问题,想知道我是否过于字面意思;)。 所以我一直在努力尽可能多地理解 c++ 标准。今天,在深入研究标准时,我注意到了这一点 (ISO/IEC 14
在我的数据库中,我必须做一个Circular Reference(cycle)来获取我想要的数据,我不知道如何重新排序表来获取我想要的数据而不需要循环. 这是我的数据库的模式(或模型)——只有表名是英
我有一个代表一组数字的类。构造函数接受三个参数: startValue 、 endValue 和 stepSize 。 该类负责保存一个列表,其中包含考虑 stepSize 的开始值和结束值之间的所有
如何删除下图中标记的三个间隙? 此代码可在 http://jsfiddle.net/69zj6smo/ 获得- 调整渲染区域的大小以查看通常存在的一些线条。 让我感到困惑的是,我认为我总是创建这样的流
double 的位格式在第一位存储符号。 double的C#哈希算法是高低32位二进制异或。 因此,当您对 double A 及其负数 -A 进行哈希处理时,哈希值的唯一区别在于第一位。 要散列多个字
当我在 Action 中使用重定向时,afterAction 方法(在 controller.php 中)不起作用!我该如何解决这个问题? 注意:我不能使用 beforeAction 因为我在我的 A
毫无疑问,还有其他可能更好的方法可以做到这一点,但我正在努力了解这里发生了什么。 在下面的示例中,coverity 在第四行报告了 FORWARD_NULL 缺陷。 double? foo = nul
我们希望针对 Jenkins 中失败的构建自动在 Jira 中创建缺陷。如果您成功完成了此操作,可以与我分享吗? 最佳答案 您应该能够使用JIRA plugin来做到这一点,以及“JIRA:创建问题”
有人能解释一下为什么 VeraCode 似乎认为使用 name 作为公共(public)属性(property)是一个坏主意,并提出了一个好的缓解措施吗? 代码(JavaScript): var Ba
我认为这是 C++11 标准中的一个(次要)缺陷。在 [dcl.dcl] 中我们有: simple-declaration: decl-specifier-seqopt init-
我做了以下... private static IDbConnectionProvider CreateSqlConnectionProvider(DbConfig dbConfig) { r
我现在在运行我的 cakephp 应用程序时遇到了很多麻烦。 在将 vom lenny 升级为 squeeze(甚至尝试完全重新安装 sqeeze)之后,imagick 的速度非常慢,以至于它只是关闭
我收到来自 Veracode 的信任边界违规。我的代码是 userName= req.getParameter(Constant.USERNAME); session.setAttribute(Con
我是一名优秀的程序员,十分优秀!