diff --git a/src-tauri/tauri.conf.json b/src-tauri/tauri.conf.json index 985ae1a..a88e5eb 100644 --- a/src-tauri/tauri.conf.json +++ b/src-tauri/tauri.conf.json @@ -10,7 +10,7 @@ "package": { "productName": "SpectralPlot", - "version": "0.6.95" + "version": "0.6.97" }, "tauri": { diff --git a/src/components/menubox/ReflectanceToIris.vue b/src/components/menubox/ReflectanceToIris.vue new file mode 100644 index 0000000..dca75fd --- /dev/null +++ b/src/components/menubox/ReflectanceToIris.vue @@ -0,0 +1,693 @@ + + + + + + diff --git a/src/components/menubox/SetWavelenthcoeff.vue b/src/components/menubox/SetWavelenthcoeff.vue index 90a8222..ee66526 100644 --- a/src/components/menubox/SetWavelenthcoeff.vue +++ b/src/components/menubox/SetWavelenthcoeff.vue @@ -272,8 +272,18 @@ export default { }, async findpeak(specindex) { if (specindex == 0) { - let dataforpeak = this.Data.data; - var peaks = await invoke("find_peek", { data: dataforpeak, minheigh: 3000 }); + let originalData = this.Data.data; + // Step 1: 亚像素插值 (0.05像素间隔,20倍数据量) + let resampled = await invoke("interpolate_spline", { + x: Array.from({length: originalData.length}, (_, i) => i), + y: originalData.map(v => Number(v)), + step: 0.05 + }); + // Step 2: 在插值数据上寻峰 + let resampledY = resampled.map(p => p[1]); + var peaks = await invoke("find_peek", { data: resampledY, minheigh: 3000 }); + // Step 3: 峰位置除以20映射回原始像素(亚像素精度) + peaks = peaks.map(p => [p[0] / 20, p[1]]); console.log(peaks); let peaksforshow = []; let coeffweave1 = this.Devinfo.bochangxishu.a0; @@ -295,7 +305,7 @@ export default { peaks.forEach(element => { var weave = coeffweave1 * element[0] * element[0] * element[0] + coeffweave2 * element[0] * element[0] + coeffweave3 * element[0] + coeffweave4; peaksforshow.push([weave, element[1], element[0]]); - this.Peaks.push([weave, element[1], element[0], false, 0]) + if (!this.Peaks.some(p => p[2] === element[0])) { this.Peaks.push([weave, element[1], element[0], false, 0]); } peakformatch.push(element[0]); }); peakformatch.sort(function (a, b) { @@ -337,8 +347,18 @@ export default { } else if (specindex == 1) { - let dataforpeak = this.DataDown.data; - var peaks = await invoke("find_peek", { data: dataforpeak, minheigh: 3000 }); + let originalDataDown = this.DataDown.data; + // Step 1: 亚像素插值 (0.05像素间隔,20倍数据量) + let resampledDown = await invoke("interpolate_spline", { + x: Array.from({length: originalDataDown.length}, (_, i) => i), + y: originalDataDown.map(v => Number(v)), + step: 0.05 + }); + // Step 2: 在插值数据上寻峰 + let resampledYDown = resampledDown.map(p => p[1]); + var peaks = await invoke("find_peek", { data: resampledYDown, minheigh: 3000 }); + // Step 3: 峰位置映射回原始像素(亚像素精度) + peaks = peaks.map(p => [p[0] / 20, p[1]]); console.log(peaks); let peaksforshow = []; let coeffweave1 = this.Devinfo.bochangxishu2.a0; @@ -356,7 +376,7 @@ export default { peaks.forEach(element => { var weave = coeffweave1 * element[0] * element[0] * element[0] + coeffweave2 * element[0] * element[0] + coeffweave3 * element[0] + coeffweave4; peaksforshow.push([weave, element[1], element[0]]); - this.PeaksDown.push([weave, element[1], element[0], false, 0]) + if (!this.PeaksDown.some(p => p[2] === element[0])) { this.PeaksDown.push([weave, element[1], element[0], false, 0]); } }); @@ -395,11 +415,11 @@ export default { }, async ClearArry(specindex){ if (specindex == 0) { - this.Peaks = []; + this.Peaks = this.Peaks.filter(p => p[3] === true && p[4] !== 0); this.option.series[1].data = []; } else if (specindex == 1) { - this.PeaksDown = []; + this.PeaksDown = this.PeaksDown.filter(p => p[3] === true && p[4] !== 0); this.optiondown.series[1].data = []; }