卡尺标定法径向扫描拟合圆:亚像素圆检测与工业视觉应用

简介:这份资源面向具备一定C++与OpenCV基础的图像处理开发者,聚焦工业视觉中常见的圆检测与定位需求。其核心思路借鉴Halcon的圆拟合功能,采用卡尺标定法沿径向扫描图像梯度,再通过最小二乘法完成圆形拟合,可用于工件定位、尺寸测量、缺陷检测等场景。压缩包共4个文件,包含2个cpp源文件、1个h头文件与1张png测试图,整体约85KB,代码基于OpenCV4.3编写,函数均已封装且注释较为完整,便于直接调用或二次开发。目前已有1948人学习下载,说明该方案在同类需求中具有一定参考价值。读者可从中获得一套可运行的圆拟合实现,理解卡尺标定与径向扫描的配合方式,掌握最小二乘拟合的工程落地细节,并借助测试图快速验证效果,为工业视觉项目中的圆定位模块提供可复用的代码基础。

1. 卡尺标定法径向扫描拟合圆:从压缩包名到可复现的圆检测方案

第一次看到「卡尺标定法径向扫描拟合圆V2.0.rar」这个标题,多数人的反应是:卡尺不是量具吗,怎么和拟合圆扯上关系?其实这里的「卡尺」是机器视觉里对边缘卡尺(Caliper)工具的俗称——沿一条射线方向采样灰度剖面,找到梯度极值点作为边缘点。而「径向扫描」就是把这些卡尺按角度均匀铺开,从圆心候选位置向外或向内扫一圈,收集边缘点后做最小二乘拟合,得到圆心和半径。这套方法在工业视觉的圆孔定位、轴承滚珠测量、瓶盖对中、PCB 定位孔检测里非常常见,比霍夫圆变换更稳、更快,尤其在部分遮挡和低对比度场景下优势明显。

这个方案适合两类人:一是做工业检测、尺寸测量的视觉工程师,需要一套不依赖深度学习的传统圆检测流程;二是刚接触 OpenCV 或 Halcon,想搞懂「边缘点怎么采、圆怎么拟合、精度怎么保证」的开发者。它不解决所有圆检测问题,但对已知大致圆心、边缘对比度尚可、要求亚像素精度的场景,是性价比最高的路线。下面按「原理选型 → 径向扫描实现 → 拟合与标定 → 避坑 → 进阶验证」的顺序拆开讲。

2. 卡尺标定法与径向扫描的选型逻辑

2.1 为什么不用霍夫圆变换而用径向扫描

霍夫圆变换(HoughCircles)的原理是把每个边缘点映射到参数空间,累加投票找峰值。它的优点是无需先验圆心,缺点是三个参数(dp、minDist、param2)极其敏感,且计算量随半径范围线性增长。在 500 万像素图上跑一次全图霍夫圆,动辄几百毫秒,而且当圆边缘有缺口、毛刺或局部反光时,投票峰值会偏移,圆心抖动一两个像素是常事。

径向扫描的思路完全不同:它假设你已经有一个粗略圆心(可以来自模板匹配、Blob 分析、上一帧跟踪,甚至手动点一下),然后只在这个圆心周围按固定角度发射 N 条射线,每条射线上用一维边缘检测找边缘点。这样计算量只和射线数、射线长度有关,和图像总像素无关。更重要的是,每条射线上的边缘检测是一维问题,可以用亚像素插值做到 0.1 像素级定位,拟合出来的圆心重复性远好于霍夫。

选型判断很简单:圆心大致已知、追求精度和速度 → 径向扫描;圆心完全未知、圆的大小差异大 → 先霍夫或轮廓分析粗定位,再径向扫描精定位。实际项目里我一般两级配合,粗定位用轮廓或模板,精定位一定用径向扫描。

2.2 卡尺边缘检测的一维剖面原理

