小编Roy*_*oyi的帖子

DCT压缩 - 块大小,选择系数

我试图了解块大小的影响和选择DCT压缩系数的最佳策略.基本上我想问一下我在这里写的内容:

视频压缩:什么是离散余弦变换?

让我们假设最原始的压缩.制作图像块.在每个博客上执行DCT并清零一些系数.

根据我的理解,块越小越好.较小的块意味着像素更相关,因此DCT光谱中的能量更"紧凑".在快速变化的图像(高频)中应该更加强调.

假设我们将一定百分比的系数归零,那么什么会产生最佳图像质量,小块或大块?假设我们保持10%,25%,50%,75%,你会说这是不同百分比的不同答案吗?

另一个问题是如何选择不受影响的系数.我要说我必须根据地点而不是能源做出决定.你会从左上角拿一个方格吗?我已经在DCT频谱中平均了很多块,并得出结论最好的是从左上角取三角形.你怎么看?

希望我们能够进行有效的讨论.

compression signal-processing image-processing dct

4
推荐指数
1
解决办法
4966
查看次数

导出图像卷积核的逆滤波器

有没有人知道如何计算二维滤波器的逆?

假设我有一个3x3过滤器:
0 1 0
1 1 1
0 1 0
我想发现它是反向的.使用DFT很容易.但是,我想说我想通过卷积来做到这一点.现在,这就是问题,Matlab象征性不是我的专长.假设存在3X3反向滤波器,则意味着两者的卷积将导致:
0 0 0
0 1 0
0 0 0
问题是为此创建正确的方程组并求解它.使用符号进行操作很容易思考,但我无法做到.

有任何想法吗?谢谢.

PS我不确定这个有反向滤波器,因为它的DTFT中有零.

此外,有人应该像MathOverflow一样在这个论坛中允许Latex.

signal-processing image-processing filter

4
推荐指数
2
解决办法
9633
查看次数

低秩矩阵的计算

鉴于我有一个等级3的矩阵3x3 A.我想创建一个秩2的矩阵,它在$ {l} _ {2} $/Frobenius范数中最接近A.我们称之为矩阵F.

很容易通过SVD实现,即如果$ A = US {V} ^ {H} $由SVD分解$ F = U\hat {S} {V} ^ {H} $.其中$\hat {S} $与$ S $相同,最后一个奇异值归零.

问题是,是否有一个计算密集度较低的方法来创建F但使用SVD分解?

谢谢.

algorithm math performance matrix

4
推荐指数
1
解决办法
334
查看次数

非对称高斯滤波器

我现在想使用非对称高斯滤波器内核来使用matlab平滑图像,因为我不希望在垂直和水平方面具有相同的平滑度(具有不同的高斯模式大小和不同的标准偏差).但我找不到一个系统功能来完成这项工作.似乎函数fspecial不支持这一点.

那么,我该如何实现这个过滤器呢?

非常感谢.

matlab filtering image-processing gaussian convolution

4
推荐指数
2
解决办法
3743
查看次数

朱莉娅与Matlab.一个简单的测试用例

我很久以前就开始学习Julia了,我决定在Julia和Matlab之间进行一个简单的比较,用一个简单的代码来计算一组高维点的欧几里德距离矩阵.

任务很简单,可分为两种情况:

情况1:给定nxd矩阵形式的两个数据集,比如X1和X2,计算X1中每个点与X2中所有点之间的成对欧几里德距离.如果X1的大小为n1×d,并且X2的大小为n2×d,则得到的欧几里德距离矩阵D的大小为n1×n2.在一般设置中,矩阵D不对称,并且对角元素不等于零.

情况2:给定nxd矩阵X形式的一个数据集,计算X中所有n个点之间的成对欧几里德距离.得到的欧几里德距离矩阵D的大小为nxn,对称,主对角线上的元素为零.

我在Matlab和Julia中实现这些函数的方法如下.请注意,没有一个实现依赖于任何类型的循环,而是简单的线性代数运算.另请注意,使用这两种语言的实现非常相似.

在为这些实现运行任何测试之前,我的期望是Julia代码将比Matlab代码快得多,并且显着提高.令我惊讶的是,事实并非如此!

