使用 blockproc 或 im2col 在图像上重叠滑动窗口?

2024-01-30

我必须申请dct2到我的图像的小窗口,最好使用重叠窗口。

我发现Matlab中有两个函数可以实现这一点blockproc and im2col。我也无法理解,希望得到一些澄清。

blockproc可用于使用以下方法在滑动窗口上实现我的功能BorderSize and TrimBorder论据。

B = blockproc(A,[64,64],fun,'BorderSize',[5,5], 'TrimBorder', 'false');

我意识到这会创建一个块[64 + 2*5, 64 + 2*5]并应用该函数@fun在每个块上。但由于我无法进入我的功能@fun在调试以验证正确操作时,我无法确定这就是我所需要的。 我上面的代码是否适合我的需要?我知道我得到了一个串联结果B但它应该位于重叠的滑块上。这能达到我所需要的吗?

第二个是im2col. im2col(A,[m n],block_type)会将块分成 m × n 块,并将它们排列成列,那么每一列都是一个块?如果是这样,重叠是如何控制的?如果每个块都是一列,我可以成功应用dct2每列的功能?因为我怀疑它会接受向量作为输入吗?

如果能得到一些澄清,我们将不胜感激。


好吧,这是一个相当复杂的问题。我将尝试将其分解为单独的部分,并分别回答每个问题。

问题#1

blockproc可用于使用以下方法在滑动窗口上实现我的功能BorderSize and TrimBorder论据。

B = blockproc(A,[64,64],fun,'BorderSize',[5,5], 'TrimBorder', 'false');

我意识到这会创建一个块[64 + 2*5, 64 + 2*5]并应用该函数@fun在每个块上。但由于我无法进入我的功能@fun在调试以验证正确操作时,我无法确定这就是我所需要的。我上面的代码是否适合我的需要?我知道我得到了一个串联结果B但它应该位于重叠的滑块上。这能达到我所需要的吗?

经过一番尝试后blockproc,这确实是正确的,您可以使用它来使滑动邻域处理工作。但是,您将需要一个额外的标志,即PadPartialBlocks。此标志的目的是,如果您要提取位于图像外边缘的块,并且无法制作指定大小的块,则这将对该部分块进行零填充,使其符合到相同的大小。这是一个使用滑动窗口进行此操作的小示例。假设我们有一个矩阵:

>> A = reshape(1:25,5,5)

A =

     1     6    11    16    21
     2     7    12    17    22
     3     8    13    18    23
     4     9    14    19    24
     5    10    15    20    25

假设我们想要取上面矩阵中每个 3 x 3 重叠邻域的平均值,并对超出矩阵边界的那些元素进行零填充。你会这样做blockproc:

B = blockproc(A, [1 1], @(x) mean(x.data(:)), 'BorderSize', [1 1], 'TrimBorder', false, 'PadPartialBlocks', true);

值得注意的是块大小,在本例中为 1 x 1,BorderSize1 x 1 块的设置也与您期望的 3 x 3 块不同。为了探究为什么会出现这种情况,我们需要进一步了解如何BorderSize作品。对于给定的块中心,BorderSize允许您捕获值/像素超出原来的尺寸大小的块。对于那些超出矩阵边界的位置,我们默认将这些位置填充为零。BorderSize让我们能够捕捉到2M + 2N像素更多,其中M and N是您想要的水平和垂直边框尺寸。这将使我们能够捕获M原始块上方和下方有更多像素,并且N原始块左侧和右侧有更多像素。

因此,对于 1 的值A,如果块大小为 1 x 1,这意味着该元素仅由 1 组成,并且如果我们的BorderSize是 1 x 1。这意味着我们的最终块将是:

0  0  0
0  1  6
0  2  7

因为我们的块大小为 1,所以下一个块将以 6 为中心,我们将得到 3 x 3 的像素网格,依此类推。同样重要的是TrimBorder被设定为false这样我们就可以保留那些在块扩展时最初捕获的像素。默认设置为true。最后,PadPartialBlocks is true以确保所有块的大小相同。当你运行上面的代码时,我们得到的结果是:

B =

    1.7778    4.3333    7.6667   11.0000    8.4444
    3.0000    7.0000   12.0000   17.0000   13.0000
    3.6667    8.0000   13.0000   18.0000   13.6667
    4.3333    9.0000   14.0000   19.0000   14.3333
    3.1111    6.3333    9.6667   13.0000    9.7778

您可以使用以下方法验证我们是否得到相同的结果nlfilter http://www.mathworks.com/help/images/ref/nlfilter.html我们可以将平均值应用于 3 x 3 滑动邻域:

C = nlfilter(A, [3 3], @(x) mean(x(:)))

C =

    1.7778    4.3333    7.6667   11.0000    8.4444
    3.0000    7.0000   12.0000   17.0000   13.0000
    3.6667    8.0000   13.0000   18.0000   13.6667
    4.3333    9.0000   14.0000   19.0000   14.3333
    3.1111    6.3333    9.6667   13.0000    9.7778

因此,如果您想正确使用blockproc对于滑动操作,需要注意如何分别设置块大小和边框大小。在这种情况下,一般规则是始终将块大小设置为 1 x 1,并允许BorderSize指定您想要的每个块的大小。具体来说,对于大小为K x K,你会设置BorderSize to be floor(K/2) x floor(K/2)分别。如果K很奇怪。

例如,如果您想要一个5 x 5表示基于滑动窗口的过滤操作,您可以设置BorderSize to [2 2], as K = 5 and floor(K/2) = 2。因此,你会这样做:

B = blockproc(A, [1 1], @(x) mean(x.data(:)), 'BorderSize', [2 2], 'TrimBorder', false, 'PadPartialBlocks', true)

B =

    2.5200    4.5600    7.2000    6.9600    6.1200
    3.6000    6.4000   10.0000    9.6000    8.4000
    4.8000    8.4000   13.0000   12.4000   10.8000
    4.0800    7.0400   10.8000   10.2400    8.8800
    3.2400    5.5200    8.4000    7.9200    6.8400

复制这个nlfilter大小为 5 x 5 还给出:

C = nlfilter(A, [5 5], @(x) mean(x(:)))

C =

    2.5200    4.5600    7.2000    6.9600    6.1200
    3.6000    6.4000   10.0000    9.6000    8.4000
    4.8000    8.4000   13.0000   12.4000   10.8000
    4.0800    7.0400   10.8000   10.2400    8.8800
    3.2400    5.5200    8.4000    7.9200    6.8400

我正在做一些计时测试,看来blockproc在这种情况下使用比nlfilter.

问题2

第二个是im2col. im2col(A,[m n],block_type)会将块分成 m × n 块,并将它们排列成列,那么每一列都是一个块?如果是这样,重叠是如何控制的?如果每个块都是一列,我可以成功应用dct2每列的功能?因为我怀疑它会接受向量作为输入吗?

你是对的im2col将每个像素邻域或块转换为单列,这些列的串联形成输出矩阵。您可以通过以下方式控制块是否重叠或不同block_type范围。指定distinct or sliding(默认)来控制它。您还可以控制每个邻域的大小m and n.

但是,如果您的目标是申请dct2输出为im2col,那么你将得不到你想要的。具体来说,dct2考虑 2D 数据中每个数据点的空间位置,并用作转换的一部分。通过将每个像素邻域转换为单列,每个块最初存在的 2D 空间关系现在消失了。dct2需要 2D 空间数据,但您将指定 1D 数据。像这样,im2col可能不是您要找的。如果我正确理解你想要什么,你会想要使用blockproc反而。


