You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

二次多项式直线拟合:连续值转整数致线条断裂的问题求助

解决二次多项式拟合后线条断裂的问题

问题核心是你只对原始数据点的x值进行拟合赋值,且仅保留舍入后的整数y像素——既漏掉了中间x列的像素,又因舍入跳过了部分y行,最终导致线条断裂。以下是修正方案:

修正后的代码

using Images, Polynomials, ImageView

# 加载并预处理图像
img = load("jTjYb.png")
img = Gray.(img)
img = img[end:-1:1, :]
nodes = findall(img .> 0)

xdata = map(p -> p[2], nodes)
ydata = map(p -> p[1], nodes)
f = fit(xdata, ydata, 2)

# 覆盖拟合曲线的完整x范围,避免漏掉中间像素列
x_min = minimum(xdata)
x_max = maximum(xdata)
all_x = x_min:x_max

new_line_fitted_img = zeros(size(img))

# 遍历每个x列,填充连续的y像素行
for x in all_x
    y_fit = f(x)
    # 取拟合y值的上下整数边界,填充中间所有行
    y_start = floor(Int, y_fit)
    y_end = ceil(Int, y_fit)
    # 确保y索引在图像范围内,避免越界
    y_start = clamp(y_start, 1, size(img, 1))
    y_end = clamp(y_end, 1, size(img, 1))
    # 填充该x列下的连续y行
    new_line_fitted_img[y_start:y_end, x] .= 1
end

imshow(new_line_fitted_img)

关键改进点

  • 覆盖完整x范围:从xdata的最小值到最大值遍历所有整数x,确保每个列都有线条像素,消除列间隙。
  • 填充连续y像素:不再仅保留舍入后的单个y值,而是填充拟合y值对应的上下整数区间内的所有行,避免因舍入跳过像素导致的行断裂。
  • 边界保护:用clamp限制y值在图像的行索引范围内,防止索引越界报错。

内容的提问来源于stack exchange,提问作者F612

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 05:01:35