耳朵图像处理 - 在 MATLAB 中查找直线和曲线的交点

2024-04-05

!1 https://i.stack.imgur.com/j3ZRQ.jpg我有一只耳朵的 Canny 边缘输出...我用一条线(绿色)连接了最远的两个边界。现在我想从这条线的中点到外边界(左侧)绘制一条法线。 我编写的代码帮助我绘制法线,但我希望红线完全符合白色边界。我还想要在它相交的点处的交点。我还考虑过另一种方法。通过更改 50 到 60 像素(在代码中),红线穿过白色边界。如果我得到相同的交点,那么我可以轻松地绘制所需长度的线。我在互联网和 Mathworks 上找到了一些代码,但它是用于 2 条线的交集......任何人都可以帮忙吗?

for i=1:numel(p)
    x = [ p{i}(1), p{i}(3)];
    y = [p{i}(2), p{i}(4)];
   line(x,y,'color','g','LineWidth',2);
   m = (diff(y)/diff(x));
   minv = -1/m;
   line([mean(x) mean(x)-50],[mean(y) mean(y)-50*minv],'Color','red')
   axis equal

end ;

![][2]


从以下位置获取输入图像here https://stackoverflow.com/questions/22024438/resample-an-image-from-pixel-to-millimiters.

这是获取交点并绘制它的代码-

%% Read image and convert to BW
img1 = imread('ear.png');
BW = im2bw(img1);

L = bwlabel(BW,8);
[bw_rows,bw_cols] =find(L==1);
bw_rowcol = [bw_rows bw_cols];
bw_rowcol(:,1) = size(BW,1) - bw_rowcol(:,1); % To offset for the MATLAB's terminology of showing height on graphs

%% Get the farthest two points on the outer curve and midpoint of those points
distmat = dist2s(bw_rowcol,bw_rowcol);
[maxdist_val,maxdist_ind] = max(distmat(:),[],1);
[R,C] = ind2sub(size(distmat),maxdist_ind);

farther_pt1 = bw_rowcol(R,:);
farther_pt2 = bw_rowcol(C,:);
midpoint = round(mean([farther_pt1 ; farther_pt2]));

%% Draw points on the normal from the midpoint across the image
slope_farthest_pts = (farther_pt1(1) - farther_pt2(1)) / (farther_pt1(2) - farther_pt2(2));
slope_normal = -1/slope_farthest_pts;

y1 = midpoint(1);
x1 = midpoint(2);
c1 = y1 -slope_normal*x1;

x_arr = [1:size(BW,2)]';
y_arr = slope_normal*x_arr + c1;
yx_arr = round([y_arr x_arr]);

%% Finally get the intersection point
distmat2 = dist2s(bw_rowcol,yx_arr);

[mindist_val2,mindist_ind2] = min(distmat2(:),[],1);
[R2,C2] = ind2sub(size(distmat2),mindist_ind2);

intersection_pt = bw_rowcol(R2,:); % Verify that this is equal to -> yx_arr(C2,:)

%% Plot
figure,imshow(img1)

hold on
x=[farther_pt1(2),farther_pt2(2)];
y=size(BW,1)-[farther_pt1(1),farther_pt2(1)];
plot(x,y)

hold on
x=[intersection_pt(2),midpoint(2)];
y=size(BW,1)-[intersection_pt(1),midpoint(1)];
plot(x,y,'r')
text(x(1),y(1),strcat('Int Pt = ','[',num2str(x(1)),',',num2str(y(1)),']'),'Color','green','FontSize',24,'EdgeColor','red','LineWidth',3)

不要忘记使用这个相关的功能 -

function out = dist2s(pt1,pt2)

out = NaN(size(pt1,1),size(pt2,1));
for m = 1:size(pt1,1)
    for n = 1:size(pt2,1)
        if(m~=n)
            out(m,n) = sqrt( (pt1(m,1)-pt2(n,1)).^2 + (pt1(m,2)-pt2(n,2)).^2 );
        end
    end
end

return;

输出 -

希望这会有所帮助并让我们知道一切顺利。有趣的项目!

