将角度定量数据转换为定性图像

2024-04-17

我是一名晶体学家,试图从多达 5000 个文件中分析晶体方向。 Matlab 能否转换表格中的角度值,如下所示:

进入一个看起来像这样的表?:


这是一个基于 Lakesh 想法的更具体的例子。然而,这将处理任意数量的旋转。首先从中间有一条带的基本圆形图像开始。完成此操作后,只需运行for循环将所有这些旋转图像堆叠在一个网格中,该网格类似于我们在该矩阵中看到的每个旋转角度在旋转值矩阵中看到的角度。

诀窍是弄清楚如何定义基本方向图像。因此,我们定义一个白色正方形,中间有一个黑色圆圈。我们还将在中间定义一条红色条带。现在,我们假设基本方向图像为 51 x 51。因此,我们可以这样做:

%// Define a grid of points between -25 to 25 for both X and Y
[X,Y] = meshgrid(-25:25,-25:25);

%// Define radius
radius = 22;

%// Generate a black circle that has the above radius
base_image = (X.^2 + Y.^2) <= radius^2;

%// Make into a 3 channel colour image
base_image = ~base_image;
base_image = 255*cast(repmat(base_image, [1 1 3]), 'uint8');

%// Place a strip in the middle of the circle that's red
width_strip = 44;
height_strip = 10;
strip_locs = (X >= -width_strip/2 & X <= width_strip/2 & Y >= -height_strip/2 & Y <= height_strip/2);
base_image(strip_locs) = 255;

有了上面的内容,这就是我得到的:

现在,您需要做的就是创建一个最终的输出图像,该图像的图像数量与矩阵中的行和列一样多。鉴于您的旋转矩阵值存储在M, 我们可以用imrotate http://www.mathworks.com/help/images/ref/imrotate.html从图像处理工具箱并指定'crop'标志以确保输出图像与原始图像大小相同。然而,随着imrotate,无论旋转后图像中没有出现什么值,它都默认为0。您希望它在您的示例中显示为白色,因此我们必须做一些工作。你需要做的是创建一个logical矩阵的大小与输入图像相同,然后以与基本图像相同的方式旋转它。无论像素显示为黑色(也是false)在这个旋转的白色图像中,这些是我们需要设置为白色的值。像这样:

%// Get size of rotation value matrix
[rows,cols] = size(M);

%// For storing the output image
output_image = zeros(rows*51, cols*51, 3);

%// For each value in our rotation value matrix...
for row = 1 : rows
    for col = 1 : cols
        %// Rotate the image
        rotated_image = imrotate(base_image, M(row,col), 'crop');

        %// Take a completely white image and rotate this as well.
        %// Invert so we know which values were outside of the image
        Mrot = ~imrotate(true(size(base_image)), M(row,col), 'crop');

        %// Set these values outside of each rotated image to white
        rotated_image(Mrot) = 255;

        %// Store in the right slot.
        output_image((row-1)*51 + 1 : row*51, (col-1)*51 + 1 : col*51, :) = rotated_image;
    end
end

让我们尝试几个角度来确保这是正确的:

M = [0 90 180; 35 45 60; 190 270 55];

通过上面的矩阵,这就是我得到的图像。这存储在output_image:


如果您想将此图像保存到文件中,只需执行以下操作imwrite(output_image, 'output.png');, where output.png是您要保存到磁盘的文件的名称。我选择了PNG因为它是无损的,并且与其他无损标准(保存 JPEG 2000)相比,文件大小相对较小。

编辑以在角度为 0 时不显示线条

如果您希望使用上面的代码,并且只想在角度约为 0 时显示黑色圆圈,则只需插入一个if里面的声明for循环并创建另一个图像,其中包含一个没有条带的黑色圆圈。当。。。的时候if如果满足条件,您可以将此新图像放置在正确的网格位置,而不是带有红色条带的黑色圆圈。

因此,使用上面的代码作为基线执行如下操作:

%// Define matrix of sample angles
M = [0 90 180; 35 45 60; 190 270 55];

%// Define a grid of points between -25 to 25 for both X and Y
[X,Y] = meshgrid(-25:25,-25:25);

%// Define radius
radius = 22;

%// Generate a black circle that has the above radius
base_image = (X.^2 + Y.^2) <= radius^2;

%// Make into a 3 channel colour image
base_image = ~base_image;
base_image = 255*cast(repmat(base_image, [1 1 3]), 'uint8');

%// NEW - Create a black circle image without the red strip
black_circle = base_image;