希望这可以帮助!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 blockproc 或 im2col 在图像上重叠滑动窗口? 的相关文章

  • Python - 查找图像中对象的中心

    我有一个具有白色背景和非白色对象的图像文件 我想使用 python Pillow 找到对象的中心 我在 C 中发现了类似的问题 但没有可接受的答案 如何找到物体的中心 https stackoverflow com questions 12
  • 如何选择部分密集数据集的均匀分布子集?

    P是一个 n d 矩阵 持有nd 维样本 P某些地区的密度是其他地区的几倍 我想选择一个子集P其中任意样本对之间的距离大于d0 并且我需要将其传播到整个区域 所有样本都具有相同的优先级 无需优化任何内容 例如覆盖面积或成对距离之和 这是执行
  • opencv createsamples没有错误,但是没有找到样本

    我在用着this http coding robin de 2013 07 22 train your own opencv haar classifier html教程 我正在根据我的正面图像创建大量样本 我正在使用 Windows 这是
  • 将图像存储在 Mongodb 中并使用 Nodejs 提供服务

    我知道 Mongodb 可以通过两种方式存储图像 通过将图像存储为二进制在常规文档中 通过 Gridfs 管理更大的图像 为简单起见 并且因为我计划服务器的图像很小 所以我将选择选项 1 为了将图像提供给浏览器 我使用的是nodejs 我的
  • 在 MATLAB 中将数据拟合到 B 样条

    我正在尝试估计矩阵形式的时间序列数据中的缺失值 列代表时间点 即现在 我想将矩阵的每一行拟合到 B 样条曲线 并用它来估计缺失值 我可以使用 MATLAB 将数据拟合到普通样条曲线 但我完全陷入尝试找出如何拟合数据以创建 B 样条曲线的困境
  • 在 WPF 中显示 Drawing.Image

    我有一个 System Drawing Image 的实例 如何在我的 WPF 应用程序中显示这一点 我尝试过img Source但这不起作用 我有同样的问题并通过结合多个答案来解决它 System Drawing Bitmap bmp I
  • 如何读取 10 位原始图像?其中包含 RGB-IR 数据

    我想知道如何从我的 10 位原始 它有 rgb ir 图像数据 数据中提取 RGB 图像 如何使用 Python 或 MATLAB 进行阅读 拍摄时的相机分辨率为 1280x720 室内照片图片下载 https drive google c
  • 通过内联样式动态设置背景 Div 图像时不显示 | Next.Js

    我试图通过使用地图和外部 js 文件将图像存储为对象来从组件渲染图像 然后通过它们设置循环 将其设置为创建的每个 div 的不同背景图像 如果有意义的话 我将提供代码来更清楚地说明我想要完成的任务 在地图过程中 我试图定位对象方法 但我相信
  • 这是 `min` 和 `nanmin` 之间的区别; Matlab 中的“max”和“nanmax”?

    Matlab描述nanmin and nanmax像这样 NANMIN最小值 忽略NaNs NANMAX最大值 忽略NaNs 但实际上 min and max ignore NaNs too 那我应该使用哪个 根据我的测试 nanmin a
  • 在 Matlab 中快速加载大块二进制文件

    我有一些相当大的 int16 格式的数据文件 256 个通道 大约 75 1 亿个样本 每个文件约 40 50 GB 左右 它以平面二进制格式编写 因此结构类似于 CH1S1 CH2S1 CH3S1 CH256S1 CH1S2 CH2S2
  • 整数的十进制表示形式中的分隔数字

    例如 我想将用户输入作为整数输入 45697 并将前两位数字存储在数组 向量或其他内容中 例如 4 5 6 9 7 这样我就可以使用一些函数调用来检查前两个值 4 5 并对它们进行计算 问题 我不知道如何存储恢复前两个值 有没有简单的函数调
  • Nodejs Base64 中的读取文件

    我正在尝试从客户端读取以 base64 编码的图像 如何使用nodejs进行阅读 My code add to buffer base64 image var encondedImage new Buffer image name base
  • 对图像使用 Pixellib 自定义训练时出现 input_image 元形状错误

    我正在使用 Pixellib 来训练自定义图像实例分割 我创建了一个数据集 可以在下面的链接中看到 数据集 https drive google com drive folders 1MjpDNZtzGRNxEtCDcTmrjUuB1ics
  • Phonegap 图像未显示

    我无法让图像在我的phonegap 版本中正常工作 我读过绝对路径可能不起作用 所以我尝试了绝对路径和相对路径 但仍然没有运气 我包括这样的图像
  • 使用 TCPDF PHP 库横向显示的图像

    我正在使用 TCPDF PHP 库生成包含照片的 PDF 文档 由于某种原因 某些照片在我的计算机和网络上正确显示 但当我将该图像放入 PDF 中时 它似乎是横向的 这只发生在某些图像上 大多数图像显示正确 下面是在 PDF 中横向显示的示
  • 减少1000张图片的HTTP请求?

    我知道这个问题可能听起来有点疯狂 但我想也许有人会想出一个聪明的主意 假设您在一个 HTML 页面上有 1000 个缩略图 图像大小约为5 10 kb 有没有办法在单个请求中加载所有图像 以某种方式将所有图像压缩到一个文件中 或者您对该主题
  • CSS 比例和方形中心裁剪图像

    所以我的应用程序中有一个缩略图集合 其大小为200x200 有时原始图像没有这个比例 所以我计划将此图像裁剪为正方形 目前它只是拉伸图像以适合缩略图 所以说我的原始图像大小是400x800 那么图像看起来就很压扁 我想裁剪此图像 以便它查看
  • Tesseract 是否会忽略扫描文档中的任何非文本区域?

    我正在使用 Tesseract 但我不知道它是否忽略任何非文本区域并仅针对文本 我是否必须删除任何非文本区域作为预处理步骤以获得更好的输出 Tesseract 有一个非常好的算法来检测文本 但它最终会给出误报匹配 理想情况下 您应该在将图像
  • Matlab Solve():未给出所有解决方案

    我试图找到两条曲线的交点 syms x y g x 20 exp x 30 3 5 1 sol x sol y solve x 22 3097 2 y 16 2497 2 25 y g x x y Real true 它只提供一种解决方案
  • 如何更改焦点/按下时图像按钮的色调

    我有一个ImageButton在我的应用程序中 当按钮打开时我需要更改图像的色调pressed focused 我有ImageButton设置为获取其src来自 XML 文件 如下所示

