使用 matlab 创建跨图像边界的强度带

2024-02-20

I have this image (8 bit, pseudo-colored, gray-scale): original image

我想在其边界周围创建一个特定度量的强度带。

我尝试了腐蚀和其他数学运算,包括过滤以实现所需的频带,但一旦我使用腐蚀来切割部分边界,实际图像强度就会发生变化。

到目前为止我的代码如下所示:

clear all
clc
x=imread('8-BIT COPY OF EGFP001.tif');
imshow(x);
y = imerode(x,strel('disk',2));
y1=imerode(y,strel('disk',7));
z=y-y1;
figure
z(z<30)=0
imshow(z)

我使用它遇到的主要问题是它在某种程度上改变了原始图像的强度,如下所示:

所以我的问题是,如何在不改变原始图像的任何其他属性的情况下创建这样一个跨图像边界的带?


根据烧杯所讨论的内容以及您想要完成的操作,我个人会将您的图像转换为二进制文件,其中false代表背景和true代表前景。完成后,您可以使用良好的结构元素来侵蚀该图像,该元素保留了对象轮廓的圆度(disk在你的例子中)。

其输出将是图像中大型物体的内部。你能做的就是使用这个面具将图像中的这些位置设置为黑色这样您就可以保留外带。因此,尝试做这样的事情:

%// Read in image (directly from StackOverflow) and pseudo-colour the image
[im,map] = imread('https://i.stack.imgur.com/OxFwB.png');
out = ind2rgb(im, map);

%// Threshold the grayscale version
im_b = im > 10;

%// Create structuring element that removes border
se = strel('disk',7);

%// Erode thresholded image to get final mask
erode_b = imerode(im_b, se);

%// Duplicate mask in 3D
mask_3D = cat(3, erode_b, erode_b, erode_b);

%// Find indices that are true and black out result
final = out;
final(mask_3D) = 0;

figure;
imshow(final);

让我们慢慢看一下代码。前两行获取 PNG 图像,其中包含灰度图像和彩色图,我们将这两个图像读入 MATLAB。接下来,我们使用ind2rgb http://www.mathworks.com/help/matlab/ref/ind2rgb.html将图像转换为其伪彩色版本。完成此操作后,我们将使用灰度图像并对图像进行阈值处理,以便捕获所有对象像素。我将图像的阈值设置为 10,以避免图像中出现的一些量化噪声。我们将对该二值图像进行操作,以确定我们想要设置为 0 以获得外边框的像素。

接下来,我们声明一个结构元素,它是一个半径为 7 的圆盘,然后腐蚀掩码。完成后,我以 3D 方式复制此蒙版,使其具有与伪彩色图像相同数量的通道,然后使用蒙版的位置将对象内部的值设置为 0。结果将是原始图像,但保留所有对象的外部轮廓。

我得到的结果是:

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

