同态过滤器输出
我编写了以下代码来开发同构滤波器. 我认为(虽然我不确定)颜色图像的过滤良好. 在灰度图像的情况下, 为什么内核总是绿色? 此外,过滤器也应该锐化图像.但是,它不这样做. 可能出了什么问题? . . 源代码: 这是GitHub存储库. public class HomomorphicFilter { public HomoMorphicKernel Kernel = null; public bool IsPadded { get; set; } public int Width { get; set; } public int Height { get; set; } public double RH { get; set; } public double RL { get; set; } public double Sigma { get; set; } pub
14 2024-04-22
编程技术问答社区
在 MATLAB 中绘制符号变量时出错?
我试图从书籍"信号和系统实验室使用Matlab Alex Palamides"中学习傅立叶变换. 在第312页上,给出了以下代码,该代码表明可以通过乘以两个信号的傅立叶变换,然后将产品的反傅立叶进行 来实现卷积. syms t w x1=heaviside(t)-heaviside(t-2); x2=heaviside(t)-heaviside(t-4); X1=fourier(x1,w); X2=fourier(x2,w); right=ifourier(X1*X2,t) ezplot(right) 我尝试了MATLAB 2019和MATLAB 2020,但我在这两个方面都有同样的问题 实际上,当我尝试在MATLAB中以上代码运行时,我不会像书中的那个输出一样,相反,我会遵循错误 Error using inlineeval (line 14) Error in inline expression ==> (t.*pi.*sign(t) + fourier(c
22 2024-04-22
编程技术问答社区
空间域中的图像卷积
我正在尝试复制 此链接 使用 Linearear 空间域中的卷积. 图像首先转换为2D double阵列,然后卷积.图像和内核的大小相同.图像在卷积前进行填充,并在卷积后相应地裁剪. 与基于FFT的卷积相比,输出是怪异的,不正确. 如何解决这个问题? 请注意,我从MATLAB中获得了以下图像输出,该图像与我的C#fft输出匹配: . update-1:以下 @ ben voigt 的评论,我更改了Rescale()函数以替换255.0 1,因此输出大大改善.但是,输出仍然与FFT输出不匹配(这是正确的输出). . update-2:之后 @ cris luengo 的评论,我已经通过缝线填充了图像,然后进行了空间卷积.结果如下: 因此,输出比上一个要差.但是,这与链接答案的第二输出相似sup> . update-3 :我使用了 @的答案 @Sum()提出的Sum()函数.结果是**Update-1**的改进版本: 但
10 2024-04-18
编程技术问答社区
C#卷积滤波器对任何大小的矩阵(1x1,3x3,5x5,...)都不完全适用
我正在为我的项目制作卷积过滤器,并设法将其用于任何大小的矩阵,但随着它的变化,我注意到并非所有位都会更改. 这是显示问题的图片: 第一个是原始 过滤器:EdgedEtection 9x9: 您可以看到,有一个从未改变的条纹,随着矩阵变大,条纹也变得更大(在3x3中,它不可见) 我的卷积矩阵类: public class ConvMatrix { public int Factor = 1; public int Height, Width; public int Offset = 0; public int[,] Arr; //later I assign functions to set these variables ... } 滤波器功能: Bitmap Conv3x3(Bitmap b, ConvMatrix m) { if (0 == m.Factor)
6 2024-04-16
编程技术问答社区
使用卷积法在连续的声音流中找到一个参考音频样本
在我的先前问题提议,我应该使用卷积. 参考音频样本. 使用 dsputil ,我能够做到这一点.我玩了一点,尝试了不同的音频样品组合,以了解结果是什么.为了可视化数据,我只是将原始音频作为数字倾倒,以脱颖而出,并使用此数字创建图表.峰是可见的,但我真的不知道这对我有何帮助.我有这些问题: 我不知道,如何从峰位置推断原始音频样本中比赛的起始位置. 我不知道,我应该如何使用连续的音频流进行应用,因此我可以在参考音频示例发生后立即做出反应. 我不明白,为什么图片2和图片4(见下文)有很大的不同,尽管两者都代表了自身卷积的音频样本... 任何帮助都将受到高度赞赏. 以下图片是使用Excel分析的结果: 较长的音频样本,带有参考音频(哔哔声)的末尾: 哔哔声自身卷入: 较长的音频样本,没有蜂鸣声响起: 较长的点3音频样本与自身卷积: 更新和解决方案: 多亏了汉的广泛帮助,我才得以实现我的目标. 在没有FFT的情况下进行自己的慢速实现后,我发现 因此,
10 2024-04-11
编程技术问答社区
这个计划的错误是什么?
这是我找到两个信号的卷积的代码,但是每当有人可以解释我的代码中的错误时,我的输出都会变得零? 我尝试将其组成,但无法查找我的整个代码正确的问题是什么 预先感谢 #include #include #define array_len(x) (sizeof(x)/sizeof(double)) void convolution(double *signal, int nt, double *wind, int r, double *rm) { int i,j; printf("%u\n", sizeof(wind)); int l = (nt+r-1); for(i=r;i
16 2024-04-10
编程技术问答社区
与一个非中心原点的内核进行二维卷积
我想用高斯内核进行图像的2D卷积,这不是由等式给出的中心: h(x-x',y-y')= exp( - ((x-x')^2+(y-y'))/2*sigma) 可以说内核的中心是(1,1)而不是(0,0).我应该如何更改以下代码以生成内核和卷积? int krowhalf=krow/2, kcolhalf=kcol/2; int sigma=1 // sum is for normalization float sum = 0.0; // generate kernel for (int x = -krowhalf; x
16 2024-04-09
编程技术问答社区
在C语言中优化三维直接卷积的实现
对于我的项目,我已经写了一个直接3D卷积的幼稚C实施,并定期填充输入.不幸的是,由于我是C的新手,所以性能不是很好...这是代码: int mod(int a, int b) { // calculate mod to get the correct index with periodic padding int r = a % b; return r
12 2024-04-09
编程技术问答社区
用C或Python实现3个元素的移动平均
我想计算3个元素的移动平均值. 例如,我有25个销售数据要素.我需要根据平均这25个数据元素来计算移动平均值. 当给出一个真实数组作为数据时,我想编写一个程序,该程序将确定3个元素移动平均值并创建一个数组.阵列中的元素数量比给定序列短2个元素. 例如,如果我得到了: [7.0, 9.0, 5.0, 1.0, 3.0] 我想得到: [7.0, 5.0, 3.0] 解决方案 您可以使用python from collections import deque prices = [7.0, 9.0, 5.0, 1.0, 3.0] moving_average = deque() total = 0.0 days = 3 averages = [] for price in prices: moving_average.append(price) total += price if len(moving_average) > days: # Length of m
18 2024-04-09
编程技术问答社区
MATLAB/八度用于Conv2函数是哪种方法?
使用conv2函数的matlab/八度是哪种方法? 是: 快速傅立叶变换 3个或更多的循环,例如古典迭代 其他? 我正在寻找最快的方法conv2.我要为此编写C代码. 解决方案 conv2实现直接方法(即4个循环).这不是o( n 4 ),它是o( nk ),带有 n 像素的数量在图像和 k 中,内核中的非零像素的数量. fft实现是o( n log n ),独立于 k ,但常数很大,因此您需要一个大型 k 使其比直接实施更有效. 您可以通过比较计算fft2(img) vs conv2(img,ones(3,3))所需的时间来测试它: img = ones(1024,1024); k = ones(3,3); timeit(@()fft2(img)) timeit(@()conv2(img,k,'same')) ans = 0.0059 ans = 0.0015 通过FFT计算卷积需要fft2调用的3倍,加上复杂的
18 2024-04-09
编程技术问答社区
用于DSP的快速二维卷积
我想实现一些旨在在 beagle "> beagleboard上运行的图像处理算法.这些算法广泛使用卷积.我正在尝试找到用于2D卷积的良好的C实现(可能使用快速傅立叶变换).我还希望该算法能够在Beagleboard的DSP上运行,因为我听说DSP已针对此类操作进行了优化(具有其多重蓄能说明). 我没有该领域的背景,所以我认为自己实施卷积不是一个好主意(我可能不会像了解其背后所有数学的人那样做到这一点).我相信在某个地方存在DSP的良好C卷积实施,但我找不到它? 有人可以帮忙吗? 编辑:事实证明内核很小.它的尺寸为2x2或3x3.因此,我想我不是在寻找基于FFT的实现.我正在网络上搜索卷积以查看其定义,以便我可以直截了当地实现它(我真的不知道什么是卷积).我发现的只是乘以乘以的东西,我不知道如何使用矩阵来做.有人可以给我一个2x2内核盒的代码(或伪代码)吗? 解决方案 图像和内核的尺寸是多少?如果内核很大,则可以使用基于FFT的卷积,否则对于小内核,只需使用直接
16 2024-04-08
编程技术问答社区
在ANSI C代码中的1d线性卷积?
而不是重新发明轮子,我想知道是否有人可以将我推荐给1D线性卷积 ANSI C中的代码snippet ?我在Google和Stack Overflow中进行了搜索,但在C中找不到任何东西. ,例如,对于阵列A,B和C,所有双精度,其中A和B是输入和C输出,分别具有长度len_A,len_B和len_C = len_A + len_B - 1. 我的阵列尺寸很小,因此不需要通过FFT实施快速卷积的任何速度.寻找直接计算. 解决方案 以下方法: #include #include void convolve(const double Signal[/* SignalLen */], size_t SignalLen, const double Kernel[/* KernelLen */], size_t KernelLen, double Result[/* Sign
20 2024-04-08
编程技术问答社区
在O(nlogn)中查找一个数组的所有差异,其中n是元素的最大范围。
问题:给定一个排序的数组A查找来自A的元素的所有可能差异,其中每个元素都是范围内的整数[1,...,N].另外,您可以假设没有重复.因此,数组的最大大小为 注意:由于上述约束,总可能的差异将在[1,...,N-1]的范围内. 示例(n = 12): 输入:1、6、10、12 输出:2、4、5、6、9、11 这个问题类似于 n是否.该问题中的元素,而不是元素的上限. 在同一问题中也有一个答案: a> 这个家伙声称它确实可以在O(nlogn)中使用FFT和自我卷积完成,但是我不明白,当我在在线卷积计算器上尝试时,它似乎也是不正确的(例如那么,有人知道如何在o(nlogn)中实现这一目标? 预先感谢您:) 解决方案 op链接的这个答案建议以下步骤: 假定一个数组,该数组在[0, n -1]范围内具有非重复元素.* 创建一个长度 n 的数组,其中索引匹配输入元素的元素将设置为1,其他元素设置为0.可以在O( n ).例如,在输入数组[1,4,5]
14 2024-04-06
编程技术问答社区
用卷积矩阵模糊图像--神器(Haskell)
我正在尝试使用Haskell(使用JuicyPixels)进行一些图像处理.我已经完成了此功能,该功能将高斯模糊应用于图像,并且在处理的图像中有一些奇怪的文物: blur :: Image PixelRGBA8 -> Image PixelRGBA8 blur img@Image {..} = generateImage blurrer imageWidth imageHeight where blurrer x y | x >= (imageWidth - offset) || x = (imageHeight - offset) || y = matrixLength = ap
8 2024-04-01
编程技术问答社区
高斯模糊和卷积核子
我不明白卷积内核是什么,以及如何将卷积矩阵应用于图像中的像素(我在说在图像上进行高斯模糊操作). 我还可以解释如何为高斯模糊操作创建内核吗? 我正在阅读本文,但我似乎不了解如何完成工作... 感谢任何花时间向我解释这个的人:), ExtremeCoder 解决方案 基本思想是图像的新像素是由靠近它的像素的加权平均值创建的(想象一下像素周围绘制一个圆圈). 对于图像中的每个像素,您将在像素周围创建一个小正方形.可以说,您将8个邻居带到像素旁边(即使在这里无关紧要),我们进行了加权平均值来获得中间像素. 在高斯模糊情况下,它分解为两个维度操作.对于每个像素,仅在行方向靠近像素旁边的某些像素.将像素值从高斯分布计算得出的时间(或者是为了视觉效果而不是出于科学原因,权重可以看起来不错的东西)并总结它们.查看它的另一种方法是像素制作矢量,而权重制成矢量,而您正在服用点产品.作为单独的通过,在列方向上重复此过程. 其他解决方案 卷积内核是值的矩阵,
24 2024-04-01
编程技术问答社区
安卓:快速的位图模糊?
我一直在搜索过去三天,寻找一种内置的,硬件加速的方式,以用Android涂上位图.我偶然发现了某些工作,例如缩小位图并再次将其扩展,但是这种方法产生了低质量的结果,这些结果不适合我的图像识别要求.我还读到,使用着色器或JNI实施卷积是一个不错的方法,但我不敢相信在Android框架中没有内置的解决方案出于这个非常共同的目的.目前,我最终在Java中进行了自编写的卷积实现,但这很尴尬.我的问题是: 在Android框架中真的没有内置解决方案? 如果没有:什么是以仍然合理的实施和维护来加速卷积的最有效方法?我们应该使用JNI,着色器还是完全不同的东西? 解决方案 我终于找到了一个合适的解决方案: renderscript 允许实施重量计算在执行设备上可用.我得出的结论是,关于绩效和实施复杂性的合理平衡,这是一种比JNI或着色器更好的方法. 自API 17级以来,就有 Scriptintrinsicblur 从API.这正是我一直在寻找的,即高水平,硬件加速的高斯模糊实
26 2024-04-01
编程技术问答社区
在PGM二进制文件操作中扭曲的图像
我正在尝试在类型P5的图像上执行卷积( binary ) 下面的设置: 输入和输出数组 vector> image(rows, vector(cols, '\0')); vector> out(rows, vector(cols, '\0')); const int SIZE = 3; 过滤器 vector> filter = { { 0, -1, 0 }, { -1, 5, -1 }, { 0, -1, 0 } }; 将二进制数据插入图像数组 我正在阅读这样的pgm文件: getline(infile, type); //getline(infile, comment); infile >> rows >> cols; getline(infile, line); getline(infile, highest); //getl
16 2024-03-30
编程技术问答社区
在tensorflow/keras中输入的自相关。
我有一个1D输入信号.我想计算自相关作为神经网络的一部分,以进一步在网络内部使用. 我需要用输入本身执行输入卷积. 在KERAS自定义层/张量集中执行卷积.我们需要以下参数 data shape is "[batch, in_height, in_width, in_channels]", filter shape is "[filter_height, filter_width, in_channels, out_channels] 没有批处理形状,在我的情况下需要输入 解决方案 TensorFlow现在具有auto_correlation函数.它应该在版本1.6中.如果您从源构建,则可以立即使用(例如,请参阅e.g. github代码). 其他解决方案 这是一个可能的解决方案. 通过自卷,我理解了一个常规卷积,其中过滤器与输入完全相同(如果不是这样,对我的误解感到抱歉). 我们需要一个自定义功能,Lambda层. 首先,我使用的padding
14 2024-03-29
编程技术问答社区
反向传播如何在卷积神经网络(CNN)中工作?
我几乎没有关于CNN的问题.在S2和C3层之间的下图中,已经使用了5*5个大小的内核. Q1.那里使用了多少个内核?这些内核是否与S2层中的每个特征映射连接? Q2.当使用最大通用时,当反向放置错误时,max-Pooling功能/神经元如何知道/确定以前的直接层中的哪个(功能映射/神经元)获得最大值? Q3.如果我们想训练内核,那么我们以随机值初始化,是否有任何方程来使用反向传播的错误值更新这些内核值? Q4.在上图中,从f6层获得错误之后,反向传播是如何在"输入"和" C5"层之间起作用的? 解决方案 Q1: C1-> 6个内核 C3-> 16内核 s2和s4只是亚采样,这意味着2*2像素将减小至1像素 最大的汇总机构是最大池: ( 5 10 ) --> ( ) --> (10) ( 7 8 ) --> Q2: 您可以保存信息,或者如果您有足够的时间重新运行max_pooling并检查最大值位置,然后将错
8 2024-03-27
编程技术问答社区
如何正确计算tf.nn.weighted_cross_entropy_with_logits pos_weight变量?
我正在使用卷积神经网络. 我的数据非常不平衡,我有两个类. 我的第一类包含:551,462图像文件 我的第二类包含:52,377图像文件 我想使用weighted_cross_entropy_with_logits,但是我不确定我要正确计算pos_weight变量. 现在我正在使用 classes_weights = tf.constant([0.0949784, 1.0]) cross_entropy = tf.reduce_mean(tf.nn.weighted_cross_entropy_with_logits(logits=logits, targets=y_, pos_weight=classes_weights)) train_step = tf.train.AdamOptimizer(LEARNING_RATE, epsilon=1e-03).minimize( cross_entropy , global_step=
12 2024-03-07
编程技术问答社区