Files
cDNA-image-processing/results_simple/flowchart.drawio
T
Serendipity dd320a6012 feat: 简化版算法流程图(draw.io格式)
用Draw.io打开 results_simple/flowchart.drawio 即可查看
涵盖10个步骤:读取→灰度→投影→阈值→减阈值→正负判断→过零点→配对→划线→输出
2026-05-06 22:35:26 +08:00

182 lines
13 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<mxfile host="draw.io" modified="2026-05-06T12:00:00.000Z" agent="Claude" version="24.0.0">
<diagram name="简化版网格划分算法流程" id="flowchart">
<mxGraphModel dx="1200" dy="800" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="1200" pageHeight="1600" math="0" shadow="0">
<root>
<mxCell id="0"/>
<mxCell id="1" parent="0"/>
<!-- 标题 -->
<mxCell id="title" value="cDNA微阵列网格划分 —— 简化版算法流程图" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=20;fontStyle=1;fontColor=#1565C0" vertex="1" parent="1">
<mxGeometry x="300" y="30" width="600" height="40" as="geometry"/>
</mxCell>
<!-- ====== 第一行:输入 ====== -->
<mxCell id="s1" value="1. 读取图像" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#C8E6C9;strokeColor=#2E7D32;strokeWidth=2;fontSize=14;fontStyle=1;align=center;verticalAlign=middle" vertex="1" parent="1">
<mxGeometry x="480" y="100" width="240" height="50" as="geometry"/>
</mxCell>
<mxCell id="s2" value="2. 转为灰度图&#xa;color.rgb2gray(img)" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#C8E6C9;strokeColor=#2E7D32;strokeWidth=2;fontSize=14;fontStyle=1;align=center;verticalAlign=middle" vertex="1" parent="1">
<mxGeometry x="480" y="190" width="240" height="55" as="geometry"/>
</mxCell>
<!-- ====== 第二行:投影(分叉) ====== -->
<mxCell id="s3L" value="3. 纵轴投影&#xa;np.sum(gray, axis=0)&#xa;每一列灰度值求和" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#E8EAF6;strokeColor=#3949AB;strokeWidth=2;fontSize=13;align=center;verticalAlign=middle" vertex="1" parent="1">
<mxGeometry x="300" y="290" width="240" height="65" as="geometry"/>
</mxCell>
<mxCell id="s3R" value="3. 横轴投影&#xa;np.sum(gray, axis=1)&#xa;每一行灰度值求和" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#E8EAF6;strokeColor=#3949AB;strokeWidth=2;fontSize=13;align=center;verticalAlign=middle" vertex="1" parent="1">
<mxGeometry x="660" y="290" width="240" height="65" as="geometry"/>
</mxCell>
<!-- ====== 第三行:计算阈值(汇聚) ====== -->
<mxCell id="s4" value="4. 计算阈值 X&#xa;X = (max - min) × 10%" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FFF9C4;strokeColor=#F9A825;strokeWidth=3;fontSize=14;fontStyle=1;align=center;verticalAlign=middle" vertex="1" parent="1">
<mxGeometry x="480" y="400" width="240" height="55" as="geometry"/>
</mxCell>
<!-- ====== 第四行:减阈值 ====== -->
<mxCell id="s5" value="5. 曲线减去 X&#xa;col_shifted = col_profile - X&#xa;row_shifted = row_profile - X" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FFF9C4;strokeColor=#F9A825;strokeWidth=3;fontSize=13;align=center;verticalAlign=middle" vertex="1" parent="1">
<mxGeometry x="480" y="500" width="240" height="65" as="geometry"/>
</mxCell>
<!-- ====== 决策:正负判断 ====== -->
<mxCell id="s6" value="6. 减阈值后结果" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FFE0B2;strokeColor=#E65100;strokeWidth=2;fontSize=13;align=center;verticalAlign=middle" vertex="1" parent="1">
<mxGeometry x="480" y="610" width="240" height="40" as="geometry"/>
</mxCell>
<mxCell id="d1" value="&gt; 0 ?" style="rhombus;whiteSpace=wrap;html=1;fillColor=#FFF9C4;strokeColor=#F9A825;strokeWidth=2;fontSize=13;fontStyle=1;align=center;verticalAlign=middle" vertex="1" parent="1">
<mxGeometry x="525" y="690" width="150" height="80" as="geometry"/>
</mxCell>
<mxCell id="s7pos" value="正 → 斑点区域" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#C8E6C9;strokeColor=#2E7D32;strokeWidth=2;fontSize=13;fontStyle=1;align=center;verticalAlign=middle" vertex="1" parent="1">
<mxGeometry x="260" y="700" width="160" height="50" as="geometry"/>
</mxCell>
<mxCell id="s7neg" value="负 → 空隙" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FFCDD2;strokeColor=#C62828;strokeWidth=2;fontSize=13;fontStyle=1;align=center;verticalAlign=middle" vertex="1" parent="1">
<mxGeometry x="780" y="700" width="160" height="50" as="geometry"/>
</mxCell>
<!-- ====== 第五行:找过零点 ====== -->
<mxCell id="s8" value="7. 找过零点" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#E3F2FD;strokeColor=#1565C0;strokeWidth=3;fontSize=14;fontStyle=1;align=center;verticalAlign=middle" vertex="1" parent="1">
<mxGeometry x="480" y="820" width="240" height="50" as="geometry"/>
</mxCell>
<mxCell id="note1" value="遍历 is_positive 数组&#xa;当相邻位置正负不同时&#xa;记录该位置 = 过零点" style="shape=note;whiteSpace=wrap;html=1;fillColor=#FFFDE7;strokeColor=#F9A825;strokeWidth=1;fontSize=11;align=left;verticalAlign=top;backgroundOutline=1;size=14" vertex="1" parent="1">
<mxGeometry x="800" y="820" width="160" height="80" as="geometry"/>
</mxCell>
<!-- ====== 第六行:配对 ====== -->
<mxCell id="s9" value="8. 配对过零点" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#E3F2FD;strokeColor=#1565C0;strokeWidth=3;fontSize=14;fontStyle=1;align=center;verticalAlign=middle" vertex="1" parent="1">
<mxGeometry x="480" y="920" width="240" height="50" as="geometry"/>
</mxCell>
<mxCell id="note2" value="配对「离开斑点+进入下一斑点」&#xa;即:正→负 与 负→正&#xa;中点 = 空隙中央 = 划线位置" style="shape=note;whiteSpace=wrap;html=1;fillColor=#FFFDE7;strokeColor=#F9A825;strokeWidth=1;fontSize=11;align=left;verticalAlign=top;backgroundOutline=1;size=14" vertex="1" parent="1">
<mxGeometry x="800" y="920" width="180" height="80" as="geometry"/>
</mxCell>
<!-- ====== 输出 ====== -->
<mxCell id="s10" value="9. 画出网格线&#xa;ax.axvline(x) / ax.axhline(y)" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#C8E6C9;strokeColor=#2E7D32;strokeWidth=2;fontSize=13;fontStyle=1;align=center;verticalAlign=middle" vertex="1" parent="1">
<mxGeometry x="480" y="1020" width="240" height="55" as="geometry"/>
</mxCell>
<mxCell id="s11" value="10. 输出网格叠加图" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#C8E6C9;strokeColor=#2E7D32;strokeWidth=2;fontSize=14;fontStyle=1;align=center;verticalAlign=middle" vertex="1" parent="1">
<mxGeometry x="480" y="1120" width="240" height="50" as="geometry"/>
</mxCell>
<!-- ====== 连接线 ====== -->
<!-- s1 → s2 -->
<mxCell id="e1" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;strokeColor=#666666;strokeWidth=2;endArrow=classic;endFill=1" edge="1" parent="1" source="s1" target="s2">
<mxGeometry relative="1" as="geometry"/>
</mxCell>
<!-- s2 → s3L -->
<mxCell id="e2L" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;strokeColor=#666666;strokeWidth=2;endArrow=classic;endFill=1" edge="1" parent="1" source="s2" target="s3L">
<mxGeometry relative="1" as="geometry"/>
</mxCell>
<!-- s2 → s3R -->
<mxCell id="e2R" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;strokeColor=#666666;strokeWidth=2;endArrow=classic;endFill=1" edge="1" parent="1" source="s2" target="s3R">
<mxGeometry relative="1" as="geometry"/>
</mxCell>
<!-- s3L → s4 -->
<mxCell id="e3L" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;strokeColor=#666666;strokeWidth=2;endArrow=classic;endFill=1" edge="1" parent="1" source="s3L" target="s4">
<mxGeometry relative="1" as="geometry"/>
</mxCell>
<!-- s3R → s4 -->
<mxCell id="e3R" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;strokeColor=#666666;strokeWidth=2;endArrow=classic;endFill=1" edge="1" parent="1" source="s3R" target="s4">
<mxGeometry relative="1" as="geometry"/>
</mxCell>
<!-- s4 → s5 -->
<mxCell id="e4" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;strokeColor=#666666;strokeWidth=2;endArrow=classic;endFill=1" edge="1" parent="1" source="s4" target="s5">
<mxGeometry relative="1" as="geometry"/>
</mxCell>
<!-- s5 → s6 -->
<mxCell id="e5" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;strokeColor=#666666;strokeWidth=2;endArrow=classic;endFill=1" edge="1" parent="1" source="s5" target="s6">
<mxGeometry relative="1" as="geometry"/>
</mxCell>
<!-- s6 → d1 -->
<mxCell id="e6" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;strokeColor=#666666;strokeWidth=2;endArrow=classic;endFill=1" edge="1" parent="1" source="s6" target="d1">
<mxGeometry relative="1" as="geometry"/>
</mxCell>
<!-- d1 → s7pos (Yes/正) -->
<mxCell id="e7y" value="是" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;strokeColor=#2E7D32;strokeWidth=2;endArrow=classic;endFill=1;fontColor=#2E7D32;fontStyle=1;fontSize=12" edge="1" parent="1" source="d1" target="s7pos">
<mxGeometry relative="1" as="geometry"/>
</mxCell>
<!-- d1 → s7neg (No/负) -->
<mxCell id="e7n" value="否" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;strokeColor=#C62828;strokeWidth=2;endArrow=classic;endFill=1;fontColor=#C62828;fontStyle=1;fontSize=12" edge="1" parent="1" source="d1" target="s7neg">
<mxGeometry relative="1" as="geometry"/>
</mxCell>
<!-- s7pos → s8, s7neg → s8 (汇聚) -->
<mxCell id="e8p" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;strokeColor=#666666;strokeWidth=2;endArrow=classic;endFill=1;dashed=1" edge="1" parent="1" source="s7pos" target="s8">
<mxGeometry relative="1" as="geometry"/>
</mxCell>
<mxCell id="e8n" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;strokeColor=#666666;strokeWidth=2;endArrow=classic;endFill=1;dashed=1" edge="1" parent="1" source="s7neg" target="s8">
<mxGeometry relative="1" as="geometry"/>
</mxCell>
<!-- s8 → s9 -->
<mxCell id="e8" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;strokeColor=#666666;strokeWidth=2;endArrow=classic;endFill=1" edge="1" parent="1" source="s8" target="s9">
<mxGeometry relative="1" as="geometry"/>
</mxCell>
<!-- s9 → s10 -->
<mxCell id="e9" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;strokeColor=#666666;strokeWidth=2;endArrow=classic;endFill=1" edge="1" parent="1" source="s9" target="s10">
<mxGeometry relative="1" as="geometry"/>
</mxCell>
<!-- s10 → s11 -->
<mxCell id="e10" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;strokeColor=#666666;strokeWidth=2;endArrow=classic;endFill=1" edge="1" parent="1" source="s10" target="s11">
<mxGeometry relative="1" as="geometry"/>
</mxCell>
<!-- 图例 -->
<mxCell id="legend_title" value="图例" style="text;html=1;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=14;fontStyle=1" vertex="1" parent="1">
<mxGeometry x="60" y="1080" width="60" height="30" as="geometry"/>
</mxCell>
<mxCell id="leg1" value="输入/输出" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#C8E6C9;strokeColor=#2E7D32;strokeWidth=2;fontSize=11;align=center;verticalAlign=middle" vertex="1" parent="1">
<mxGeometry x="60" y="1120" width="100" height="30" as="geometry"/>
</mxCell>
<mxCell id="leg2" value="数据处理" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FFF9C4;strokeColor=#F9A825;strokeWidth=2;fontSize=11;align=center;verticalAlign=middle" vertex="1" parent="1">
<mxGeometry x="60" y="1160" width="100" height="30" as="geometry"/>
</mxCell>
<mxCell id="leg3" value="核心逻辑" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#E3F2FD;strokeColor=#1565C0;strokeWidth=2;fontSize=11;align=center;verticalAlign=middle" vertex="1" parent="1">
<mxGeometry x="60" y="1200" width="100" height="30" as="geometry"/>
</mxCell>
<mxCell id="leg4" value="投影计算" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#E8EAF6;strokeColor=#3949AB;strokeWidth=2;fontSize=11;align=center;verticalAlign=middle" vertex="1" parent="1">
<mxGeometry x="60" y="1240" width="100" height="30" as="geometry"/>
</mxCell>
</root>
</mxGraphModel>
</diagram>
</mxfile>