使用 matlab 创建跨图像边界的强度带 的相关文章

  • opencv形态扩张滤波器作为最大滤波器

    就像中值滤波器的定义一样 我可以将 最大滤波器 定义为局部窗口 例如dst x y max 3x3 局部窗口像素 但我在opencv中找不到这样的过滤器 最接近的是 dilate 函数 然后我使用 dilate 函数的默认配置 但结果不正确
  • 非模态 questdlg.m 提示

    我的代码绘制了一个图 然后提示用户是否想使用不同的参数绘制另一个图 问题是 当 questdlg m 打开时 用户无法查看绘图的详细信息 这是代码 while strcmp Cont Yes 1 Some code modifying da
  • 从 Java 运行 MATLAB 函数

    我在 MATLAB 中有一个 m 文件 我想从 Java 调用该文件 并以字符串或 Java 中的任何形式获取解决方案 这听起来很简单 但由于某种原因我无法让它发挥作用 我试过这个 matlab nosplash wait nodeskto
  • 如何每次使用按钮将数据添加到 MATLAB 中的现有 XLSX 文件?

    我有一个函数可以生成一些变量 例如分数 对 错 未回答 使用按钮调用此功能 问题是如何每次将函数生成的这些值添加 附加到 XLSX 文件中 或者 如何创建 MAT 文件以便可以添加它 可能的解决方案是什么 附加到 xls 文件所涉及的挑战是
  • 检查图像中是否有太薄的区域

    我正在尝试验证雕刻机的黑白图像 更多的是剪贴画图像 不是照片 我需要考虑的主要事情之一是区域的大小 或线条的宽度 因为机器无法处理太细的线条 所以我需要找到比给定阈值更细的区域 以此图为例 竖琴的琴弦可能太细而无法雕刻 我正在阅读有关 Ma
  • 如何使用 python 在白色背景上裁剪图像?

    我正在扫描旧照片 因此我有来自扫描仪的图像和白色背景 我的目的是拍照 去除白色背景 我怎样才能做到这一点 An example picture is the following 我的简单方法 import os import time fr
  • 将数据提示堆栈放在轴标签顶部,并在轴位置发生更改后更新轴标签

    此问题仅适用于 unix matlab Windows 用户将无法重现该问题 我在尝试创建位于 y 轴标签顶部的数据提示时遇到问题 下图很能说明问题 正如您所看到的 在 ylabel 附近创建的数据提示将到达 ylabel 文本的底部 而期
  • 识别相似图像的库

    我想确定 2 张图像的相似程度 图像可能已被缩放 裁剪等 因此简单的像素比较将不起作用 我环顾四周 有很多关于这个主题的学术论文 但他们没有发布他们的代码 那么 您知道有一个可以比较图像的已发布库 适用于 Linux 和 Windows 吗
  • 直方图均衡结果

    I am trying to code histogram equalization by my self but the results are different from the built in function in matlab
  • 在 Visual Studio 中调试非托管 C++ 图像

    我确实在 Visual Studio 2010 下的非托管 C 上编写了大量图像处理代码 其中涉及许多不同的图像 我希望能够在逐步调试时像简单标识符一样轻松地观看它们 我当前的解决方案是使用一些在 Matlab 控制台中导出图像的函数 可以
  • 预测测试图像时出现错误 - 无法重塑大小数组

    我正在尝试使用 TensorFlow 和 Keras 在 Python 中进行图像识别 并且我已经关注了下面的博客 https stackabuse com image recognition in python with tensorfl
  • OpenCV 2.4.3 中的阴影去除

    我正在使用 OpenCV 2 4 3 最新版本 使用内置的视频流检测前景GMG http docs opencv org modules gpu doc video html highlight gmg gpu 3a 3aGMG GPU算法
  • 在 MATLAB 中模拟 C++ 模板

    我试图找出创建 C 模板或 Java 通用对象的替代方案的最佳方法 出于多种不同的原因 我过去曾多次想这样做 但现在我想做的是为几个相关的类创建 saveobj 和 loadobj 函数 我的想法是 我想要一组通用的例程来创建默认结构 然后
  • numpy:大量线段/点的快速规则间隔平均值

    我沿着一维线有许多 约 100 万个 不规则间隔的点 P 这些标记线段 这样 如果点是 0 x a x b x c x d 则线段从 0 gt x a x a gt x b x b gt x c x c gt x d 等 我还有每个段的 y
  • 命令 A(~A) 在 matlab 中的真正作用是什么

    我一直在寻找找到矩阵非零最小值的最有效方法 并在论坛上找到了这个 设数据为矩阵A A A nan minNonZero min A 这是非常短且高效的 至少在代码行数方面 但我不明白当我们这样做时会发生什么 我找不到任何关于此的文档 因为它
  • MATLAB 编译器与 MATLAB 编码器

    两者有什么区别 据我了解 MATLAB Compiler将MATLAB代码包装成 exe文件 这样就可以在不安装MATLAB的情况下使用它 并且只需要MCR 除此之外 MATLAB Builder NE 还可以用于生成与 Net 框架一起使
  • 如何绘制更大的边界框和仅裁剪边界框文本 Python Opencv

    我正在使用 easyocr 来检测图像中的文本 该方法给出输出边界框 输入图像如下所示 Image 1 Image 2 使用下面的代码获得输出图像 But I want to draw a Single Bigger bounding bo
  • Matlab:3D 堆积条形图

    我正在尝试创建一个 3D 堆积条形图 如这个问题所示 Matlab 中的 3D 堆叠条形图 https stackoverflow com questions 13156133 3d stacked bars in matlab 5D 然而
  • 将 Matlab 数组移植到 C/C++

    我正在将 matlab 程序移植到 C C 我有几个问题 但最重要的问题之一是 Matlab 将任何维度的数组都视为相同 假设我们有一个这样的函数 function result f A B C result A 2 B C A B and
  • 如何在 C++ BOOST 中像图形一样加载 TIFF 图像

    我想要加载一个 tiff 图像 带有带有浮点值的像素的 GEOTIFF 例如 boost C 中的图形 我是 C 的新手 我的目标是使用从源 A 到目标 B 的双向 Dijkstra 来获得更高的性能 Boost GIL load tiif

随机推荐