%// Place a strip in the middle of the circle that's red
width_strip = 44;
height_strip = 10;
strip_locs = (X >= -width_strip/2 & X <= width_strip/2 & Y >= -height_strip/2 & Y <= height_strip/2);
base_image(strip_locs) = 255;

%// Get size of rotation value matrix
[rows,cols] = size(M);

%// For storing the output image
output_image = zeros(rows*51, cols*51, 3);

%// NEW - define tolerance
tol = 5;

%// For each value in our rotation value matrix...
for row = 1 : rows
    for col = 1 : cols

        %// NEW - If the angle is around 0, then draw a black circle only
        if M(row,col) >= -tol && M(row,col) <= tol
            rotated_image = black_circle;
        else %// This is the logic if the angle is not around 0
             %// Rotate the image
            rotated_image = imrotate(base_image, M(row,col), 'crop');

            %// Take a completely white image and rotate this as well.
            %// Invert so we know which values were outside of the image
            Mrot = ~imrotate(true(size(base_image)), M(row,col), 'crop');

            %// Set these values outside of each rotated image to white
            rotated_image(Mrot) = 255;                
        end

         %// Store in the right slot.
        output_image((row-1)*51 + 1 : row*51, (col-1)*51 + 1 : col*51, :) = rotated_image;
    end
end

变量tol上面的代码定义了一个容差,其中任何内容-tol <= angle <= tol已绘制黑色圆圈。这是为了在比较时允许浮点容差,因为直接对浮点值执行相等运算从来都不是一个好主意。通常,在您想要测试相等性的某个容差范围内进行比较是公认的做法。

将上述修改后的代码与角度矩阵一起使用M如前面的示例所示,我现在得到了这张图片:

请注意,矩阵左上角的条目的角度为 0,因此如我们所期望的那样,它被可视化为一个没有条带穿过的黑色圆圈。

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

