最近我开始研究反卷积算法并满足以下采集模型:
其中f是原始(潜在)图像,g是输入(观察)图像,h是点扩散函数(退化核),n是随机加性噪声,*是卷积算子.如果我们知道g和h,那么我们可以使用Richardson-Lucy算法恢复f:
哪里 ,(W,H)是h的矩形支撑的大小,乘法和除法是逐点的.很简单,用C++编写代码,所以我就是这么做的.结果表明
近似于f,而i小于m,然后它开始迅速衰减.因此,只需要在此m处停止算法- 最令人满意的迭代.
如果点扩散函数g也是未知的,则认为该问题是盲目的,并且可以应用Richardson-Lucy算法的修改:

对于f的初始猜测,我们可以像以前那样取g,并且对于h的初始猜测,我们可以采用平凡的PSF,或任何看起来类似于观察到的图像退化的简单形式.该算法也适用于模拟数据.
现在我考虑使用以下采集模型的多帧盲解卷积问题:
有没有办法开发Richardson-Lucy算法来解决这个公式中的问题?如果不是,是否有任何其他迭代过程来恢复f,那将不会比以前复杂得多?
algorithm signal-processing image-processing inverse deconvolution
我试图在Python中对图像进行去模糊,但遇到了一些问题.这是我尝试过的,但请记住,我不是这个主题的专家.根据我的理解,如果你知道点扩散函数,你应该能够通过执行反卷积来简单地对图像进行去模糊.然而,这似乎不起作用,我不知道我是在做一些愚蠢的事情,还是我不理解事情.在Mark Newman的计算物理学书籍(使用Python)中,他在问题7.9中触及了这个主题.在这个问题中,他提供了一个他使用高斯点扩散函数(psf)故意模糊的图像,问题的目的是使用高斯对图像进行去模糊.这是通过将模糊图像的2D FFT除以psf的2D FFT然后进行逆变换来实现的.这工作得相当好.
为了解决这个问题,我想对使用故意失焦的相机拍摄的真实图像进行去模糊.所以我设置了一个相机并拍了两组照片.第一组照片是焦点.第一个是在一个完全黑暗的房间里的一个非常小的LED灯,第二个是一张纸上有文字(使用闪光灯).然后,在不改变任何距离或任何东西的情况下,我改变了相机上的焦点设置,使文本非常失焦.然后,我使用闪光灯拍摄了文本照片,然后拍摄了第二张LED照片(没有闪光灯).这是模糊的图像.
现在,根据我的理解,模糊点光源的图像应该是点扩散函数,因此我应该能够用它来去模糊我的图像.问题在于,当我这样做时,我得到一个看起来像噪音的图像.经过一些研究后,使用反卷积技术时噪声似乎是个大问题.然而,鉴于我已经测量了我认为确切的点扩散函数,我很惊讶噪声在这里是一个问题.
我尝试过的一件事就是用1或者epsilon替换psf变换中的小值(小于epsilon),我尝试使用epsilon的大范围值.这产生的图像不仅仅是噪点,而且也不是图像的模糊版本; 它看起来像原始(非模糊)图像的奇怪,模糊版本.这是我的程序中的图像(您可以忽略sigma的值,该程序中未使用该值).
我相信我正在处理一个噪音问题,但我不知道为什么,我不知道该怎么办.任何建议都会非常感激(请记住,我不是这方面的专家).
请注意,我故意不发布代码,因为我认为这在某种程度上是无关紧要的.但如果有人认为有用,我会很高兴这样做.我不认为这是一个编程问题,因为我使用了相同的技术,并且当我具有已知的点扩散函数时(例如当我通过FFT的out-of划分原始对焦图像的FFT时)它工作正常 - 聚焦图像然后逆变换).我只是不明白为什么我似乎无法使用我的实验测量点扩散函数.
我目前正在使用 Tensorflow 2 和 Keras 构建 GAN,并注意到许多现有的生成器和鉴别器神经网络在 Keras 中使用 Conv2D 和 Conv2DTranspose。
我正在努力寻找从功能上解释两者之间差异的东西。谁能解释一下在 Keras 中制作神经网络的这两个不同选项意味着什么?
convolution conv-neural-network keras tensorflow deconvolution
我正在尝试堆叠2层来tf.nn.conv2d_transpose()对张量进行上采样.它在前馈期间工作正常,但在向后传播时出现错误:
ValueError: Incompatible shapes for broadcasting: (8, 256, 256, 24) and (8, 100, 100, 24).
基本上,我只是将第一个的输出设置conv2d_transpose为第二个的输入:
convt_1 = tf.nn.conv2d_transpose(...)
convt_2 = tf.nn.conv2d_transpose(conv_1)
Run Code Online (Sandbox Code Playgroud)
只使用一个conv2d_transpose,一切正常.只有多个conv2d_transpose堆叠在一起时才会出现错误.
我不确定实现多层的正确方法conv2d_transpose.任何关于如何解决这个问题的建议都将非常感激.
这是一个复制错误的小代码:
import numpy as np
import tensorflow as tf
IMAGE_HEIGHT = 256
IMAGE_WIDTH = 256
CHANNELS = 1
batch_size = 8
num_labels = 2
in_data = tf.placeholder(tf.float32, shape=(batch_size, IMAGE_HEIGHT, IMAGE_WIDTH, CHANNELS))
labels = tf.placeholder(tf.int32, shape=(batch_size, IMAGE_HEIGHT, IMAGE_WIDTH, 1))
# Variables
w0 = tf.Variable(tf.truncated_normal([3, 3, CHANNELS, …Run Code Online (Sandbox Code Playgroud) 使用MetalKit for iOS 10,当我们尝试执行MPSCNNConvolution时,输入如下:
内核大小:16x16输入通道:300输出通道:250
输入图像尺寸:250x250x300
命令缓冲区的执行需要10秒以上,然后退出"执行命令缓冲区由于执行期间的错误而中止.导致GPU超时错误(IOAF代码2)".如何解决这个问题?
有没有办法加快这个过程?(对于执行这些高维卷积,10秒太多了)
在这些卷积的帮助下,我们的目标是执行反卷积,因为它还没有API,我们会尝试自己完成.有没有API方法来执行这些反卷积操作?
我正在尝试实现卷积神经网络,我不明白为什么使用im2col操作更有效.它基本上存储要在不同列中乘以过滤器的输入.但为什么不应该直接使用循环来计算卷积而不是首先执行im2col?
convolution neural-network correlation conv-neural-network deconvolution
我想使用Keras层:
from keras.layers.convolutional import UpSampling2D
x = UpSampling2D((2, 2))(x)
Run Code Online (Sandbox Code Playgroud)
如何使用原生tensorflow复制此行为?
我无法找到一个等效的函数/图层.
我有两个图像o1& o2,并且我使用相同的高斯模糊内核模糊了这两个图像。然后我找到了内核k1 = DFT(b1) / DFT (o1),b1模糊得到的图像在哪里o1。
我已使用此内核 ( k1) 对通过模糊获得的b2位置执行反卷积。b2o2
但是去模糊输出不正确(输出图像与原始图像没有任何关系)我的代码有什么问题?
int main(int argc, char** argv)
{
Mat orig1 = imread(argv[1], 0);
Mat orig2 = imread(argv[2], 0);
Mat blur1, blur2;
GaussianBlur(orig1, blur1, Size(11, 11), 0, 0 );
GaussianBlur(orig2, blur2, Size(11, 11), 0, 0 );
imshow("or1", orig1);
imshow("bl1", blur1);
imshow("or2", orig2);
imshow("bl2", blur2);
waitKey(0);
deconvolution(orig1, blur1, orig2, blur2);
return 0;
}
void deconvolution(Mat & o1, Mat …Run Code Online (Sandbox Code Playgroud) 我正在尝试调整此DCGAN代码,以便能够使用2x80数据样本.
所有发生器层都不是tf.nn.deconv2dh0,即ReLu.目前每级的生成器过滤器大小:
Generator: h0: s_h16 x s_w16: 1 x 5
Generator: h1: s_h8 x s_w8: 1 x 10
Generator: h2: s_h4 x s_w4: 1 x 20
Generator: h3: s_h2 x s_w2: 1 x 40
Generator: h4: s_h x s_w: 2 x 80
Run Code Online (Sandbox Code Playgroud)
因为我的数据的性质,我想他们是2×...,即用于过滤器是最初产生2 x 5,2 x 10,2 x 20,2 x 40,和2 x 80.但是,当我只是手动输入s_h16 = 2 * s_h16等等时s_h2 = 2 * s_h2 …
我是r-cnn的新手。
面膜r-cnn纸上有术语AP,AP50,AP75。50、75是小的后缀,对不起,我不能缩小它的大小。无论如何,论文说它是超过IOU阈值的平均值。对于AP50,仅对与地面真实性进行比较的区域中超过50%的候选者进行计数,对于AP75,仅对75%的区域中的候选者进行计数。那么什么是空AP?我知道AP使用70%IoU阈值,但事实并非如此。因为只有AP比AP75低。
此外,还有其他一些我不太理解的术语。它们是AP,M,L。我知道它们的意思是小,中,大。然后有什么标准可以确定它们有多大。只是说小,中,大让我有些困惑。
提前致谢!
deconvolution ×10
convolution ×4
tensorflow ×4
keras ×2
python ×2
algorithm ×1
c++ ×1
caffe ×1
caffe2 ×1
correlation ×1
dcgan ×1
inverse ×1
ios10 ×1
iphone ×1
metal ×1
opencv ×1