如何把图像分割为几个弯曲形状小图片?

4视图(30天)
我有一个图片,我想把它分成小的弯曲形状图像不使用人工种植。例如附加输入将峰成弯曲的形状表示的小区域。
提前谢谢你的帮助。
1评论
Bjorn Gustavsson
Bjorn Gustavsson 2021年8月11日
我的代码片段是一个例子如何计算/提取一个这样的曲线段,提供边界形状成比例 cos (x * 2 *π/ n_hor_pix) 和一个已知的宽度。片段供您使用,你必须想出一种方法来生成段边界整齐的方式——我希望你不想画的线(我猜)在上面的红色和那些更代表你想要什么,如果你可以用一些简单的罪恶/模型这些为曲线可以修改坐标的生成在我的示例中相当容易。如果我解释你的问题错了那么你可能需要更精确地解释什么是你想要的。

登录置评。

接受的答案

图像分析
图像分析 2021年8月11日
试试这个:
%演示层横截面图像。
clc;%清除命令窗口。
关闭所有;%关闭所有数据(除了imtool。)
清晰;%擦掉所有现有的变量。或者clearvars如果你想要的。
工作空间;%确定工作区面板显示。
格式长g;
格式紧凑的;
字形大小= 20;
% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
%读入图像
grayImage = imread (“C2_down5um_246.jpg”);
%得到图像的尺寸。
% numberOfColorChannels应该为灰度图像,= 1和3的RGB彩色图像。
(行、列,numberOfColorChannels) =大小(grayImage)
如果numberOfColorChannels > 1
%这不是灰度像我们预期的颜色。
%提取红色通道(红色线会是白色)。
grayImage = grayImage (:: 1);
结束
% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
%显示图像。
次要情节(2 2 1);
imshow (grayImage []);
轴(“上”,“图像”);
标题(的原始灰度图像,“字形大小”字形大小,“翻译”,“没有”);
impixelinfo;
hFig = gcf;
hFig。WindowState =“最大化”;%可能不会在MATLAB的早期版本中工作。
drawnow;
% Binarize
lowThreshold = 35;
highThreshold = 255;
% (lowThreshold highThreshold] =阈值(lowThreshold、highThreshold grayImage);
掩码= grayImage > lowThreshold;
%最大带团
掩码= bwareafilt(面具,1);
%显示图像。
次要情节(2,2,2);
imshow(面具,[]);
轴(“上”,“图像”);
标题(“面具”,“字形大小”字形大小,“翻译”,“没有”);
impixelinfo;
%扫描第一行。
(行、列)=(面具)大小;
%先找到顶部曲线。
topRows =南(1,列);
坳= 1:列
t =找到(面具(:,上校),1,“第一”);
如果~ isempty (t)
topRows (col) = t;
结束
结束
持有;
情节(topRows的r -,“线宽”3)
%显示图像。
次要情节(2、2、3);
imshow (grayImage []);
轴(“上”,“图像”);
标题(的原始灰度图像,“字形大小”字形大小,“翻译”,“没有”);
impixelinfo;
drawnow;
持有;
%让一群,每个低于以前。
δy =圆(行/ 8)
allCurves =南(7,列);
nonObjectIndexes = isnan (topRows);
k = 1: 7
%得到这条曲线。
thisRow = topRows + (k - 1) *δy;
%剪辑图像的底部。
thisRow = min (thisRow行);
%再列没有对象NaN - 365。
thisRow (nonObjectIndexes) =南;
:allCurves (k) = thisRow;
情节(thisRow的r -,“线宽”3)
结束
不知道你想做什么,尽管之后。和真的需要扩展曲线一路向左和右边缘图像的什么也没有?如果是这样,我们可以适应曲线的二次polyfit()和扩展它。
17日评论

登录置评。

更多的答案(2)

Bjorn Gustavsson
Bjorn Gustavsson 2021年8月11日
编辑:Bjorn Gustavsson 2021年8月11日
你应该能够这样做 interp2 ,你只需要选择你的坐标曲线区域用于插值点。是这样的:
我=峰(234);
y =收窄;
x = 1:234;
(x, y) = meshgrid (x, y);
y = y + 130 -30 * cos (x * 2 *π/ 234);%这仅仅是一个说明的例子为你的曲线
次要情节(2、2、1)
显示亮度图像(Im)
持有
情节(x (1:), y (1:)“k”。)
情节(x(最终,:),y(最终,:)“k”。)
peaksCurved = interp2 (1:234 1:234, Im, x, y);
次要情节(2 2 2)
显示亮度图像(peaksCurved)
caxis ([-6.5493, 8.106])
次要情节(2,2,3)
peaksCurved pcolor (x, y), caxis([-6.5493, 8.106]),阴影
ij
轴([1 234 1 234])
HTH
6个评论
Bjorn Gustavsson
Bjorn Gustavsson 2021年8月12日
“test.jpg表示”不够具体为我们理解你想要什么标准区域边界待定。
下面图像分析师猜测,这是一些灰度intesity-boundary最高的地区,然后向下转移。我猜,你可以用某种函数形式的边界和被插值曲面区域的强度。
你要明白,为了得到一个解决方案,给你正是你想要的东西你必须精确地指定你想要的东西。你hand-scribbled边界可以用于生成边界但这是:一个麻烦,和b似乎相当不精确和任意。
重复你的参考图像潦草的线将不会给我们任何新的和更精确的信息。

登录置评。


图像分析
图像分析 2021年8月11日
请附上你的原始图像。
我做的是试图让上表面/曲线首先因为这是最聪明的。你可以只是阈值,然后扫描发现上面的第一个像素的阈值。为降低曲线,然后减去一个数上面。类似的
掩码= grayImage > someValue;
掩码= bwareafilt(面具,1);%采取最大来去除噪声。
(行、列)=(面具)大小;
%先找到顶部曲线。
topRows =南(1,列);
坳= 1:列
t =找到(面具(:,上校),1,“第一”)
如果~ isempty (t)
topRows卡扎菲(col) =;
结束
结束
持有;
%让一群,每个低于以前。
δy =圆(行/ 8)
allCurves = 0(7,列);
k = 1: 7
:allCurves (k) = topRows + (k - 1) *δy;
情节(allCurves (k,:),的r -,“线宽”3)
结束
%剪辑的形象
allCurves = min (allCurves行);
2的评论
动态
动态 2021年8月13日
@Image分析师 ,谢谢你的支持。金宝app是的,我可以添加噪声整体形象,然而,我想添加不同varience每个乐队的噪音。谢谢你的代码。
不过,不过,我有个问题要解决。如果我想50%重叠乐队,然后如何修改这个代码?请,你能修改的代码吗?
非常感谢

登录置评。

类别

找到更多的在图片帮助中心文件交换

社区寻宝

找到宝藏在MATLAB中央,发现社区如何帮助你!

开始狩猎!

翻译的