EDIT 1:根据下面显示的编辑后的照片,我有几个问题要问你。

问题:你想要一条从 PT1 到 MP 的线并让它延伸并在 PT3 处接触外耳吗?如果是这样,你如何定义 PT1?如何区分 PT1 和 PT2?您可以尝试绘制一条从 PT2 到 MP 的线,并让它在其他点接触外耳,那么为什么不使用 PT2 而不是 PT1呢?

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

耳朵图像处理 - 在 MATLAB 中查找直线和曲线的交点 的相关文章

  • 这是 `min` 和 `nanmin` 之间的区别; Matlab 中的“max”和“nanmax”?

    Matlab描述nanmin and nanmax像这样 NANMIN最小值 忽略NaNs NANMAX最大值 忽略NaNs 但实际上 min and max ignore NaNs too 那我应该使用哪个 根据我的测试 nanmin a
  • 如何突出显示最靠近鼠标的文本行?

    我有一篇很长的文本 我想为用户提供阅读帮助 当前行应该突出显示 为了更简单 我将只使用鼠标的 Y 坐标 这样 鼠标指针就不会妨碍 我有一个带有 id 的大 DIVcontent它用类填充整个宽度和一个小 DIVcontent对于文本 请参阅
  • 在 MATLAB 中用两个值替换向量值

    我必须创建一个以向量作为输入的函数v和三个标量a b and c 该函数替换了的每个元素v等于a有一个二元素数组 b c 例如 给定v 1 2 3 4 and a 2 b 5 c 5 输出将是 out 1 5 5 3 4 我的第一次尝试是尝
  • 是否有一个函数可以检查矩阵是否对角占优(行占优)

    矩阵是对角占优 http en wikipedia org wiki Diagonally dominant matrix 按行 如果对角线处的值在绝对意义上大于该行中所有其他绝对值的总和 对于列也是如此 只是相反 matlab中有没有函数
  • 整数的十进制表示形式中的分隔数字

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

    我有绘图的处理程序或图形的处理程序 例子 h plot 1 0 2 10 xx get h xx DisplayName Annotation 1x1 handle Color 0 0 1 LineStyle LineWidth 0 500
  • 同时重新排序和旋转图像的高效方法

    为了快速加载 jpeg 我为turbojpeg 实现了一个 mex wrapper 以有效地将 大 jpeg 读入 MATLAB 对于 4000x3000px 的图像 实际解码只需要大约 120 毫秒 而不是 5 毫秒 然而 像素顺序是 R
  • 使用 StretchDIBits 使用 Delphi 6 处理条形码图像 - 输出中缺少条形线

    我的应用程序是在 Delphi 6 中开发的 由于后台处理和大量数据 它消耗大约 60MB 120MB 物理内存 这是一个资源密集型应用程序 该应用程序的功能之一是在进行某些处理后创建条形码图像 如果用户继续生成条形码 那么至少十分之一的条
  • MATLAB 图中轴标签与轴之间的距离

    我正在使用 MATLAB 绘制一些数据 我想调整轴标签与轴本身之间的距离 但是 只需向标签的 位置 属性添加一点即可使标签移出图窗窗口 是否有 保证金 属性或类似的东西 在上图中 我想增加数字和标签 Time s 之间的距离 同时自动扩展数
  • 调整回形针大小以适合矩形框

    我有一个矩形图像 例如 30x800 像素 如何用回形针缩放它以保留 100x100 像素图像的纵横比 并用边框填充空白区域 一个例子 http www imagemagick org Usage thumbnails pad extent
  • 如何将 mat 转换为 array2d

    我为dlib http dlib net face landmark detection ex cpp html那里的面部地标代码使用 array2d 来获取图像 但我喜欢使用 Mat 读取图像并转换为 array2d 因为 dlib 仅支
  • 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 它只提供一种解决方案
  • 如何加载具有可变文件名的 .mat 文件?

    select all mat files oar dir oar mat n oar name loop through files for l 1 length oar load pat oar l lt this is the mat
  • 从 imread 返回的 ndims

    我正在从文件夹中选取图像 尺寸为128 128 为此 我使用以下代码行 FileName PathName uigetfile jpg Select the Cover Image file fullfile PathName FileNa
  • MATLAB - GUI 和 OPC 服务器

    我想在 MATLAB 中设计一个图形用户界面 可以使用 MATLAB 的过程控制对象链接和嵌入 OPC 工具箱连续读取数据 我怎样才能实现这个 我已经设计了图形用户界面 但我无法将数据读入图形用户界面 就这样做 type opctoolMA
  • 为什么 mex 文件中的 OpenMP 仅产生 1 个线程?

    我是 OpenMP 新手 我有以下代码 使用配置了 MSVS2010 的 Matlab mex 可以正常编译 计算机有 8 个可用处理器 我也使用 matlabpool 检查过 include mex h include
  • 如何使用 python 在白色背景上裁剪图像?

    我正在扫描旧照片 因此我有来自扫描仪的图像和白色背景 我的目的是拍照 去除白色背景 我怎样才能做到这一点 An example picture is the following 我的简单方法 import os import time fr
  • 从筛查乳腺 X 光检查数字数据库 (DDSM) 获取数据

    我正在尝试以可读格式获取 DDSM 数据集 有谁有 DDSM heathusf 程序的工作版本 可以在 Linux 或 Windows 上正常运行吗 我知道 DDSM 的 jpeg 程序有一个适用于 linux 的工作版本 位于http w
  • 在 Matlab 的命令窗口中获取旧式帮助

    问题的简短版本 在最新版本的 Matlab 中 我在 Windows 上的 R2014b 和 R2015a 中看到过 当您键入help foo你得到一个简要描述 简介函数及其签名 例如 输入help bsxfun产生类似这样的东西 只有更好
  • setImageCompressionQuality 与 setCompressionQuality 之间有什么区别 - Imagick

    我在Imagick中找到了两种设置图像压缩质量的方法 A 设置图像压缩质量 B 设置压缩质量 所以我想知道哪一个是最好的以及为什么在以下条件下 我读到了setCompressionQuality方法仅适用于新图像 我正在尝试压缩文件 jpe