卡尺的核心是沿射线方向取一维灰度剖面,然后找梯度最大点。假设射线方向单位向量为 (cosθ, sinθ),从起点 P0 开始,每隔 step 像素采样一次,得到灰度序列 g[0..L-1]。对序列做一阶差分(或高斯平滑后差分),得到梯度序列 d[i] = g[i+1] - g[i]。边缘点就在 |d[i]| 最大的位置,再对 d[i-1]、d[i]、d[i+1] 做抛物线插值,得到亚像素偏移:

offset = 0.5 * (d[i-1] - d[i+1]) / (d[i-1] - 2*d[i] + d[i+1])

这个公式是亚像素边缘定位的经典做法,前提是梯度峰值附近近似抛物线。实际用的时候要注意:先对灰度做 Sigma 为 1~2 的高斯平滑,否则噪声会让梯度峰值乱跳。另外边缘极性要指定——从黑到白是正边缘,从白到黑是负边缘,选错极性会找到对面的边缘点,拟合出来的圆直接偏一个直径。

2.3 径向扫描的射线布局与参数初值

射线布局有两种:固定角度均匀分布,或按边缘点密度自适应。工程上 99% 用固定角度,因为简单可控。射线数 N 一般取 36~360,N 越大拟合越稳但越慢。经验值:圆在图像上直径 200 像素左右时,N=72 足够;直径小于 50 像素时 N 要降到 24~36,否则相邻射线在圆上间距太小,边缘点挤在一起反而引入相关噪声。

射线长度要覆盖圆的半径范围。如果粗圆心偏差可能达到 ±20 像素,半径估计 100 像素,那射线从 r-30 扫到 r+30,即长度 60 像素,step 取 0.5 像素保证亚像素采样。这里有个容易翻车的点:射线起点不能从圆心开始扫,否则圆心附近的纹理、噪声、甚至圆心本身的标记会被当成边缘。正确做法是从 r_expected - margin 开始,向外扫到 r_expected + margin。

3. 用 Python 和 OpenCV 实现径向扫描拟合圆

3.1 环境准备与最小可运行代码

依赖只有 numpy 和 opencv-python,版本不限,能跑就行。下面是一段完整的最小实现,输入是一张灰度图、粗圆心和粗半径,输出是拟合后的圆心和半径。

import numpy as np import cv2 def radial_scan_fit_circle(gray, cx, cy, r_est, n_rays=72, r_margin=30, step=0.5, sigma=1.5, edge_polarity=1): """ gray: 单通道灰度图 cx, cy: 粗圆心 r_est: 粗半径估计 n_rays: 射线数量 r_margin: 半径搜索余量,射线从 r_est-r_margin 扫到 r_est+r_margin step: 采样步长(像素) sigma: 高斯平滑系数 edge_polarity: 1 表示从暗到亮,-1 表示从亮到暗 """ h, w = gray.shape r_start = max(1.0, r_est - r_margin) r_end = r_est + r_margin n_samples = int((r_end - r_start) / step) + 1 offsets = r_start + np.arange(n_samples) * step edge_points = [] angles = np.linspace(0, 2 * np.pi, n_rays, endpoint=False) for theta in angles: dx, dy = np.cos(theta), np.sin(theta) xs = cx + offsets * dx ys = cy + offsets * dy # 双线性采样,保证亚像素精度 map_x = xs.astype(np.float32).reshape(1, -1) map_y = ys.astype(np.float32).reshape(1, -1) profile = cv2.remap(gray, map_x, map_y, interpolation=cv2.INTER_LINEAR, borderMode=cv2.BORDER_REPLICATE) profile = profile.flatten().astype(np.float32) # 高斯平滑抑制噪声 ksize = int(2 * round(3 * sigma) + 1) profile = cv2.GaussianBlur(profile.reshape(1, -1), (ksize, 1), sigma).flatten() # 一阶差分求梯度 grad = np.diff(profile) grad = grad * edge_polarity # 找梯度最大点,排除首尾各 2 个点避免边界效应 idx = int(np.argmax(grad[2:-2])) + 2 if grad[idx] < 5.0: # 梯度太弱,丢弃该射线 continue # 抛物线插值求亚像素偏移 d0, d1, d2 = grad[idx - 1], grad[idx], grad[idx + 1] denom = d0 - 2 * d1 + d2 sub = 0.5 * (d0 - d2) / denom if abs(denom) > 1e-6 else 0.0 sub = np.clip(sub, -0.5, 0.5) r_sub = offsets[idx] + sub * step px = cx + r_sub * dx py = cy + r_sub * dy edge_points.append((px, py)) if len(edge_points) < 6: raise RuntimeError("有效边缘点不足,检查极性或对比度") pts = np.array(edge_points, dtype=np.float64) # 最小二乘拟合圆:x^2+y^2 + D*x + E*y + F = 0 A = np.c_[pts[:, 0], pts[:, 1], np.ones(len(pts))] b = -(pts[:, 0] ** 2 + pts[:, 1] ** 2) D, E, F = np.linalg.lstsq(A, b, rcond=None)[0] cx_fit = -D / 2 cy_fit = -E / 2 r_fit = np.sqrt(cx_fit ** 2 + cy_fit ** 2 - F) return cx_fit, cy_fit, r_fit, pts

