如何在ImageJ中提取数据XY才能清楚地读取?

43次观看(过去30天)
塞布丽娜Lounis
塞布丽娜Lounis 2021年7月1日
回答: 焉耆刘 2021年9月27日
你好,
我需要在第1级中提取(x,y)坐标。
这是程序正在使用:
用一个roi测试
I = imread(“部门1. png”);
图(1)
持有
I2 = imcrop(I);
im2gray(I2);
图(2)
[C,h] = imcontour(IM,1);
提取数据
[contourTable, contourArray] = getContourLineCoordinates(C);
图(3)
持有
levelIdx = contourTable。Level == h.LevelList(1);
情节(contourTable.X (levelIdx) contourTable.Y (levelIdx),“r”。“MarkerSize”, 1)
xdata = contourTable(:,3);
ydata = contourTable(:,4);
Ctest = [xdata,ydata];
writetable (ct,“Testtable.csv”
getContourLineCoordinates(C)是一个函数,我发现在Matlab论坛。
我把所有的文件都附上了。
Sector1.png是我想要(x,y)坐标的原始图像。我裁剪图像只有心脏的一部分,因为当我把我的图像分成12等份时,我有一种移位。无论如何,我现在的目标是有一个csv文件2列:第一列为x坐标,第二列为y。事实上,这个文件将用于ImageJ(见附件TestImageJ.png)。问题是,我认为我有一个问题的水平或太多的点,因为TestImageJ.png没有给我一个清晰的轮廓我的原始图像,即使在Matlab中,当我绘制(x,y)它似乎足够清楚。
有人能帮我在imageJ上有一个更好的图像吗?
1评论
图像分析
图像分析 2021年7月1日
您的sector2图像没有任何轮廓。它是一个二值图像。它只有轮廓/周长,没有轮廓。是否要将blob周长的(x,y)坐标写入一个或多个csv文件?

登录评论。

答案(1)

焉耆刘
焉耆刘 2021年9月27日
先生,可以用下面的代码来参考
clc
关闭所有
清晰的所有
用一个roi测试
I = imread(“https://ww2.mathworks.cn/matlabcentral/answers/uploaded_files/670963/Sector%201.png”);
图(1);imshow(我,[]);
持有
Rect = [235,220,1290,1105];
[I2,rect] = imcrop(I,rect);
im2gray(I2);
图(2)
[C,h] = imcontour(IM,1);
提取数据
如果ishandle (C)
C = C. contourmatrix;
结束
%设置while循环
cmSize = size(C,2);%的列在ContourMatrix
cmWindow = [0,0];% [start,end]移动窗口索引
contourArray = {};存储每条等高线的(x,y)坐标
提取每条等高线坐标
cmWindow(2) < cmSize
cmWindow(1) = cmWindow(2) + 1;
cmWindow(2) = cmWindow(2) + C(2,cmWindow(1)) + 1;
contourArray结束(+ 1)= {C (:, cmWindow (1): cmWindow(2))”。};% #好< AGROW >
结束
分隔级别、计数和坐标。
level = cellfun(@(c)c(1,1),contourArray).';
numCoord = cellfun(@(c)c(1,2),contourArray).';
contourArray = cellfun(@(c)c(2:end,:),contourArray,“UniformOutput”、假);
%按级别排序(以防Matlab没有)
[~,sortIdx] = sort(level);
用所有级别的组合坐标和分组变量创建一个表
levelsRep = cell2mat(arrayfun(@(v,n)repmat(v,n,1),level(sortIdx),numCoord(sortIdx),...
“UniformOutput”、假));
group = cell2mat(arrayfun(@(v,n)repmat(v,n,1),(1:numel(level)).',numCoord,...
“UniformOutput”、假));
contourTable = array2table([levelsRep, group, vertcat(contourArray{sortIdx})],...
“VariableNames”, {“水平”“集团”“X”“Y”});
图(3)
持有
levelIdx = contourTable。Level == h.LevelList(1);
情节(contourTable.X (levelIdx) contourTable.Y (levelIdx),“r”。“MarkerSize”, 1)
轴([1 size(IM,2) 1 size(IM,1)]);
vdata = table2array(contourTable(:,2));
xdata = contourTable(:,3);
ydata = contourTable(:,4);
Ctest = [xdata,ydata];
% writetable (ct, Testtable.csv)
图(4);imshow(我,[]);
持有
xt = table2array (xdata) +矩形(1);
欧美= table2array (ydata) +矩形(2);
I = 1: max(vdata)
i = find(vdata==i);
如果英蒂isempty ()
继续
结束
情节(xt(英蒂),欧美(英蒂),“- - -”“线宽”2);
结束
先生,现在您可以得到不同部分的轮廓,请检查并选择保存。