提取图像的边界和划分12个相等的部分(马戏团弧/盘)

2视图(30天)
你好,
我是一个学生在生物信息学中,和我要做图像使用Matlab进行治疗。我寻找代码(或链接),帮我提取边界和除以12个相等的部分。我想提取格式中使用.roi斐济。我知道如何边界(绿色的)我的形象(你可以看到boundary.png)。把图像分成12个部分,我试图计算质心(红点),但现在我完全迷失了方向。我想,在最后时刻,像FinalWish给图像。png(也就是说,每个划分的边界部分)。你有想法吗?
如果有人请帮助我,我将非常感激!

答案(4)

图像分析
图像分析 2021年6月4日
你尝试一些简单的喜欢吗
numBoundaryPoints =长度(xb)
% xb和yb边界坐标的列表。
k = 1: 12
index1 =圆((k - 1) * numBoundaryPoints / 12 + 1);
index2 =圆(k * numBoundaryPoints / 12);
xb12 {k} = xb (index1: index2);
yb12 {k} = yb (index1: index2);
结束

塞布丽娜Lounis
塞布丽娜Lounis 2021年6月4日
编辑:塞布丽娜Lounis 2021年6月4日
谢谢你帮助我的开始。
然而,我想削减像Example.png。红色是多亏了你的代码,但是明显的问题我是如何减少图像质心和肢体的12个相等的部分。
谢谢你很多。

图像分析
图像分析 2021年6月4日
@Sabrina Lounis 的行业,是基于1/12th边界长度,或者你想把图像分成部门辐射的中心,每一个角度或360/12度?如果这将给你两个气泡在一个部门,而不是一个?在这种情况下,你想做什么?
%演示把图像分成部门。通过图像分析。
clc;%清除命令窗口。
关闭所有;%关闭所有数据(除了imtool。)
清晰;%擦掉所有现有的变量。或者clearvars如果你想要的。
工作空间;%确定工作区面板显示。
格式长g;
格式紧凑的;
字形大小= 20;
% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
%读入图像
文件夹= pwd;
baseFileName =“example.png”;
grayImage = imread (baseFileName);
% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
%显示图像。
次要情节(3、5、1);
imshow (grayImage []);
轴(“上”,“图像”);
标题(的原始灰度图像,“字形大小”字形大小,“翻译”,“没有”);
impixelinfo;
hFig = gcf;
hFig。WindowState =“最大化”;%可能不会在MATLAB的早期版本中工作。
drawnow;
%得到图像的尺寸。
% numberOfColorChannels应该为灰度图像,= 1和3的RGB彩色图像。
(行、列,numberOfColorChannels) =大小(grayImage)
如果numberOfColorChannels > 1
%这不是灰度像我们预期的颜色。
%提取红色通道(红色线会是白色)。
grayImage = grayImage (:: 1);
结束
% binarize图像
掩码= imbinarize (grayImage);
%摆脱框架外直线边缘的图像
掩码= imclearborder(面具);
%填补
mask2 = imfill(面具,“黑洞”);
%的图片我已经有一块分离出来由红色线。
%的面具(512:860 461)= true;%连接分离blob主斑点。
%最大团
mask2 = bwareafilt(面具,1);
%显示图像。
次要情节(3、5、2);
imshow(面具,[]);
轴(“上”,“图像”);
标题(的二进制图像,“字形大小”字形大小,“翻译”,“没有”);
impixelinfo;
hFig = gcf;
hFig。WindowState =“最大化”;%可能不会在MATLAB的早期版本中工作。
drawnow;
%找到重心。
道具= regionprops (mask2,“重心”)
持有;
xCenter = props.Centroid (1)
yCenter = props.Centroid (2)
情节(xCenter yCenter,' r + ',“MarkerSize”,100,“线宽”2);
deltaAngle = 360/12
%获得电网的角度。
x =(1:列)- xCenter;
y =(1:行)——yCenter;
(X, Y) = meshgrid (X, Y);
angleGrid = atan2d (Y、X);
次要情节(3、5、3);
imshow (angleGrid []);
colorbar;
标题(“角度形象”,“字形大小”字形大小,“翻译”,“没有”);
角= -180:deltaAngle: 180
k = 1: 12
angle1 =角(k);
angle2 =角(k + 1);
流(角之间的创造面具% d %。1 f和% .1f。\ n '、k、angle1 angle2);
thisAnglesMask = false(行、列);
thisAnglesMask = angleGrid > angle1 & angleGrid < = angle2;
次要情节(3、5、2 + k);
imshow (thisAnglesMask);
标题= sprintf (“面具% d %之间的角度。1 f和% .1f。”、k、angle1 angle2);
标题(标题);
drawnow;
%现在面具应用二进制图像。
thisMask = & thisAnglesMask面具;%面具CT片。
imshow (thisMask);
标题= sprintf (角之间的部门% d %。1 f和% .1f。”、k、angle1 angle2);
标题(标题);
drawnow;
结束
5个评论
图像分析
图像分析 2021年6月10日
@Sabrina Lounis 摆脱轴:
摆脱一个 具体的 矩形你需要删除它的处理:
hRect =矩形(..........)
%删除该矩形
删除(hRect);
摆脱 所有 行轴,看到这个功能:
% = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
%擦除所有行从当前轴。当前轴应首先使用轴设置()
%命令这个函数之前被调用,因为它从当前工作轴,gca。
函数ClearLinesFromAxes ()
试一试
%摆脱线的线()函数。
axesHandlesToChildObjects = findobj (gca),“类型”,“行”);
如果~ isempty (axesHandlesToChildObjects)
删除(axesHandlesToChildObjects);
结束
%摆脱线的参照线()或yline()函数。
axesHandlesToChildObjects = findobj (gca),“类型”,“ConstantLine”);
如果~ isempty (axesHandlesToChildObjects)
删除(axesHandlesToChildObjects);
结束
%摆脱线的矩形()函数。
axesHandlesToChildObjects = findobj (gca),“类型”,“矩形”);
如果~ isempty (axesHandlesToChildObjects)
删除(axesHandlesToChildObjects);
结束
%如果你这里发生了一些错误。
errorMessage = GetErrorMessage(我);%得到错误消息调用回溯和文件的日期。
uiwait (errordlg (errorMessage));%弹出错误消息显示用户它是什么。还打印命令窗口或控制台窗口(如果程序是一个可执行的)。
结束
返回;从ClearLinesFromAxes %

登录置评。


塞布丽娜Lounis
塞布丽娜Lounis 2021年6月14日
编辑:塞布丽娜Lounis 2021年6月14日
我这么做
标题= sprintf (“部门1. png”);
I = imread(标题);
我= im2bw(我);
bw = activecontour(我,IM);
持有
图(1)
visboundaries (bw,“颜色”,“r”);
%这里删除但不工作
hRect =矩形(“位置”,115 40 1484 1355);
删除(hRect);
caption1 = sprintf (“边界部门1. png”);
saveas (gcf caption1);
但没有结果与图像的部门1。png”,结果中可以看到“边界部门1. png。总是有第二个矩形。(见附)。我试图运行您的代码,但我没有获得轴内部,没有边界全部删除。

翻译的