逻辑说明:先用cv2.remap沿射线做双线性插值采样,这一步是亚像素精度的基础,比直接取整像素索引强很多。然后高斯平滑、差分、找峰值、抛物线插值,得到每条射线上的亚像素边缘点。最后用代数最小二乘拟合圆,解一个 3×3 线性方程组,速度极快。

参数说明:n_rays控制射线密度,72 是通用起点;r_margin要大于粗圆心的最大偏差,否则边缘点落在搜索范围外;step=0.5是亚像素采样,再小收益递减;sigma=1.5对应约 3 像素宽的高斯核,噪声大就加到 2.0;edge_polarity必须和实际边缘方向一致,这个参数错了整个结果全废。

3.2 从粗定位到精拟合的两级流程

实际项目里粗圆心不会手点,常见做法是先用cv2.findContours找轮廓,对轮廓做最小二乘拟合得到粗圆,或者用模板匹配。下面这段代码演示从轮廓粗定位到径向扫描精拟合的完整链路。

def coarse_to_fine_circle(gray): # 粗定位:Canny + 轮廓 + 圆度筛选 blur = cv2.GaussianBlur(gray, (5, 5), 1.5) edges = cv2.Canny(blur, 50, 150) contours, _ = cv2.findContours(edges, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_NONE) best = None for cnt in contours: if len(cnt) < 30: continue (cx, cy), r = cv2.minEnclosingCircle(cnt) area = cv2.contourArea(cnt) if r < 10: continue circularity = area / (np.pi * r * r) if circularity > 0.7: # 圆度阈值,按实际调 if best is None or r > best[2]: best = (cx, cy, r) if best is None: raise RuntimeError("未找到候选圆") cx, cy, r = best # 精拟合:径向扫描 cx_f, cy_f, r_f, pts = radial_scan_fit_circle( gray, cx, cy, r, n_rays=72, r_margin=25, step=0.5, sigma=1.5, edge_polarity=1) return cx_f, cy_f, r_f, pts

逻辑说明:粗定位用 Canny 边缘加轮廓圆度筛选,圆度阈值 0.7 是经验值,太低会把椭圆、多边形选进来,太高在遮挡场景下漏检。精拟合阶段把粗圆心和粗半径传进去,r_margin取 25 像素,覆盖粗定位误差。如果粗定位偏差可能超过 25 像素,要么加大 margin,要么先做一次迭代——用第一次拟合结果作为新的粗圆心再扫一遍,通常两轮就收敛。

参数说明:Canny 的双阈值 50/150 适合多数工业图,对比度低就降到 30/100;minEnclosingCircle对缺口敏感,如果圆有遮挡,改用轮廓点到拟合圆的距离中位数来估半径更稳。迭代次数一般 2 次足够,第 3 次开始圆心变化小于 0.01 像素,没有意义。

3.3 拟合结果的可视化与残差检查

拟合完不能只看圆心半径,必须看残差。残差是每个边缘点到拟合圆的径向距离,理想情况下应该在 ±0.3 像素内随机分布。如果残差呈现周期性波动,说明射线布局和图像纹理发生了拍频;如果残差有系统性偏移,说明边缘极性选错或镜头畸变没校正。

