小编tri*_*can的帖子

近似e ^ x

我想近似e x函数.

是否可以使用基于样条类型的多种方法来实现?之间即X 1X 2,然后

y 1 = 1 x + b 1,x 2和x 3之间,

然后

y 2 = a 2 x + b 2

等等

这适用于专用的fpga硬件,而不是通用CPU.因此我需要自己创建这个功能.准确性不是一个问题.此外,我实际上不能提供多个乘法电路和/或多个移位/加法器.另外,我想要比CORDIC功能小得多的东西,实际上尺寸很重要.

math optimization fpga

11
推荐指数
2
解决办法
2万
查看次数

快速,小面积和低延迟的部分排序算法

我正在寻找一个快速的方式做81号的部分排序 - 理想的情况下我期待提取最低16个值(它不是必需的16是在绝对正确的顺序).

这样做的目标是在FPGA专用硬件 - 所以这个稍微复杂的问题,因为我想要的结果执行的面积尽可能小.我看了看,并实施了奇偶合并排序算法,但我的理想在寻找什么,可能是我的需求更有效的(贸易算法实现大小的部分排序,以便给予最低16,不一定而不是一个完整的)

任何建议都会非常受欢迎

非常感谢

sorting algorithm verilog fpga vhdl

10
推荐指数
2
解决办法
3434
查看次数

在矩阵中查找最小非零值

我正在尝试找到一个二维数组,表示3d数组中第三维的最小值

a = floor(rand(10,10,3).*100); % representative structure
b = min(a,[],3); % this finds the minimum but also includes 0 
Run Code Online (Sandbox Code Playgroud)

我试过用:

min(a(a>0),3) 
Run Code Online (Sandbox Code Playgroud)

但这不正确?我想我可以对a的第三维进行排序,然后在1:depth-1中找到最小值 - 但这似乎不是最有效的方法吗?

有什么想法吗?

matlab multidimensional-array

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

调整白平衡

我正在研究一些用于白平衡操作的图像处理算法.看起来像之前的Stackoverflow 问题很好地回答了自动白平衡算法的问题.

然而,我想知道如何从一个温度转换到另一个温度,即做出假设(并且它是一个很大的假设)白平衡算法可以采用处理过的图像(例如JPEG等)并将整体温度放在6500的场景中,你会如何在算法上"冷却"或"温暖"场景到特定的温度?这将是图像编辑程序中的常见操作,虽然这些操作通常在没有应用处理的RAW图像上操作(颜色空间操纵或其他) - 在RAW文件的情况下 - 也许单个RAW文件包含足够的信息(在文件头)关于相机传感器的颜色校准,使特定的温度变换更具确定性?

任何输入赞赏 - 谢谢!

matlab signal-processing photography image-processing

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

操作数到|| 和&&运算符必须可转换为逻辑标量值

我有一个简单的问题,我正在寻找Matlab中的快速实现.我有一系列的值,让我们说:

 a = floor(rand(5,5).*255)
Run Code Online (Sandbox Code Playgroud)

然后我有一个类似大小的阈值数组,让我们说它是:

a_thresh = floor(rand(5,5).*255)
Run Code Online (Sandbox Code Playgroud)

对于其中的值,a如果它们比a_thresh我希望输出为0 的相应值小0.5倍- 同样对于1.2x,值a_thresh也应该设置为零,:

a(a < a_thresh.*0.4) = 0
a(a > a_thresh.*1.2) = 0
Run Code Online (Sandbox Code Playgroud)

对于0.4x和0.5x以及1.0x和1.2x之间的值,我想要一个比例量,否则在0.5和1.0之间我想要使用a未改变的值.我以为我可以使用以下内容:

 a(a>= a_thresh .* 0.4 && a <a_thresh.* 0.5) = ((a - a_thresh.*0.4)/(a_thresh.*0.5 a_thresh.*0.4)) .* a;
Run Code Online (Sandbox Code Playgroud)

但是,我收到的错误是:

操作数为|| 和&&操作必须可转换为逻辑标量值

关于如何解决这个问题的任何建议?显然我可以使用循环来做到这一点,这将是微不足道的,但我想保持代码矢量化.

matlab logical-operators

6
推荐指数
1
解决办法
5万
查看次数

快速增加两个1-D阵列的方法

我有以下数据:

A = [a0 a1 a2 a3 a4 a5 .... a24]
B = [b0 b1 b2 b3 b4 b5 .... b24]
Run Code Online (Sandbox Code Playgroud)

然后,我想要乘以如下:

C = A * B' = [a0b0 a1b1 a2b2 ... a24b24]
Run Code Online (Sandbox Code Playgroud)

这显然涉及25次乘法.

但是,在我的场景中,每个"循环迭代"只有5个新值被移入A(并且5个旧值从A移出).有没有快速的方法来利用数据通过A转移而不是全新的事实?理想情况下,我希望最小化乘法运算的数量(可能需要更多的加法/减法/累加).我最初认为收缩压阵列可能有所帮助,但它没有(我想!?)