随机推荐

  • Angular2 组件视图不会通过方法更新值更改

    在 Angular2 中 我正在创建一个需要打开和关闭的模式窗口 在开发过程中我偶然发现了一些奇怪的事情 当我改变activate我里面的变量Modal class带有外部按钮 视图未更新 打印activate控制台中的变量没有任何问题 我
  • 在 Java 中从 System.in 读取最快的方法是什么?

    我正在使用标准中读取一堆由空格或换行符分隔的整数Scanner System in 在Java中有没有更快的方法来做到这一点 Is there any faster way of doing this in Java
  • 敏捷环境中的需求、规格和管理[关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我的公司尝试采用 Scrum 方法 但取得了不同程度的成功 这些是我们遇到问题的一些领域 你如何处理这些 跟踪要求来自 产品营销贯穿于产品 我们
  • 将 Blogger 集成到 Google App Engine 应用程序中

    我的博客使用 blogger 我的网站使用 Google App Engine 我想将我的博客无缝嵌入到我的网站中 例如 我希望我的网站中出现的相同导航栏 页脚和常规用户界面也出现在我的博客周围 我还想在我的网站首页上显示我最新博客条目的链
  • Web API - 默认渲染 Razor 视图?

    如何让 Web API 使用它返回的模型来渲染 Razor 视图 当设置了接受标头 或 extension 时 只有 XML JSON 吗 这可能吗 如果需要一组控制器用于渲染 HTML 而另一组控制器用于 JSON XML 如果它们在相同
  • 无法使用 shell 脚本将文件上传到 aws s3

    我在尝试上传到 s3 时遇到以下错误 下面的脚本似乎是正确的 但我仍然遇到上述错误 请有人帮我解决这个错误 我的密钥和访问 ID 是正确的 因为我能够在 java 和 ruby 中使用这些密钥连接到 AWS
  • 如何在RxSwift中观察对象的属性?

    我有以下内容Forecast class class Forecast let city City var currentTemperature String didSet print cur tepm was set to current
  • python 脚本是否知道其存储的位置路径?

    home bar foo test py 我在尝试test py打印 home bar foo无论我从哪里运行脚本 import os def foo print os getcwd 测试运行 home bar python home ba
  • 从 logcat 中删除 onFlyCompress 消息

    我在用YuvImage来压缩android hardware Camera馈送到 jpeg 从那时起 我不断看到skia onFlyCompresslogcat 中的消息 这完全污染了它 有什么办法可以禁用此消息吗 我知道我可以过滤 log
  • 如何在 Octave 中永久加载包?

    我在 Windows vista 上使用 Octave 我在代码中使用 4 个包 但是每次我重新启动八度音程时 我都必须从命令行手动加载 pkg load 有没有办法永久加载它们 以便每当 Octave 启动时它都会在其路径中找到它们 当
  • 如何在 mongo 中不区分大小写地索引用户名?

    我正在编写一个网络服务 用户可以选择一个不区分大小写的唯一用户名 不过 我想允许他们使用区分大小写的用户名版本 在插入时检查用户名没有不区分大小写的重复项的最佳方法是什么 我目前看到有两种方法可以做到这一点 存储小写版本和用户输入大小写的另
  • 使用 Google Maps API 配置热图叠加层

    我正在尝试使用 Google Maps API 生成位置热图 它可以工作 但结果不是很有用 因为热图渲染的部分很小很难看到 文档中没有任何内容建议扩展热图以呈现更大的斑点的方法 是否有一种未记录的方法可以做到这一点 或者这只是 API 的限
  • 解码 OAEP 填充时出错

    使用解密文本时RSACryptoServiceProvider Decrypt 我收到错误 解码 OAEP 填充时出错 这是我的代码 CspParameters cspParam new CspParameters cspParam new
  • 如何在不按 F5 的情况下使缓存图像过期?

    我正在使用 MVC4 和 C 制作一个 Web 应用程序 我允许用户上传他们的个人资料图片 此时 我需要之前的个人资料图片过期 以便当浏览器重新加载页面时显示新图像 目前 由于两个图像共享相同的名称 因此浏览器使用已缓存的先前图像而不是新图
  • 单击 iframe 中的链接根本没有任何效果

    在 Google Chrome 中 我注意到点击一些链接似乎根本没有效果 a href http google com clicking this link does nothing at all a 这里有一个JSBin http jsb
  • 避免在重建期间删除当前的 Lucene.NET 索引

    我是 Lucene NET 的新手 但我正在使用一个开源工具 http trac sitecore net AdvancedDatabaseCrawler 为Sitecore CMS http www sitecore net它使用 Luc
  • Robot Framework:在实际变量中包含竖线(|)字符而不是作为分隔符的方法?

    我通过文本格式使用 Robot Framework 和 robot 文件设置 我一直在寻找一种包含管道字符的方法 变量中每一侧都有一个空格 以便变量中的内容可读 而不会导致 Robot Framework 将其视为分隔符 问题在于 Robo
  • 如何从另一个 Grails 插件配置 Grails 插件

    我正在尝试编写一个可以在多个 Grails 应用程序中重用的插件 该插件基本上应该是一个包装器弹簧安全核心 http grails org plugin spring security core和 LDAP 插件 这意味着它应该包含 用户
  • 运行时的“v2.0.50727”,如果没有附加配置信息,则无法在 4.0 运行时中加载[重复]

    这个问题在这里已经有答案了 我正在将 vcproj 从 VS2005 转换为 VS2010 但转换后出现以下错误 附加信息 混合模式程序集是针对运行时版本 v2 0 50727 构建的 如果没有附加配置信息 则无法在 4 0 运行时中加载
  • 耳朵图像处理 - 在 MATLAB 中查找直线和曲线的交点

    1 https i stack imgur com j3ZRQ jpg我有一只耳朵的 Canny 边缘输出 我用一条线 绿色 连接了最远的两个边界 现在我想从这条线的中点到外边界 左侧 绘制一条法线 我编写的代码帮助我绘制法线 但我希望红线