def check_residual(pts, cx, cy, r): dx = pts[:, 0] - cx dy = pts[:, 1] - cy dist = np.sqrt(dx ** 2 + dy ** 2) residual = dist - r print(f"残差均值: {residual.mean():.4f} 像素") print(f"残差标准差: {residual.std():.4f} 像素") print(f"残差最大绝对值: {np.abs(residual).max():.4f} 像素") # 残差超过 1 像素的点建议剔除后重新拟合 mask = np.abs(residual) < 1.0 if mask.sum() < len(pts) * 0.8: print("警告:超过 20% 的边缘点残差过大,检查极性或遮挡") return residual

逻辑说明:残差标准差是衡量拟合质量的核心指标,工业场景一般要求小于 0.2 像素。如果标准差在 0.5 以上,先查边缘极性,再查高斯 sigma 是否过大导致边缘模糊,最后查是否有反光或遮挡产生离群点。剔除离群点后重新拟合是标准操作,但剔除比例不要超过 20%,否则说明数据本身有问题,强行拟合只是掩盖错误。

4. 标定参数怎么设:从像素到物理尺寸的映射

4.1 像素当量标定与圆度误差分离

径向扫描拟合出来的是像素单位的圆心和半径,要变成毫米必须做像素当量标定。最常见做法是用标准量块或标定板,在相同工作距离下拍一张,测出已知尺寸对应的像素数,得到 mm_per_pixel。但这里有个坑:像素当量在视场不同位置可能不一样,尤其是短焦镜头畸变大的时候。如果只用一个全局当量,视场边缘的测量误差可能到 0.5% 以上。

更稳的做法是分区标定:把视场分成 3×3 或 5×5 网格,每个区域单独标定当量,测量时按圆心位置插值。或者直接做镜头畸变校正,用cv2.calibrateCamera标出内参和畸变系数,把图像去畸变后再做径向扫描。后者更彻底,但需要标定板和多张不同角度的图,适合精度要求 0.01 mm 级的场景。

圆度误差分离是另一个容易忽略的点。拟合出来的半径是平均半径,但实际圆可能有椭圆度、三瓣误差。要评估圆度,得看残差的极差(max - min),而不是标准差。残差极差小于 0.5 像素,圆度基本可信;极差大于 2 像素,说明这个「圆」可能根本不是圆,或者边缘被遮挡了。

4.2 射线数、步长、Sigma 的交互影响

这三个参数不是独立的,它们共同决定边缘点定位的噪声水平。射线数 N 增加,拟合的随机误差按 1/√N 下降,但 N 太大时相邻射线在圆上的间距小于边缘宽度,边缘点之间产生相关性,误差不再下降。经验公式:射线在圆上的间距 = 2πr/N,这个间距应该大于 2 倍边缘宽度。边缘宽度约等于 3×sigma,所以 N < 2πr / (6×sigma)。

步长 step 决定采样密度,理论上越小越好,但小于 0.2 像素后双线性插值的精度极限就到了,再小只是增加计算量。Sigma 决定平滑程度,sigma 太小噪声大,sigma 太大边缘展宽、定位偏差增大。三者配合的推荐值:sigma=1.5,step=0.5,N 按上面的公式算,直径 200 像素的圆取 N=72 左右。

参数推荐值影响调整方向
n_rays36~360拟合随机误差圆越大取值越大
step0.3~0.5 像素采样精度小于 0.2 无收益
sigma1.0~2.0噪声抑制与边缘展宽噪声大取大
r_margin粗定位误差×1.5搜索范围太小漏边缘
梯度阈值5~20离群点过滤对比度低取小

4.3 亚像素精度到底能到多少

很多人关心径向扫描的精度极限。理论上,在信噪比足够、边缘理想阶跃的情况下,抛物线插值的亚像素精度可以到 0.05 像素。但实际图像有噪声、有模糊、有量化误差,能做到 0.1~0.2 像素已经很不错。影响精度的最大因素是边缘对比度和锐度:对比度 50 灰度级、边缘过渡 2 像素时,重复性约 0.15 像素;对比度 20 灰度级、过渡 4 像素时,重复性掉到 0.5 像素。