更新1:注意B长期固定,但可以重新编程.

更新2:A的移位如下:a [24] <= a [19],a [23] <= a [18] ... a [1] <= new01,a [0] <= new00.依此类推每个时钟周期

非常感谢!

hardware verilog fpga vhdl asic

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

在Matlab中读取和处理大型文本文件

我正在尝试将大文本文件(几百万行)读入Matlab.最初我使用的是importdata(file_name),这似乎是一个简洁的解决方案.但是我需要使用Matlab 7(是的,我知道它的旧版本),似乎不支持importdata.因此我尝试了以下方法:

while ~feof(fid)    
    fline = fgetl(fid);
    fdata{1,lno} =  fline ;
    lno = lno + 1;
end
Run Code Online (Sandbox Code Playgroud)

但这真的很慢.我猜它是因为它在每次迭代时调整数组大小.有没有更好的方法来做到这一点.请记住,输入数据的前20行是字符串类型数据,其余数据是3到6列十六进制值.

io matlab file

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

使用移位和加/减来除以常数

嗨所有我试图除以无符号常数除以仅使用移位和加/减 - 如果它是乘法我没有问题,但我有点被分裂困扰.

例如,假设常数除数为192,可以说红利为8000

"完整结果"y = 8000/192 = 41(假设我没有保留小数位)

y = 8000 >> 8 ... 31 y = 8000 >> 7 ... 62

但是,我如何获得更准确的解决方案?

非常感谢!

math performance assembly bit-manipulation approximation

3
推荐指数
2
解决办法
3706
查看次数

优化像素处理的循环

我正在实现一种算法(在OpenCV中),它迭代图像中的每个像素,并且对于每个像素计算块与邻域中的像素匹配,以便消除这些相邻像素的相似性.具有非常深的循环的"天真"实现非常慢,所以我想知道如何尝试提高性能.以下是我当前代码的摘录:

for(nCh=1;nCh<=channels;nCh++) { // Loop over three channels

  for(i=0;i<h;i++) { // "vertical" loop

    for(j=0;j<w;j++) { // "horizontal" loop

      for (si=-sw_height; si<sw_height; si++){ // vertical search window loop

        for (sj=-sw_width; sj<sw_width; sj++){ // horizontal search window loop

            dist = 0;

            for (blki=0; blki<blk_height; blki++){ // block match loop

              for (blkj=0; blkj<blk_width; blkj++){ // block match loop

                current_pxl = data[(i+blki)*step+(j+blkj)*channels+nCh];  

                search_pxl  = data[(i+blki+si)*step+(j+blkj+sj)*channels+nCh]; 

                dist += pow((current_pxl - search_pxl),2); 

              }

            }

          // ... further processing

        }

      }

    }

  }

}
Run Code Online (Sandbox Code Playgroud)

optimization opencv image-processing

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

在Mac OS X上开始使用图像处理

我最近从PC转移到MacBook Pro.我开始学习Objective-C的教程并在Cocoa中进行开发.我在我的日常工作中做了很多图像处理算法开发工作(逐像素操作),所以我想为OS X创建一个或两个测试图像处理应用程序.我很难弄清楚从哪里开始 - 假设我想创建一个简单的应用程序(我可以重用),如下所示:

  1. 从文件菜单中的打开文件选项加载图像
  2. 在GUI中显示它.
  3. 单击按钮以逐像素处理应用
  4. 更新显示的图像
  5. 从文件菜单中的保存选项保存已处理的图像

任何指针或链接都将非常受欢迎.

谢谢

其他信息:

  1. 我对Linux中的OpenCV非常熟悉 - 但是还没有考虑在Objective-C/Cocoa/Xcode环境中使用它 - 甚至不确定这是不是一个好主意?

  2. 我想使用GPU加速也会很好,但我不熟悉OpenGL/OpenCL - 所以我可能不得不暂时把它放在长手指上.

macos cocoa image-processing objective-c

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

矢量化循环

我想优化下面的代码,这只是一个矩阵乘法 - 我确信这可以在不使用循环的情况下完成 - 但我似乎无法将其弄好.

k = [ 76    150    29; ...
     -44   -85    128;  ...
     128   -108   -21];

for i = 1:size(rgb,1)
  for j = 1:size(rgb,2)
    triplet(1:3) = rgb(i,j,:);
    yuv(i,j,:)   = single(triplet) * single(k');
    yuv(i,j,:)   = fix(yuv(i,j,:) ./ 256);
  end
end
Run Code Online (Sandbox Code Playgroud)

有什么想法或建议吗?

对于那些具有图像处理背景的人来说,你会发现上面的代码只是一个RGB到YUV的转换 - 你可能会问我为什么不使用内置rgb2ycbcr函数 - 但是在这种情况下我想使用如上所述的8位转换系数.

matlab image-processing vectorization

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