我试图了解块大小的影响和选择DCT压缩系数的最佳策略.基本上我想问一下我在这里写的内容:
让我们假设最原始的压缩.制作图像块.在每个博客上执行DCT并清零一些系数.
根据我的理解,块越小越好.较小的块意味着像素更相关,因此DCT光谱中的能量更"紧凑".在快速变化的图像(高频)中应该更加强调.
假设我们将一定百分比的系数归零,那么什么会产生最佳图像质量,小块或大块?假设我们保持10%,25%,50%,75%,你会说这是不同百分比的不同答案吗?
另一个问题是如何选择不受影响的系数.我要说我必须根据地点而不是能源做出决定.你会从左上角拿一个方格吗?我已经在DCT频谱中平均了很多块,并得出结论最好的是从左上角取三角形.你怎么看?
希望我们能够进行有效的讨论.
有没有人知道如何计算二维滤波器的逆?
假设我有一个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.
鉴于我有一个等级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分解?
谢谢.
我现在想使用非对称高斯滤波器内核来使用matlab平滑图像,因为我不希望在垂直和水平方面具有相同的平滑度(具有不同的高斯模式大小和不同的标准偏差).但我找不到一个系统功能来完成这项工作.似乎函数fspecial不支持这一点.
那么,我该如何实现这个过滤器呢?
非常感谢.
我很久以前就开始学习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) 我需要使用相关距离进行一些聚类,而不是使用内置的"距离"相关性,其定义为d = 1-ri需要绝对的皮尔逊距离.在我的应用中,反相关数据应该相同cluter ID.而现在使用kmeans()函数即可获得高度防腐的质心,我希望通过组合它们来避免.现在,我还不熟悉matlab,并且在阅读kmeans函数时遇到一些问题.是否有可能为我的pourpose编辑它?
例: 
将相关距离用作度量时,第1行和第2行应获得相同的群集ID.
我做了一些尝试来编辑内置的matlab函数(打开kmeans->第775行),但是很奇怪 - 当我改变距离函数时,我得到一个有效的距离矩阵,但错误的聚类索引,无法找到它的原因.很想得到一些提示!一切都好!
我正在尝试将以下代码从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
二维滤波器有快速实现吗?
寻找类似的东西:
C / C ++ / C#/ VB.NET / Delphi中的带实现的快速中位数过滤有更多代码示例。
我还发现了“恒定时间中值过滤”。
如何将a转换dlib::array2d<bgr_pixel>为灰色图像?
灰色的图像应该是array2d<unsigned_char>.
我从未在这个问题上看到过很好的dlib文档.
我有一个简单的项目。它包含两个文件:
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?
假设我有一维高斯函数.它的长度是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
我该怎样预防呢?是否有更好的单调递减函数插值算法?
我在MAC OS X 10.8上使用XCode 4.6.
我是这个IDE和平台的新手.我有一个我编译的项目,XCode关闭了优化.
如果我设置Release Scheme并不重要.
我在名为" 无法使用XCode 4.5禁用调试器 "的线程中看到它与标志'-O0'和'-Os'有关.我知道有些标志设置为"调试模式",这意味着没有进行优化,代码会生成更多数据来帮助调试.我只是找不到在XCode中控制此行为的单个参数(VS中的/ Mtd).
XCode选项中的哪个参数控制此参数?
此外,在VS中,很容易将构建参数看作命令行(在选项下,链接器和构建).我在哪里可以看到XCode?
谢谢.
我想知道编译器如何处理内部函数。
如果使用 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)仅使用各自的函数来构建它们?