将角度定量数据转换为定性图像 的相关文章

  • android中如何处理图片下载不完整的情况?

    我正在应用程序中下载图像以将其填充到用户界面上 这是我用来下载该图像并将其保存到设备外部存储器的代码 File firstDirectory new File Environment getExternalStorageDirectory
  • 如何在matlab中显示图像上的点?

    我有一些像素点 比如 p1 1 1 和 p2 1 10 等等 我想以任何颜色在图像上显示这些点 这个怎么做 MATLAB plot http www mathworks com help techdoc ref plot html文档非常全
  • 如何将Matlab命令的输出重定向到文件? [复制]

    这个问题在这里已经有答案了 我想将 Matlab 命令的输出重定向或复制到文件中 我怎样才能做到这一点 就我而言 我想使用 UNIX 工具比较两个大型结构diff 示例 我可以在 Matlab 中执行此操作 gt gt s1 s1 a 32
  • 在 MATLAB 中一次为元胞数组分配不同的值

    我需要有关在 MATLAB 中创建元胞数组的帮助 其中每个元胞都是不同大小的数组 例如 假设我有这个简单的数组和值 A 5 3 8 7 0 4 1 B 10 元胞数组C必须创建为 C 10 20 30 40 50 10 20 30 10 2
  • 如何从位图中删除白色背景色

    我想删除位图中的白色背景颜色 Bitmap capcha new Bitmap C image jpg pictureBox1 Image capcha 但我想在我的 pictureBox1 中仅显示背景中存在的没有白色的图像 尝试在验证码
  • Firefox 中忽略的图像最大高度百分比

    HTML div class container div
  • 笛卡尔散点图上的极坐标网格线

    我有一个脚本来创建散点图 使用gscatter 基于另一个脚本生成的 x y 数据 离散数据点 不连续 由于这些数据点实际上是圆形空间中某些对象的位置 因此添加极坐标网格线将使绘图更有意义 有谁知道如何在笛卡尔散点图上显示极坐标网格线 或者
  • 如何使图像保留在 CSS 网格容器的行中?

    下面的代码显示了当我调整窗口大小时的预期行为 Chrome 60 和 Firefox 55 中 但 iOS Safari 10 3 中除外 这很可能是它在 Safari 中行为不当的另一个问题 html body width 100 hei
  • 如何从 Matlab 在 vi​​rtualenv 中执行 Python 代码

    我正在创建一个用于研究的 Matlab 工具箱 我需要执行 Matlab 代码 但也需要执行 Python 代码 我想允许用户从 Matlab 执行 Python 代码 问题是 如果我立即执行此操作 我将必须在 Python 环境中安装所有
  • 获取 png 图像的像素的 alpha 值?

    我正在使用以下代码 img imagecreatefrompng image png col imagecolorat img x y alpha col gt gt 24 0x7F 但 alpha 值始终为 127 即使像素位于 x y
  • App Engine、PIL 和叠加文本

    我正在尝试在 GAE 上的图像上覆盖一些文本 现在他们公开了 PIL 库 这应该不是问题 这就是我所拥有的 它有效 但我不禁认为我应该直接写入背景图像 而不是创建单独的覆盖图像然后合并 我可以用吗Image frombuffer http
  • 如何在 R 中导入 matlab 表

    我有一个matlab mat文件与表数据类型我想将其导入 R 中 我为此使用 readMat R 正在将其作为列表读取 之后有没有办法将列表转换为 R 中的数据帧或表格格式 当我使用as dataframe我收到以下错误 Error in
  • 使用 Mean Shift 进行图像分割的解释

    谁能帮我理解 Mean Shift 分割的实际工作原理吗 这是我刚刚制作的一个 8x8 矩阵 103 103 103 103 103 103 106 104 103 147 147 153 147 156 153 104 107 153 1
  • 从 GIF 提取帧到 PNG 时丢失数据?

    当我尝试使用 fraxel 的答案时 http stackoverflow com questions 10269099 pil convert gif frames to jpg 在图像上http 24 media tumblr com
  • Direct2D:将 ID2D1Image 转换为 ID2D1Bitmap

    我正在开发一个需要修改屏幕上已有内容的程序 所以我只有一个ID2D1Bitmap我使用创建的pRenderTarget gt CopyFromRenderTarget 我想做的是将效果应用于该位图 效果仅返回ID2D1Image 但我需要有
  • 增加图像亮度而不溢出

    我在尝试增加图像亮度时遇到问题 这是原始图像 我想要得到的图像是这样的 现在使用以下代码增加亮度 image cv2 imread home wni vbshare tmp a4 index2 png 0 if sum image 0 le
  • 如何在 MATLAB 中创建带有分级标记颜色的散点图?

    我想在 MATLAB 中绘制一个简单的散点图 标记颜色从光谱的一端到另一端各不相同 例如红色 橙色 黄色 蓝色 紫色 我的数据比较了一段时间内河流的水量和水质 3 个简单的列 时间 水量 质量 我想绘制数量与质量的 x y 散点图 但颜色随
  • 使用 DrawImage 方法黑屏

    我必须使用绘制位图图像绘图上下文 DrawImage http msdn microsoft com en us library ms606804 28v vs 90 29 aspx method 使用下面的代码一切正常 BitmapIma
  • 如何在Python中设置像素的alpha值

    我正在尝试编辑image https drive google com file d 0B8JcwRV HVk0OURrcTFJczhmV2RlUGdMOG0ybldYUVRoamtF view usp sharing以一种将所有白色像素转
  • MATLAB 链表

    有哪些可能的方法来实现链表MATLAB http en wikipedia org wiki MATLAB 注意 我问这个问题是为了教学价值 而不是实用价值 我意识到 如果您实际上在 MATLAB 中滚动自己的链表 那么您可能做错了什么 然