随机推荐

  • 如何获取 char 的 unicode 值?

    我想获得汉字的 Unicode 值 它可能看起来像let values u16 f 当我使用 as bytes I got 227 129 174 当我使用 escape unicode I got u306e the 0x306e这正是我
  • PHP 的 unlink 函数可以与路径一起使用吗?

    我想从 PHP 中的文件夹中删除文件 但我只有该文件的路径 是否可以提供取消链接的路径 例如 unlink path to file txt 如果这不起作用 删除这些文件的唯一方法是在 path to 目录中创建一个 php 文件 并将其以
  • 改变架构生成器中的列长度?

    我有两个字段需要增加字符限制 我通读了文档 令我惊讶的是我没有找到它的选项 可以做吗 如果不是 我应该如何解决这个问题 我可以删除该列并使用正确的属性重新创建它 但我不想丢失数据库中的任何数据 对于 Laravel 4 DB update
  • mysql、准备好的语句和自动类型转换

    我使用常规语句和准备好的语句执行完全相同的查询时得到不同的结果 我认为这是一个类型转换错误 mysql gt show columns from server where field vlan Field Type Null Key Def
  • 在 Android 中缓存文件的最佳实践

    我目前的应用程序将图像文件缓存在cache应用程序的子目录 这些图像用于ListView并存储在HashMap of SoftReferences to Bitmaps 所以我的问题是 缓存这些图像文件的最佳方法是什么 而不增加我的应用程序
  • 协助刷新 athena 表中的数据

    我编写了从 S3 上的多个外部表读取数据的查询 应用必要的过滤器 连接 然后将结果加载到目标表中以在 Athena 中进行分析 但是 随着源表中的数据刷新 我想刷新目标表 所以我打算删除并重新创建该表 但它似乎不起作用 我能够删除目标表 但
  • 为什么 ondrop 不起作用?

    我试图让拖放工作 但我将一个函数连接到 ondrop 事件 但该函数从未被调用 这是一个笨蛋 http plnkr co edit qGEdYO8okRZAR3bnZrNk p preview http plnkr co edit qGEd
  • MPMediaItems 原始歌曲数据

    我想知道如何访问 MPMediaItem 的原始数据 有任何想法吗 您可以通过以下方式获取媒体项的数据 void mediaItemToData Implement in your project the media item picker
  • 其他语言中的 Cobol 88 类型等效项是什么?

    我现在正在学习 COBOL 非常喜欢 88 类型的变量 我想知道其他语言中是否有类似的东西 也是最知名的语言 例如 C Objective C 甚至使用库 我唯一能想到的相似之处就是使用 define booleanResult varia
  • 颠倒方向在 iOS 6 中不适用于导航视图和选项卡栏视图?

    我在 ios 6 中创建了一个带有导航视图的应用程序 此外 我还在应用程序摘要中设置了所有方向选项 甚至使用了 BOOL shouldAutoRotate and NSUInteger supportedInterfaceOrientaio
  • 如何在 Java Swing 中同步两个视图

    我正在尝试这样做 在我的 GUI 中 我有一个带有自定义模型的 JTable 在 GUI 的其他部分 我有一个面板 可以在其中绘制一些箭头 我想 同步这两个视图 假设我的 JTable 中有 5 行 我将在箭头面板中绘制 5 个箭头 如果我
  • 使用 ExtJS4 从文本字段切换到显示字段

    我创建了一个在普通显示字段中显示值的表单 表单旁边有一个 编辑 按钮 一旦用户单击 显示字段应切换为文本字段 因此使数据可编辑 我猜测 这可以通过使用两种相同的表单来实现 一种可编辑 一种不可编辑 并且根据用户单击按钮的情况 其中一种或另一
  • 未知标签类型:“连续”

    我的团队伙伴 有问题 Avg SessionLength TimeonApp TimeonWebsite LengthofMembership Yearly Amount Spent 0 34 497268 12 655651 39 577
  • IE 中 jquery Accordion 的无效参数错误

    jquery 手风琴抛出 无效参数 IE 中的例外 我的是 IE8 它适用于 Firefox 和 Chrome jquery Accordion 与 IE 可能存在什么问题 这是 HTML div h3 a href Training a
  • IE9 导入内联 SVG 元素损坏

    我在用这个方法 https stackoverflow com a 9883539 494954将 SVG 文档导入到页面中 效果很好 但在 IE9 中 没有一个
  • 如何用CSS使3个元素相互重叠

    我有3个要素 div class foo div div class bar div div class foobar div I want foo重叠 bar bar重叠 foobar foobar重叠 foo 像这样 用CSS可以吗 没
  • 如何选择本示例中未使用的代码

    我有一个int我的表中的列SQL数据库 我在这张表中保留了一些代码 我的代码的示例范围是 1 9 我不需要在这个范围内使用代码 Example 使用的代码是 Select code from MyTable result is 2 6 7
  • asp.net c# 中的 System.Web.Caching.Cache.NoSlidingExpiration

    请告诉我有关System Web Caching Cache NoSlidingExpiration在 ASP NET 中 有资料了here http msdn microsoft com en us library ms178597 as
  • Django 1.9 弃用警告 app_label

    我刚刚更新到 Django v1 8 并在更新项目之前测试了本地设置 并且收到了以前从未见过的弃用警告 这对我来说也没有任何意义 我可能只是忽略了某些内容或误解了文档 Users neilhickman Sites guild ankylo
  • 使用 blockproc 或 im2col 在图像上重叠滑动窗口?

    我必须申请dct2到我的图像的小窗口 最好使用重叠窗口 我发现Matlab中有两个函数可以实现这一点blockproc and im2col 我也无法理解 希望得到一些澄清 blockproc可用于使用以下方法在滑动窗口上实现我的功能Bor