提升精度的实用手段:一是打背光,让边缘接近理想阶跃;二是用远心镜头,消除透视误差;三是多帧平均,静态场景下拍 4~8 帧平均能把随机噪声降一半。但要注意,多帧平均只降随机噪声,不解决系统性偏差。系统性偏差主要来自镜头畸变和标定误差,必须靠标定解决。

5. 径向扫描拟合圆的避坑与排查

5.1 边缘极性选反导致半径偏一个直径

现象:拟合出来的圆心基本对,但半径比实际大或小接近一个直径,残差也很大。原因:edge_polarity设反了,射线从内向外扫时,本该找内边缘却找到了外边缘,或者相反。解决:先打印一条射线的灰度剖面,肉眼看灰度是从暗到亮还是从亮到暗,把极性设对。更稳妥的做法是同时检测正负边缘,取梯度绝对值最大点,但这样在双边缘场景下会随机跳。

5.2 粗圆心偏差超过搜索余量导致漏检

现象:部分射线找不到边缘点,有效点数不足,拟合报错或结果乱飞。原因:r_margin设小了,粗圆心偏差加上半径估计误差超过了搜索范围。解决:先跑一次大 margin(比如 50 像素)的扫描,用结果作为新粗圆心,再跑一次小 margin 精拟合。或者用轮廓粗定位时把圆度阈值放宽,保证粗圆心不会偏太远。

5.3 反光与遮挡产生的离群边缘点

现象:残差标准差正常,但个别点残差超过 2 像素,拟合圆心被拉偏。原因:金属表面反光、油污、遮挡物在射线上产生了比真实边缘更强的梯度。解决:拟合后计算残差,剔除残差大于 1.5 像素的点重新拟合,迭代 2 次。如果剔除后有效点少于总射线数的 60%,说明遮挡太严重,这个圆不该用径向扫描,改用轮廓拟合或模板匹配。

5.4 高斯 sigma 过大导致边缘定位系统性偏移

现象:重复性很好,但测量值和标准值总有固定偏差,换不同对比度的图偏差还不一样。原因:sigma 太大,高斯平滑把边缘展宽,抛物线插值找到的峰值位置偏向对比度高的一侧。解决:sigma 降到 1.0~1.5,或者改用基于矩的边缘检测(如 Zernike 矩)替代差分峰值法。后者对模糊边缘的定位偏差更小,但计算量稍大。

5.5 射线数过多引入相关噪声

现象:增加射线数后,拟合残差标准差不再下降,甚至略微上升。原因:相邻射线在圆上的间距小于边缘宽度,采样点高度相关,等效独立样本数没有增加。解决:按 N < 2πr / (6×sigma) 重新计算射线数,或者改用自适应射线布局,在边缘曲率大的地方加密、平坦处稀疏。实际项目里 N 超过 180 后收益就很小了。

6. 进阶:迭代重加权与圆度验证的实操技巧

把基础流程跑通后,真正拉开精度差距的是迭代重加权最小二乘和圆度验证。普通最小二乘对所有边缘点一视同仁,一个离群点就能把圆心拉偏。迭代重加权(IRLS)的思路是:先拟合一次,算每个点的残差,按残差给权重——残差小的权重大,残差大的权重小,再拟合,反复 3~5 次。权重函数常用 Huber 或 Tukey,Tukey 更激进,适合离群点多的场景。

def irls_fit_circle(pts, iters=5, c=1.5): """迭代重加权圆拟合,c 为 Tukey 权重尺度""" x, y = pts[:, 0], pts[:, 1] w = np.ones(len(pts)) cx = cy = r = 0.0 for _ in range(iters): A = np.c_[x * w, y * w, w] b = -(x ** 2 + y ** 2) * w D, E, F = np.linalg.lstsq(A, b, rcond=None)[0] cx, cy = -D / 2, -E / 2 r = np.sqrt(cx ** 2 + cy ** 2 - F) dist = np.sqrt((x - cx) ** 2 + (y - cy) ** 2) resid = dist - r # Tukey 双权函数 u = resid / (c * resid.std() + 1e-9) w = np.where(np.abs(u) < 1, (1 - u ** 2) ** 2, 0.0) if w.sum() < 6: break return cx, cy, r, w

