- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我在进行卷积时遇到了如何设置边界的大问题。我们得到了这部分代码,我已经实现了零填充,但现在我必须将像素值反射(reflect)到边界。
bool ConvolutionFilter::Execute()
{
// First, create a valid output image.
// This fails, if no valid input image is available.
if( !CreateOutputImage() )
{
return false;
}
// Check if convolution kernel is set.
if( m_Kernel == NULL )
{
std::cout << "Error: No convolution kernel set!" << std::endl;
return false;
}
/* Execute the convolution filter. */
/*
* Hier sind schonmal ein paar Konstanten definiert, die Sie brauchen.
* Kommentieren Sie den Code aus, wenn Sie diese benutzen.
*/
const int kernelHalfSizeX = m_Kernel->GetHalfSizeX();
const int kernelHalfSizeY = m_Kernel->GetHalfSizeY();
//const int kernelSizeX = m_Kernel->GetSizeX();
const int imageSizeX = static_cast<int>(m_InputImage->GetSizeX());
const int imageSizeY = static_cast<int>(m_InputImage->GetSizeY());
int conv, value;
/*
* TODO: Aufgabe 3: Implementieren Sie die Faltung des Eingabe-Bildes m_InputImage
* mit der Filtermaske m_Kernel und schreiben sie das Ergebnis in das Ausgabe-Bild
* m_OutputImage.
* Die Faltung ist gegeben als:
* f_out(x,y)=sum from{j=-hY} to{hY} sum from{i=-hX} to{hX} f(x+i,y+j) * g(i,j)
*
* Aufgabe 3b: Verwenden Sie dabei 0-Randbedingungen, d.h. wenn (x+i,y+j) ausserhalb des Bildbereiches
* liegen, ist f(x+i,y+j) * g(i,j) = 0.
*
* Sie koennen mit m_Kernel->GetCoefficient(i,j) auf die Werte der Filtermaske zugreifen.
* Lesen Sie die Kommentare in der Klasse ConvolutionKernel für Details!
*
* Beachten Sie, dass i und j auch negative Werte annehmen, und deshalb nicht unsigned sein
* koennen. Evtl. muessen Sie (abhaengig vom Compiler) das Ergebnis von m_InputImage->GetSizeX()
* bzw. m_InputImage->GetSizeY() zunaechst von unsigned int nach signed int konvertieren, um
* Warnings bei einem Vergleich mit vorzeichenbehafteten Werten zu vermeiden, oder verwenden Sie
* die oben definierten Konstanten imageSizeX, imageSizeY.
*/
/*
* TODO: Aufgabe 3c: Veraendern Sie ihren Code aus Aufg 3b so, dass reflektierende Randbedingungen
* verwendet werden (siehe Aufgabenblatt).
* ACHTUNG: Kommentieren sie den Code aus Aufg 3b nur aus, und loeschen Sie diesen nicht!
*
*/
for(int x = 0; x<=imageSizeX; x++)
{
for(int y = 0; y<=imageSizeY; y++)
{
conv = 0;
for(int j = -kernelHalfSizeY; j<=kernelHalfSizeY; j++)
{
for(int i = -kernelHalfSizeX; i<=kernelHalfSizeX; i++)
{
if(x+i>0 || x+i<imageSizeX || y+j>0 || y+j<imageSizeY) {
value = m_InputImage->GetPixel(x+i,y+j);
}
else
{
value = m_InputImage->GetPixel();
//value = 0; //Zero-Padding
}
conv += value*m_Kernel->GetCoefficient(i,j);
}
}
printf("conv: %d\n", conv);
m_OutputImage->SetPixel(x,y,conv);
}
}
return true;
}
那么我如何才能获得不同掩模尺寸的像素值,以将它们反射(reflect)到图像的边界之外呢?
最佳答案
int xi = x + i;
if ( xi < 0 ) xi = - xi;
else if ( xi > imageSizeX ) xi = imageSizeX - xi;
int yj = y + j;
... same ...
value = m_InputImage->GetPixel(xi,yj);
我认为这不需要解释......
关于c++ - 滤波器卷积反射边界,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13606492/
我正在尝试构建不同(但每个同质)类型的可遍历项的多个交叉产品。所需的返回类型是元组的可遍历对象,其类型与输入可遍历对象中的类型相匹配。例如: List(1, 2, 3) cross Seq("a",
import java.util.Scanner; public class BooleanProduct { public static void main(String[] args) {
任务 - 数字的最大 K 积 时间限制:1 内存限制:64 M 给定一个整数序列 N(1 ≤ N ≤ 10 月,| A i | ≤ 2.10 9)和数量 K(1 ≤ K ≤ N)。找出乘积最大的 K
考虑一个大小为 48x16 的 float 矩阵 A 和一个大小为 1x48 的 float vector b。 请建议一种在常见桌面处理器 (i5/i7) 上尽可能快地计算 b×A 的方法。 背景。
假设我有一个 class Rectangle(object): def __init__(self, len
设 A 为 3x3 阶矩阵。判断矩阵A的 boolean 积可以组成多少个不同的矩阵。 这是我想出的: #include int main() { int matri
背景 生成随机权重列表后: sizes = [784,30,10] weights = [np.random.randn(y, x) for x, y in zip(sizes[:-1],sizes[
我正在开发一个 python 项目并使用 numpy。我经常需要通过单位矩阵计算矩阵的克罗内克积。这些是我代码中的一个相当大的瓶颈,所以我想优化它们。我必须服用两种产品。第一个是: np.kron(n
有人可以提供一个例子说明如何使用 uBLAS 产品来乘法吗?或者,如果有更好的 C++ 矩阵库,您可以推荐我也欢迎。这正在变成一个令人头疼的问题。 这是我的代码: vector myVec(scala
我正在尝试开发一个Javascript程序,它会提示用户输入两个整数,然后显示这两个整数的和、乘积、差和商。现在它只显示总和。我实际上不知道乘法、减法和除法命令是否正在执行。这是 jsfiddle 的
如何使用 la4j 计算 vector (叉)积? vector 乘积为 接受两个 vector 并返回 vector 。 但是他们有scalar product , product of all e
在 C++ 中使用 Lapack 让我有点头疼。我发现为 fortran 定义的函数有点古怪,所以我尝试在 C++ 上创建一些函数,以便我更容易阅读正在发生的事情。 无论如何,我没有让矩阵 vecto
是否可以使用 Apple 的 Metal Performance Shaders 执行 Hadamard 产品?我看到可以使用 this 执行普通矩阵乘法,但我特别在寻找逐元素乘法,或者一种构造乘法的
我正在尝试使用 open mp 加速稀疏矩阵 vector 乘积,代码如下: void zAx(double * z, double * data, long * colind, long * row
有没有一种方法可以使用 cv::Mat OpenCV 中的数据结构? 我检查过 the documentation并且没有内置功能。但是我在尝试将标准矩阵乘法表达式 (*) 与 cv::Mat 类型的
我是一名优秀的程序员,十分优秀!