随机推荐

  • 将 Bootstrap 导航栏中的元素居中

    无论我尝试什么 我都无法将 Bootstrap 导航栏中的某些内容居中 有什么解决方案吗 我尝试添加一个div 使用margin 0 auto or margin right auto margin left auto used cente
  • opencv中的矩阵类型转换

    我正在尝试使用滤波器对图像进行卷积 并借助 opencv 中的 filter2D 函数将其存储到 CV 64F 类型的矩阵中 但目标矩阵的类型发生了变化 我尝试借助 allocateTo 0r ConvertTo 函数将其更改回 CV 64
  • 了解随机起始权重对神经网络性能的影响

    使用 R 和包neuralnet 我尝试对数据进行建模 如下所示 这些是几天内以 10 分钟为间隔的温度读数 上面是 2 天的截图 使用下面的代码 我将神经网络拟合到数据 可能有更简单的方法来对这些精确数据进行建模 但将来数据可能看起来完全
  • 无需安装即可使用Python

    我有一个安装程序 它使用 Python 脚本来安装多个组件 我不想在用户计算机上安装 Python 如果用户还没有安装 Python 并且我也不希望安装 Python 成为使用我的安装程序的先决条件 有没有一种方法可以在不使用安装程序的情况
  • 范围之间的随机日期时间 - 不统一输出

    我实现了下面的 RandomDate 但我总是不断获取接近 From 日期的值 我可能在这里错过了一些东西 public static DateTime GetRandomDate DateTime from DateTime to var
  • 为什么矢量化通常比循环更快?

    为什么在执行操作的硬件的最低级别和所涉及的一般底层操作 即 运行代码时所有编程语言的实际实现通用的事情 矢量化通常比循环快得多 计算机在循环时会做什么而在使用矢量化时不会做什么 我指的是计算机执行的实际计算 而不是程序员编写的计算 或者它有
  • ChrisBanes PullToRefresh“正在加载...”问题

    我正在使用我发现的 chrisbanes 的 PullToRefresh ListViewhere https github com chrisbanes Android PullToRefresh 多亏了它的文档 我成功地实现了它 然而
  • 将 Spark Dataframe 保存到 Elasticsearch - 无法处理类型异常

    我设计了一个简单的作业 使用 Spark 从 MySQL 读取数据并将其保存在 Elasticsearch 中 这是代码 JavaSparkContext sc new JavaSparkContext new SparkConf setA
  • Three.js 中的文本几何

    我在 Three js r74 中的 TextGeometry 遇到一些问题 我该如何正确实施 这是我的代码笔 codepen io cheesyeyes pen eJqZxK 提前致谢 好吧 对于每个正在寻找简单答案而不是链接和其他超载示
  • 如何将数组写入 Google 电子表格?

    我正在构建一个具有整数值的数组 并尝试一次性将其写入 Google 电子表格 var myArray new Array for i 1 i lt 100 i myArray i i ss getRange 8 4 1 100 setVal
  • 如何通过连接到 Linux 计算机的 GSM/GPRS 调制解调器发送彩信? [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我有一个目录 其中包含 50 个图像
  • 9 补丁填充区域不适用于多个比例区域

    在我的 9 补丁中 我添加了一个填充区域 作为占据红色矩形下方大部分宽度的内容 然而 正如比例图像所示 它不起作用 如果我删除箭头所示的比例区域 那么它就可以完美工作 我做错了什么或者不理解 9 补丁吗 Thanks 我找到了一个相关的答案
  • Rails:form_for复选框设置为true或false,无论该框被选中/取消选中

    我有一个名为 users 的模型 它有 2 个布尔属性send email and send text 我有一个编辑用户模型的表单 我希望它根据该框是否选中 取消选中将这些属性设置为 true false 这是我的表格 div class
  • C# 泛型类型推断与协方差 - bug 或限制

    当具有依赖参数的泛型方法推断类型时 它在某些情况下会给出意外的结果 如果我明确指定类型 则一切都可以正常工作 无需任何进一步的更改 IEnumerable
  • 两个相同的 git 存储库

    我们在一个大团队中使用 git 作为项目的源代码 现在大约有一半的开发商正在离开 进入项目的现场阶段 此阶段将涉及大量开发 即许多提交 同时剩下的另一半也将继续编写代码 不幸的是 现场的互联网连接时断时续且不可靠 然而 至关重要的是 现场团
  • Julia JUMP Gurobi MIP - 查询并存储最佳目标并在运行时绑定

    我通过 Julia 中的 JuMP 包使用 Gurobi 来解决混合整数程序 我想获得一个图表像这个 https i stack imgur com 427LC png 其中还提供了基于 Python 的解决方案 也已在古罗比社区形式 ht
  • 如何在 Swift 中访问深度嵌套字典

    我的应用程序中有一个非常复杂的数据结构 我需要对其进行操作 我正在尝试跟踪玩家的花园中有多少种错误 虫子有十种 每种有十种图案 每种图案有十种颜色 因此可能存在 1000 个独特的错误 我想跟踪玩家拥有的每种类型的错误数量 嵌套字典如下所示
  • WPF MVVM EF 简单示例

    当我正在努力将数据插入视图模型时 我希望有人可以帮助我开始这个简单的 WPF MVVM 示例 我有一个 SQL 表温度 其中每个记录都有一个时间戳 然后是一个数值 例如 记录时间 温度2013年1月1日 00 00 6001 01 2013
  • 如何在多个Lua State(多线程)之间传递数据?

    我在中启动Redis连接池redis lua 通过从 C 调用 我得到了redis lua state 此 Lua 状态全局启动一次 仅在其他线程中启动get从中 当有一个 HTTP 请求 工作线程 时 我需要从redis lua stat
  • 将角度定量数据转换为定性图像

    我是一名晶体学家 试图从多达 5000 个文件中分析晶体方向 Matlab 能否转换表格中的角度值 如下所示 进入一个看起来像这样的表 这是一个基于 Lakesh 想法的更具体的例子 然而 这将处理任意数量的旋转 首先从中间有一条带的基本圆