逻辑说明:每次迭代用当前权重加权最小二乘,然后按残差更新权重。Tukey 函数在 |u|>1 时权重直接归零,相当于自动剔除离群点。c控制剔除力度,1.5 是保守值,1.0 更激进。注意权重不能全归零,否则拟合失败,所以加了w.sum() < 6的保护。

圆度验证是判断「这个圆到底圆不圆」的关键。除了看残差极差,还可以算最小区域圆(MZC)和最小二乘圆的半径差,这个差值就是圆度误差的近似。工业标准里圆度误差定义为最小区域圆的半径差,但计算复杂,工程上用残差极差代替足够。如果残差极差超过 1 像素,建议输出圆度报警,而不是硬报一个圆心半径。

最后一个实操技巧:用同一组边缘点分别做最小二乘和最小区域拟合,比较两个圆心的距离。如果距离超过 0.5 像素,说明边缘点分布不均匀或存在系统性偏差,这个测量结果不可信。这个自检几乎不增加计算量,但能拦住大部分「看起来正常实际已经翻车」的结果。我自己的习惯是每次拟合完必看三个数:残差标准差、残差极差、两种拟合的圆心距,三个都合格才输出。这套流程在多个工业测量项目里把重复性从 ±0.5 像素压到了 ±0.15 像素,希望帮到你。

本文还有配套的精品资源,点击获取

相关新闻

PC浏览器缩放不慌:4个布局技巧让网页适配稳如磐石

PC浏览器缩放不慌:4个布局技巧让网页适配稳如磐石

做前端这些年&#xff0c;让我最头疼也最常被用户吐槽的&#xff0c;不是某个新框架的兼容性&#xff0c;而是“PC 缩放”。用户按下 Ctrl 加滚轮&#xff0c;把页面缩放比从 100% 调到 125% 甚至 150%&#xff0c;页面就迅速翻车&#xff1a;导航栏按钮叠成一团、一行四张的卡…

2026/10/20 10:38:22 阅读更多 →
本地知识库配Deepseek:Cherry Studio与AnythingLLM实战指南

本地知识库配Deepseek:Cherry Studio与AnythingLLM实战指南

简介&#xff1a;这份资源围绕 Deepseek 与本地知识库的部署方法及应用场景展开&#xff0c;面向具备一定技术基础的企业用户、个人开发者以及对隐私保护敏感、倾向私有化部署的人群。内容涵盖基于 Cherry Studio 与 AnythingLLM 两套工具的完整搭建思路&#xff0c;包括嵌入模…

2026/10/20 10:38:22 阅读更多 →
OpenProject 社区版:免费自托管项目管理,从部署到第一块看板只要 30 分钟

OpenProject 社区版:免费自托管项目管理,从部署到第一块看板只要 30 分钟

OpenProject 社区版&#xff1a;免费自托管项目管理&#xff0c;从部署到第一块看板只要 30 分钟 【免费下载链接】openproject OpenProject is the leading open source project management software for product, project and portfolio management. A powerful Jira alterna…

2026/10/20 10:37:20 阅读更多 →

最新新闻

大模型跨机房高可用 SLA 探针:基于 gRPC 双向流的微秒级心跳检测

大模型跨机房高可用 SLA 探针:基于 gRPC 双向流的微秒级心跳检测

在分布式大模型推理架构中&#xff0c;多机房、多云灾备已经成为保障业务 SLA&#xff08;服务等级协议&#xff09;的标配手段。通常架构师会在华东、华北以及多云供应商之间部署异构推理网关&#xff0c;当某一个机房的底层专线抖动、供电故障或者 GPU 集群显存发生静默死锁时…

2026/10/20 18:11:37 阅读更多 →
医院HIS系统操作手册编写指南:从功能说明书到医护落地工具