我的实验参数在下面给出了代码.我的机器是MacBook Pro.(15"2015年中),2.8 GHz Intel Core i7(四核)和16 GB 1600 MHz DDR3.

Matlab版本:R2018a

Julia版本:0.6.3
BLAS:libopenblas(USE64BITINT DYNAMIC_ARCH NO_AFFINITY Haswell)
LAPACK:libopenblas64_
LIBM:libopenlibm
LLVM:libLLVM-3.9.1(ORCJIT,haswell)

结果列于下表(1)中.

表1:计算两个不同数据集(第1列)之间以及一个数据集(第2列)中所有成对点之间的欧几里德距离矩阵的30次试验的平均时间(以标准偏差计).

          Two Datasets  ||  One Dataset     
Run Code Online (Sandbox Code Playgroud)

Matlab:2.68(0.12)秒.1.88(0.04)秒

朱莉娅V1:5.38(0.17)秒.4.74(0.05)秒

Julia V2:5.2(0.1)秒.     


我没想到两种语言之间存在这种显着差异.我希望Julia比Matlab更快,或者至少和Matlab一样快.令人惊讶的是,在这项特定任务中,Matlab的速度几乎是Julia的2.5倍.我不想基于这些结果得出任何早期结论,原因很少.

首先,虽然我认为我的Matlab实现尽可能好,但我想知道我的Julia实现是否是这项任务的最佳实现.我还在学习Julia,我希望有一个更高效的Julia代码可以为这个任务带来更快的计算时间.特别是,朱莉娅在这项任务中的主要瓶颈在哪里?或者,为什么Matlab在这种情况下有优势?

其次,我目前的Julia软件包基于MacOS的通用和标准BLAS和LAPACK软件包.我想知道基于英特尔MKL的基于BLAS和LAPACK的JuliaPro是否会比我正在使用的当前版本更快.这就是为什么我选择从StackOverflow上更多知识渊博的人那里获得一些反馈的原因.

第三原因是,我想知道为朱编译时间是否包括在示于表1(第二和第三行)的定时,以及是否有更好的方法来评估的功能的执行时间.

我将很感激对前三个问题的任何反馈.

谢谢!

提示:此问题已被识别为StackOverflow上另一个问题的可能重复.但是,这并非完全正确.这个问题有三个方面,如下面的答案所反映.首先,是的,问题的一部分与OpenBLAS与MKL的比较有关.其次,事实证明,如其中一个答案所示,也可以改进实施.最后,使用BenchmarkTools.jl可以改进julia代码本身的基准标记.

MATLAB

num_trials = 30;
dim = 1000;
n1 = 10000;
n2 = 10000;

T = zeros(num_trials,1);

XX1 = randn(n1,dim);
XX2 = rand(n2,dim);

%%% DIFEERENT MATRICES
DD2ds = zeros(n1,n2);

for (i …
Run Code Online (Sandbox Code Playgroud)

performance matlab linear-algebra julia

4
推荐指数
1
解决办法
2973
查看次数

在K-Means算法中使用绝对皮尔逊相关作为距离(MATLAB)

我需要使用相关距离进行一些聚类,而不是使用内置的"距离"相关性,其定义为d = 1-ri需要绝对的皮尔逊距离.在我的应用中,反相关数据应该相同cluter ID.而现在使用kmeans()函数即可获得高度防腐的质心,我希望通过组合它们来避免.现在,我还不熟悉matlab,并且在阅读kmeans函数时遇到一些问题.是否有可能为我的pourpose编辑它?

例:

将相关距离用作度量时,第1行和第2行应获得相同的群集ID.

我做了一些尝试来编辑内置的matlab函数(打开kmeans->第775行),但是很奇怪 - 当我改变距离函数时,我得到一个有效的距离矩阵,但错误的聚类索引,无法找到它的原因.很想得到一些提示!一切都好!

matlab cluster-analysis data-mining k-means

3
推荐指数
1
解决办法
3803
查看次数

C / C ++中的快速7x7 2D中值滤波器

我正在尝试将以下代码从Matlab转换为C ++

function data = process(data)
    data = medfilt2(data, [7 7], 'symmetric');
    mask = fspecial('gaussian', [35 35], 12);
    data = imfilter(data, mask, 'replicate', 'same');
    maximum = max(data(:));
    data = 1 ./ ( data/maximum );
    data(data > 10) = 16;
end
Run Code Online (Sandbox Code Playgroud)

我在medfilt2中遇到的问题-这是一个2D中值滤波器,我需要它支持每像素10位和更多图像。

1.我研究过openCV,它有一个5x5的中值过滤器,它支持16位,但是7x7仅支持字节。

http://docs.opencv.org/2.4/modules/imgproc/doc/filtering.html?highlight=medianblur#medianblur

2.我也正在研究英特尔IPP,但我只能看到一维中值过滤器 https://software.intel.com/zh-cn/node/502283

二维滤波器有快速实现吗?
寻找类似的东西:

  1. 快速中值搜索:使用并行编程和向量化(AVX / SSE)操作的ANSI C实现 ...
  2. 二维数字信号处理II。变换和中值滤波器。由TSHuang编辑。施普林格出版社。1981年。

C / C ++ / C#/ VB.NET / Delphi中的带实现的快速中位数过滤有更多代码示例。

我还发现了“恒定时间中值过滤”

c c++ opencv image-processing simd

3
推荐指数
1
解决办法
2247
查看次数

在DLIB中将RGB图像转换为灰度图像

如何将a转换dlib::array2d<bgr_pixel>为灰色图像?

灰色的图像应该是array2d<unsigned_char>.

我从未在这个问题上看到过很好的dlib文档.

c++ image-processing dlib

3
推荐指数
1
解决办法
5268
查看次数

如何使用 CMake 构建 ispc 文件?

我有一个简单的项目。它包含两个文件:

main.c
kernel.ispc
Run Code Online (Sandbox Code Playgroud)

(ispc 文件是https://ispc.github.io/ 的来源)

要手动编译文件,我将使用:

ispc --target=sse2 kernel.ispc -o kernel.o
gcc -c main.c -o main.o
gcc main.o kernel.o -o my_program
Run Code Online (Sandbox Code Playgroud)

所以对于我的 cmake 文件,它看起来像

project(my_program)
add_executable(my_program main.c)
Run Code Online (Sandbox Code Playgroud)

但当然它不会链接,因为它缺少 kernel.o 中的符号

所以问题是:如何让 cmakekernel.ispc使用ispc编译器进行编译,以及如何让 cmake 将其链接到my_program?

c cmake ispc

3
推荐指数
1
解决办法
1026
查看次数

将1D高斯内插到2D高斯分布

假设我有一维高斯函数.它的长度是600.

我想将其插值为600 X 600的2D高斯.

这是我写的代码(OTFx是高斯函数,OTF - 2d插值函数):

[x, y] = meshgrid([-300:299], [-300:299]);
r = sqrt((x .^ 2) + (y .^ 2));

OTF = interp1([-300:299], OTFx, r(:), 'spline');
OTF = reshape(OTF, [600, 600]);
Run Code Online (Sandbox Code Playgroud)

问题是我最后得到了Overshoot: alt text http://i39.tinypic.com/259et0g.png

我该怎样预防呢?是否有更好的单调递减函数插值算法?

matlab interpolation

2
推荐指数
1
解决办法
4224
查看次数

XCode 4 - 释放模式标志,构建标志,链接标志

我在MAC OS X 10.8上使用XCode 4.6.

我是这个IDE和平台的新手.我有一个我编译的项目,XCode关闭了优化.

如果我设置Release Scheme并不重要.

我在名为" 无法使用XCode 4.5禁用调试器 "的线程中看到它与标志'-O0'和'-Os'有关.我知道有些标志设置为"调试模式",这意味着没有进行优化,代码会生成更多数据来帮助调试.我只是找不到在XCode中控制此行为的单个参数(VS中的/ Mtd).

XCode选项中的哪个参数控制此参数?

此外,在VS中,很容易将构建参数看作命令行(在选项下,链接器和构建).我在哪里可以看到XCode?

谢谢.

xcode

1
推荐指数
1
解决办法
1810
查看次数

使用 SSE / AVX Intrinisics 时架构的影响

我想知道编译器如何处理内部函数。

如果使用 SSE2 Intrinsics (Using #include <emmintrin.h>) 并使用-mavx标志进行编译。编译器会生成什么?它会生成 AVX 或 SSE 代码吗?

如果使用 AVX2 Intrinsics (Using #include <immintrin.h>) 并使用-msse2标志进行编译。编译器会生成什么?它会生成 SSE Only 或 AVX 代码吗?

编译器如何处理内部函数?
如果使用 Intrinsics,它是否可以帮助编译器理解循环中的依赖关系以实现更好的矢量化?

例如,这里发生了什么 - https://godbolt.org/z/Y4J5OA(或https://godbolt.org/z/LZOJ2K)?
查看全部 3 个窗格。

上下文

我正在尝试构建具有不同 CPU 功能(SSE4 和 AVX2)的相同功能的各种版本。
我正在使用 SSE Intrinsics 编写相同的版本,并且使用 AVX Intrinsics 编写一次。
假设他们的名字MyFunSSE()是 和MyFunAVX()。两者都在同一个文件中。

如何让编译器(相同的方法适用于 MSVC、GCC 和 ICC)仅使用各自的函数来构建它们?

gcc sse icc intrinsics avx

1
推荐指数
1
解决办法
2111
查看次数