二次多项式直线拟合:连续值转整数致线条断裂的问题求助
解决二次多项式拟合后线条断裂的问题
问题核心是你只对原始数据点的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
相关产品推荐
相关产品推荐