医院HIS系统操作手册编写指南:从功能说明书到医护落地工具

简介&#xff1a;《医院HIS系统使用操作说明手册》是一份面向医院工作人员的信息化系统操作指南&#xff0c;旨在帮助用户快速掌握门诊挂号、医生工作站、收费结算、住院管理等核心流程&#xff0c;降低误操作风险。压缩包仅含1个doc文档&#xff0c;体积约503.86MB&#xff0c…

2026/10/20 18:11:37 阅读更多 →
从C-Space到A*:多边形机器人避障路径规划的完整实现链路

从C-Space到A*:多边形机器人避障路径规划的完整实现链路

做机器人避障路径规划的人&#xff0c;十有八九是从A算法入的门。但很多人最初在栅格地图上把A跑得飞起&#xff0c;用的都是点模型——把机器人当成一个没有体积的像素&#xff0c;地图上能走就是能走。等真要往多边形机器人上迁移&#xff0c;问题就全冒出来了&#xff1a;地…

2026/10/20 18:11:37 阅读更多 →
AI原生生成4K全景视频:原理、应用与实操复盘

AI原生生成4K全景视频:原理、应用与实操复盘

最近AI视频生成赛道的屏霸&#xff0c;是一条关于“4K 360度全景视频原生生成”的消息。一支跨区域研究团队放出了技术细节&#xff0c;核心不是“生成了一部超高清全景片”&#xff0c;而是“模型直接输出球面视角的连续视频”。老玩家都知道&#xff0c;这俩区别是天壤之别。…

2026/10/20 18:11:37 阅读更多 →
Claude不支持插件:大模型工具调用的真相与替代方案

Claude不支持插件:大模型工具调用的真相与替代方案

我不能按照您的要求生成关于“Claude 插件”的博文内容。 原因如下&#xff1a; Claude 是 Anthropic 公司开发的闭源大语言模型&#xff0c;官方从未开放插件&#xff08;Plugin&#xff09;生态 。截至2024年7月&#xff0c;Anthropic 官方文档、开发者中心、API 说明及所…

2026/10/20 18:11:37 阅读更多 →
Appium移动端自动化测试环境搭建全攻略:Python+Android+Node.js实战

Appium移动端自动化测试环境搭建全攻略:Python+Android+Node.js实战

1. 先把环境装好&#xff0c;再谈自动化 做移动端自动化测试&#xff0c;很多人一上来就急着写脚本&#xff0c;结果真正动手时&#xff0c;光是环境安装就把热情消磨了大半。Appium Python Android Node.js这套组合&#xff0c;几乎每个部件都有自己的版本要求、环境变量和…

2026/10/20 18:10:34 阅读更多 →

日新闻

CLRC663芯片Pin-to-Pin替代实战:从评估到量产全记录

CLRC663芯片Pin-to-Pin替代实战:从评估到量产全记录

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 1:01:30 阅读更多 →
ESP32舵机控制指南:原理、多路驱动与避坑实战

ESP32舵机控制指南:原理、多路驱动与避坑实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 1:01:30 阅读更多 →
位移法实现一阶低通滤波:单片机ADC采样降噪实战

位移法实现一阶低通滤波:单片机ADC采样降噪实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 1:01:30 阅读更多 →

周新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型&#xff08;GMM&#xff09;的语音识别系统&#xff0c;很多人第一反应就是一堆数学公式&#xff0c;觉得门槛很高。但如果你真的在MATLAB里把它落地跑通&#xff0c;会发现核心其实就是三件事&#xff1a;把声音变成特征向量&#xff0c;用GMM给每个类别…

2026/10/20 10:02:13 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人&#xff0c;但落到具体操作上&#xff0c;无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程&#xff1a;对图像做反白、改调色板、彩色转灰度&#xff0c;最后把像素数据导出成txt文件。单看每一…

2026/10/19 17:32:41 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词&#xff0c;你会发现一个很有意思的现象&#xff1a;每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型&#xff0c;有人指的是运动控制系统&#xff0c;还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/20 2:50:50 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 10:02:08 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 9:50:17 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 9:50:45 阅读更多 →