选择性搜索算法详解:目标检测候选区域生成的原理与实战
简介面向Python与计算机视觉初学者这份代码包以简洁示例演示选择性搜索算法的核心流程完整覆盖图像预处理、SLIC超像素分割、相邻区域相似度比较与合并、候选框输出等环节。选择性搜索是目标检测中候选区域生成的重要技术与传统滑动窗口相比能显著降低搜索空间本例将算法拆解为搜索、过滤、提取三个脚本便于逐段理解与调试。压缩包共19个文件以3个Python脚本为主辅以12张过程图片、markdown说明文档以及数字示例图整体仅53KB轻量易用。目前已有283人学习运行脚本即可输出候选区域直观观察超像素向目标建议框转化的全过程理解颜色直方图、纹理统计量等特征在区域生长中的作用适合用作RCNN、Fast RCNN等目标检测模型的预备练习。附带license文件明确使用规范可放心参考直接用于教学或自学。1. 选择性搜索是什么区域提议里最不该被跳过的那个selective_search选择性搜索是目标检测里常被跳过、但每个做检测的人都绕不开的算法。它不负责分类也不输出物体的名字只回答一个问题这张图里哪些区域有可能是物体它把这些区域以候选框region proposal的形式交给后面的分类器或检测网络。它解决的核心痛点是早期目标检测靠滑动窗口全图穷举大部分计算都浪费在纯背景上。selective_search借鉴人眼「先找物体大概在哪再细看是什么」的思路把「找位置」单独抽出来。适合正在做目标检测与分割、被多尺度或小目标问题卡住、以及想理解R-CNN系检测器底层逻辑的从业者。2. 从穷举滑窗到层次分组为什么要先找区域再认类别2.1 滑窗为什么撑不住十万级窗口与两个加速矛盾目标检测最朴素的思路就是把「位置」和「分类」一起做这也是一代滑窗方法的核心套路用一个固定比例的窗口在图像上水平垂直扫一遍每个窗口送进分类器判断是不是目标。听起来合理但实际跑起来你会发现候选窗口的数量根本不是千级别而是十万到百万级别。再加上多尺度图像金字塔、不同长宽比计算量指数级上涨。方案窗口/候选数量是否贴合目标边界是否需要训练滑窗多尺度金字塔10万-100万差框落点随机否selectivesearch1000-20000较好靠近真实边界否RPN 区域提议网络1000-2000好但需要联合训练是我见过很多新人在做检测时第一反应还是回到滑窗理由是「分区分类太复杂」。但当检测网络的backbone是个几百MFLOPs的CNN时百万个窗口的前向传播是任何单卡都扛不住的。selective_search把候选数量压到两三个数量级以内同时保留了对目标边界的较高覆盖这就是它当年能在R-CNN里立足的直接原因。从工程角度看它做了一件巧妙的事把检测问题拆成「先找位置、再认类别」。找位置不需要知道物体叫什么只需要知道这里「有东西」认类别再把每个候选区域送进分类器。滑窗把这两个任务耦合在一起而selective_search把它们解耦了解耦之后每一步都变得更容易优化。2.2 selective_search的四步核心流程以及为什么输出「中间状态」selective_search的底层思路不是暴力枚举而是从图像的天然结构出发做层次合并。我把它拆成四步讲。第一步用Felzenszwalb超像素分割把图像切成许多小块。这一步的意义在于把像素聚成「原子区域」让后续合并不需要逐像素比较。第二步对相邻区域计算一组相似度分数。第三步按相似度从高到低反复合并相邻区域合并后重新计算新区域和邻居的相似度。第四步记录合并过程中产生过的所有中间层级的区域外接矩形作为候选框输出。用一段简化Python模拟合并过程你就能看到「中间状态」的含义regions list(range(8)) # 假设有8个超像素 merged_boxes [] while len(regions) 1: # 找出相似度最高的一对相邻区域省略相似度计算 i, j find_most_similar_pair(regions) new_region merge(regions[i], regions[j]) regions.remove(regions[i]) regions.remove(regions[j - 1]) # 注意移除后索引变化 regions.append(new_region) merged_boxes.append(bbox(new_region)) final_proposals merged_boxes这段代码的关键在于merged_boxes记录的是每一次合并后新区域的包围盒而不是最终剩下的那一个分割区域。所以同一个目标会被记录多次第一次可能是车头合并几次后变成整车再合并可能把车和后面的路牌框在一起。这种多尺度、多层次的候选框正是召回率的来源但代价就是大量重复框需要在后面用NMS收敛。也许你会问为什么不直接用深度学习做区域提议答案很简单selective_search完全无监督不需要任何标注拿到一张图就能跑。R-CNN那个时代标注数据本身就贵区域提议再依赖训练就不现实。即使在今天RPN在训练充分时确实更好但selective_search作为零成本基线仍然有相当强的竞争力。2.3 四种相似度度量跨尺度和跨颜色泛化的底层原因selective_search原论文设计了四种相似度缺一不可。颜色相似度比较HSV颜色直方图光照变化下比RGB更稳纹理相似度用高斯导数滤波器响应做统计区分材质大小相似度倾向于优先合并小区域防止大物体直接吞掉小目标形状契合相似度希望合并后的两个区域能互补成一个紧凑的大矩形。正是这四个度量的组合让候选框能同时覆盖大面积物体和小目标也能应对目标和背景颜色相近的情况。因为颜色区分不开的时候纹理和大小会兜底。这是滑窗做不到的——滑窗是固定位置和尺度而selective_search是从图像的天然结构去发现区域。我一开始觉得它玄后来把超像素分割那层可视化出来才明白所谓「物性」其实就是多相似度下的贪心聚类。实际工程里这套度量有个值得注意的边界当目标的颜色和背景高度接近且纹理差异也弱时颜色相似度和纹理相似度都失效此时大小与形状契合度反而会主导合并。处理这类数据集时常见做法是降低初始超像素的scale让碎片化更严重再靠后续合并找回边界。这也是为什么它看起来参数不多实际调起来却需要逐层看可视化结果。3. 用selective_search跑通最小示例依赖准备、十行代码与输出解读3.1 依赖安装选哪条路selectivesearch工具包还是OpenCV做selective_search的最小示例我一般有两套选择。第一套是pip install selectivesearch这个包把区域合并逻辑完整封装好参数暴露得直观适合学习和调参。第二套是OpenCV自带的cv2.ximgproc.segmentation.createSelectiveSearchSegmentation跑起来更快更适合接进已有OpenCV检测流水线我在正式工程里多用这套。# 方式一selectivesearch 工具包 pip install selectivesearch # 方式二OpenCV 的 ximgproc 模块 pip install opencv-contrib-python安装完先做一个十秒钟的验证pip show scikit-image opencv-contrib-python | grep -E Name|Versionimport selectivesearch import cv2 assert hasattr(cv2, ximgproc), 需要安装opencv-contrib-python而不是opencv-python这里有一个前置知识要注意selectivesearch依赖scikit-image它内部调用的是老版本API新版skimage偶尔会带来签名变化。OpenCV版本则必须确认装的是opencv-contrib-python只装opencv-python会出现找不到ximgproc的问题。我一般建议两条路只保留一条作为主链路另一条放在独立虚拟环境里做参数对照避免两套依赖互相污染。3.2 最小示例一张图、十行代码、一套候选框下面是我跑通的最小示例。输入一张彩色图像输出一组候选框坐标import cv2 import selectivesearch # 1. 读图并转成RGBselectivesearch内部按RGB顺序计算HSV直方图 img cv2.imread(demo.jpg) img_rgb cv2.cvtColor(img, cv2.COLOR_BGR2RGB) # 2. 执行选择性搜索 img_lbl, regions selectivesearch.selective_search( img_rgb, scale500, sigma0.8, min_size20 ) # 3. 提取候选框统一转成 (x1, y1, x2, y2) 格式 candidates set() for r in regions: x, y, w, h r[rect] if w * h 500: continue candidates.add((x, y, x w, y h))代码逻辑说明selective_search返回两个值img_lbl是像素级的超像素标签图regions是合并过程中产生的区域字典列表。每个区域里的rect字段格式是(x, y, w, h)所以需要换算成两个角点。用set去重是因为层次合并里同一个矩形可能被记录多次。参数说明scale500控制超像素初始粒度值越大超像素越少、合并越激进、候选框总数越少sigma0.8是Felzenszwalb分割前的高斯平滑强度过小图碎、过大边界糊min_size20过滤过小的初始分割块。最后那个面积小于500像素的框直接丢弃这是过滤噪声框的常用经验值。如果跑OpenCV版本最小代码是这样import cv2 img cv2.imread(demo.jpg) ss cv2.ximgproc.segmentation.createSelectiveSearchSegmentation() ss.setBaseImage(img) ss.switchToSelectiveSearchFast() rects ss.process() # N x 4每行是 [x, y, w, h]OpenCV版封装更黑盒它把scale和sigma隐藏在预设档位里只保留switchToSelectiveSearchFast和switchToSelectiveSearchQuality两档。前者大约生成1000到2000个框速度快后者会生成数万个框速度慢一个数量级。如果你的图是1080p或者更高分辨率跑Quality模式前先做一次长边缩放会明智很多。3.3 输出结构怎么看rect、labels与超像素可视化regions里的每一项不只是坐标实际是字典里面还带着labels和size。labels是该区域在当前合并层级包含的所有超像素标签集合size是区域面积。这个细节排查时很有用两个矩形高度重叠却都保留在输出里就是因为它们对应的标签集合不同代表不同合并阶段。画候选框是验证算法是否正常的最快方式import random import matplotlib.pyplot as plt rand_color lambda: (random.randint(0, 255),) * 3 out img.copy() for x1, y1, x2, y2 in list(candidates)[:200]: cv2.rectangle(out, (x1, y1), (x2, y2), rand_color(), 1) plt.subplot(121) plt.imshow(cv2.cvtColor(img, cv2.COLOR_BGR2RGB)) plt.subplot(122) plt.imshow(cv2.cvtColor(out, cv2.COLOR_BGR2RGB)) plt.show()只画前200个避免糊成一团。如果发现所有框挤在一小块区域、整图覆盖不足说明min_size或scale不合适候选框退化成了把图像切碎而不是找物体。img_lbl也值得可视化一次因为它直接暴露分割粒度from skimage.segmentation import mark_boundaries plt.imshow(mark_boundaries(img_rgb / 255.0, img_lbl)) plt.show()这里mark_boundaries会把超像素边界用红色描出来。看这个图你就能确认当前scale和sigma下图像被切割到什么程度。如果边界线密得像噪点说明分割过碎如果整块区域都没边界说明过粗。调参时先看这张图比反复改参数跑完整流程高效得多。4. 把selective_search接进检测流水线参数怎么调与召回率怎么验4.1 五个核心参数的对照表与NMS收敛代码无论用哪套实现最先影响候选框质量的参数就这么几个。参数建议范围影响调整依据scale100-2000初始超像素粒度值越大候选框越少小目标多就偏低大场景偏高sigma0.5-1.2预分割平滑强度图像噪声大调高干净图调低min_size10-100过滤超小分割块高分图可放大低分图放小fast / quality二选一候选框数量级与耗时初调用fast刷精度用qualitycolor_strategy预设组合多颜色空间融合权重默认即可特定数据集再动很多人把scale当成候选框数量旋钮调大就想让框变少。实际上候选框数量取决于整个合并过程保留了多少中间层级scale只是初始分割的门槛影响是间接的。我一般固定sigma0.8、min_size20只动scale每次把候选框画出来对比一遍比盯数字更直观。数量问题最终要靠NMS收敛这里给一个可以直接抄的贪心版本import numpy as np def nms_proposals(boxes, thresh0.5, top_k2000): boxes np.array(boxes, dtypenp.float32) if len(boxes) 0: return [] x1, y1, x2, y2 boxes[:, 0], boxes[:, 1], boxes[:, 2], boxes[:, 3] areas (x2 - x1) * (y2 - y1) order areas.argsort()[::-1] # 没有置信度优先保留小框 keep [] while order.size 0 and len(keep) top_k: i order[0] keep.append(i) xx1 np.maximum(x1[i], x1[order[1:]]) yy1 np.maximum(y1[i], y1[order[1:]]) xx2 np.minimum(x2[i], x2[order[1:]]) yy2 np.minimum(y2[i], y2[order[1:]]) w np.maximum(0, xx2 - xx1) h np.maximum(0, yy2 - yy1) inter w * h ovr inter / (areas[i] areas[order[1:]] - inter) idx np.where(ovr thresh)[0] order order[idx 1] return [boxes[i] for i in keep]逻辑说明selective_search没有置信度分数所以排序只能用启发式。我按面积从小到大排优先保留小框是因为小目标在后续合并中更容易被大框覆盖掉。top_k2000是R-CNN时代沿用的经验值一般任务够用。thresh0.5意味着IoU超过一半的两个框只保留一个。这段NMS我放了很久是每次新接数据集都会跑一遍的基础工具。4.2 召回率验证候选框到底盖住GT没有接入检测流水线之前一定要做一次离线评估用数据集的GT框算候选框与GT的最大IoU统计不同阈值下的召回率。这个指标直接决定后续分类器能吃到多少正样本。如果候选框连GT都盖不住后面网络再强也没有用。def iou(box_a, box_b): xa, ya, xb, yb box_a x1, y1, x2, y2 box_b inter_w max(0, min(xb, x2) - max(xa, x1)) inter_h max(0, min(yb, y2) - max(ya, y1)) inter inter_w * inter_h area_a (xb - xa) * (yb - ya) area_b (x2 - x1) * (y2 - y1) return inter / (area_a area_b - inter 1e-6) def recall_at_50(candidates, gts): hits 0 for gt in gts: max_iou max([iou(gt, c) for c in candidates] or [0]) if max_iou 0.5: hits 1 return hits / len(gts)这段代码的标准口径是「每个GT至少有一个候选框IoU0.5就计为命中」注意不要去算候选框和GT的平均IoU那个指标会把「部分GT完全没被盖住」的事实稀释掉。在Pascal VOC这类中尺度目标数据集上fast模式1000个框的召回率应该到0.9附近才算及格。如果低于0.85优先降min_size和scale不要盲目加候选框数量数量翻倍可能只涨两个点后面检测头却要多吃一倍计算。4.3 两个典型接入误区候选框≠检测结果Fast≠默认档第一个误区是把候选框当最终检测结果。selective_search出来的框没有类别、没有置信度直接拿去画结论图只会得到一堆空框。R-CNN系的做法是对每个候选框做crop、resize、提特征、再预测类别。如果你接入的是Faster R-CNN这类两阶段检测器selective_search扮演的是区域提议角色真正的框位置和类别由后面的RPN/检测头输出。第二个误区是Fast模式当默认档跑完全程。Fast适合调通代码、验证流程但不适合直接作为最终训练的提议来源它对小目标保留不如Quality模式。如果数据集里小目标多我宁可多等几秒跑Quality再拿上面的NMS压回2000个框召回质量会好一截。别在提议阶段节省这几秒后面训练几十个epoch补不回来的。顺带说一个采样细节候选框生成后做训练采样时正样本一般取与某个GT IoU0.5的框负样本取IoU0.3的框。selective_search的负样本量极大随机抽取很容易让检测头看到一堆背景框我通常把正负比控制在1:3左右效果比默认的1:1更稳。5. selective_search常见踩坑5条血泪经验与对应解法5.1 候选框数量爆炸一张图上万框的收敛做法现象1080p图跑Quality模式输出两万个候选框后续分类器直接卡死。 原因层次合并的中间状态全被记录同一目标在不同合并阶段被反复框出。 解决用上节那个nms_proposals做第一道收敛thresh0.5、top_k2000通常能把两万个框压到千级召回率几乎不掉。如果压完发现某个目标还是被框出十几个重叠框再单独调低min_size让初始分割不要碎成噪声从源头上减少重复框的产生。5.2 import报skimage不兼容装完OpenCV又找不到ximgproc现象import selectivesearch抛ImportError或者AttributeError报错指向某个skimage函数。另一边OpenCV装了但cv2.ximgproc还是不存在。 原因selectivesearch工具包比较老底层调用的是旧版skimage API。新版skimage里部分函数签名变了最常见的是Felzenszwalb或remove_small_objects的参数行为变化。OpenCV这边ximgproc在扩展模块里只装opencv-python自然找不到。 解决给selectivesearch单独建虚拟环境把scikit-image固定在0.19附近。OpenCV则专门确认装的是opencv-contrib-python。提示不要在同一个环境同时维护selectivesearch和opencv-contrib两套依赖遇到冲突时很难分清是哪一侧的问题。5.3 灰度图跑selective_search输入格式的三个注意点现象输入单通道灰度图直接报错或者强行转成三通道后候选框全是碎的。 原因颜色相似度建立在HSV直方图上单通道图没有颜色分布颜色度量直接退化层次合并少了一个主信号。 解决先判断通道数再用OpenCV补成三通道if len(img.shape) 2: img_rgb cv2.cvtColor(img, cv2.COLOR_GRAY2RGB)补完三通道后效果仍然偏弱就把scale调小、min_size调低来补偿碎的倾向。如果是红外或医学灰度图只靠颜色相似度本来就不合理建议直接换深度特征区域提议不要在selective_search上死磕。5.4 rect的宽高陷阱画框错位与裁剪越界的真凶现象可视化候选框时位置偏了半个身位或者crop出来的训练图不是越界就是全黑。 原因selective_search和OpenCV输出的rect都是(x, y, w, h)很多人当(x1, y1, x2, y2)直接用。一旦拿去img[y1:y2, x1:x2]裁剪取到的是完全错误的矩形区域。 解决在数据进入pipeline的入口统一做一次坐标转换同时用clip约束边界x1, y1 max(0, x), max(0, y) x2, y2 min(w_img, x w), min(h_img, y h)这是我早年吃过的一次大亏坐标格式问题不会在第一天暴露要等训练好几天之后以「loss不降」的形式冒出来排查成本极高。所以现在所有候选框拿进来第一件事就是转格式没有例外。5.5 玄学调参改了scale没效果问题出在颜色空间和默认策略现象调了一下午scale候选框数量完全不变开始怀疑是不是代码写错了。 原因用OpenCV版时switchToSelectiveSearchFast内部固定了一套预设策略根本不吃scale参数用selectivesearch工具包时如果输入图是灰度转三通道颜色信号已经丢了调scale自然感受不到明显变化。 解决先分清楚用的是哪套实现。工具包调scale/sigma/min_sizeOpenCV版改switchToSelectiveSearchFast/Quality配合setColorStrategy。每次调参前先可视化超像素标签图如果分割粒度没变说明参数没作用到预期阶段别盲目继续调。这条经验的核心就是先确认参数落在哪个环节再谈调参效果。6. 进阶验证用IoU直方图判断候选框是不是「够好」进入下一阶段前我建议养成一个习惯不光算召回率还得把每个GT的最大IoU画成直方图。召回率只告诉你IoU0.5的GT占比是多少看不到分布细节直方图能区分「候选框普遍只盖到0.4」和「候选框要么0.9要么0.2」这两种完全不同的坏法。import numpy as np import matplotlib.pyplot as plt max_ious [] for gt in gts: ious [iou(gt, c) for c in candidates] max_ious.append(max(ious) if ious else 0) plt.hist(max_ious, bins20, range(0, 1), edgecolorwhite) plt.xlabel(max IoU per GT) plt.ylabel(GT count) plt.show()读图方法如果直方图峰值集中在0.7到0.9说明候选框质量扎实可以直接进入检测头训练。如果峰值集中在0.3到0.5说明分割粒度过粗、框得太松应当把scale调低并增加候选框数量。如果分布呈现双峰一部分在0.1以下、一部分在0.9以上说明有某类目标系统性漏检通常是小目标它们在超像素合并早期就被大邻居吞并了。这个直方图也是我做数据集适配的主要诊断工具。换到新数据集时我会先跑一遍不同scale下的IoU分布挑一个让中位IoU最高、低IoU尾巴最短的参数组然后再开始训练而不是直接用上次项目的参数。我第一次在新数据集上偷懒用了默认参数等训练到第三天才发现大目标全被框住、小目标几乎没有正样本最后只能回头重跑提议阶段白费了几天算力。所以「先画候选框、再看直方图、再决定训练」已经成了我的固定顺序希望帮到你。本文还有配套的精品资源点击获取

相关新闻

综合能源优化调度中MPC与需求响应的工程实践:从预测模型到滚动优化

综合能源优化调度中MPC与需求响应的工程实践:从预测模型到滚动优化

简介:这份资源面向综合能源优化调度与需求响应方向的研究生、科研人员及工程技术人员,聚焦建筑蓄热系统的模型预测控制(MPC)实现。背景设定为纽约市一栋配备被动与主动蓄热的办公楼,费率计划包含三级需求费及系统运营商…

2026/10/12 17:47:16 阅读更多 →
商品评论情感分析实战:中文文本分类与机器学习全流程指南

商品评论情感分析实战:中文文本分类与机器学习全流程指南

简介:面向计算机相关专业毕业设计场景的完整项目包,聚焦商品评论情感分析,覆盖爬虫采集、文本预处理、特征表示、SVM与LSTM建模、结果可视化和简易GUI等环节,适合人工智能、电子信息、物联网等专业学生用于毕设、课设或机器学习入…

2026/10/12 17:47:16 阅读更多 →
收藏这份2025年大模型实践指南:从推理优化到部署落地的全栈经验(TaoToken 统一 Key 篇)

收藏这份2025年大模型实践指南:从推理优化到部署落地的全栈经验(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/12 17:47:16 阅读更多 →

最新新闻

从链路追踪到自动化评估:LangSmith 构建 RAG 质量保障体系

从链路追踪到自动化评估:LangSmith 构建 RAG 质量保障体系

1. 从一次 RAG 效果翻车说起:为什么链路追踪救不了你的检索质量 去年下半年,我接手了一个内部知识库问答系统的调优工作。上线初期,团队里所有人都觉得效果还行——毕竟 demo 阶段拿十几个标准问题测,回答都挺像样。但真实用户一进…

2026/10/12 19:18:57 阅读更多 →
open-code-review:一套增量优先的自动化代码审查引擎实践

open-code-review:一套增量优先的自动化代码审查引擎实践

团队里把代码审查当成例行公事已经很多年了,但每次发版前集中看代码,总有几个场景让我特别难受:靠肉眼扫 diff 看格式问题,review 意见反反复复提同样的点,新人提交的代码没人敢合并,老同学一忙就把审查拖到…

2026/10/12 19:18:57 阅读更多 →
代码评审如何走出形式主义?open-code-review 开放评审实践方案全解析

代码评审如何走出形式主义?open-code-review 开放评审实践方案全解析

这些年代码评审做了不少,真正让我决定把整个流程整理成一套可复用的开放方案并对外开源的,是又一次在评审群里看到“代码没问题,我过了”这样的回复。评论区和讨论串里没有任何实质建议,所有人都点了通过,但大家都知道…

2026/10/12 19:18:57 阅读更多 →
C++ cout格式化输出状态机原理与调试指南

C++ cout格式化输出状态机原理与调试指南

1. 为什么C初学者总在cout格式化上卡壳&#xff1f;这根本不是语法问题&#xff0c;而是认知断层“为什么我照着书上写cout << setw(10) << 123;&#xff0c;输出却没对齐&#xff1f;”“setprecision(2)为什么对整数没反应&#xff0c;对浮点数又突然变科学计数法…

2026/10/12 19:18:57 阅读更多 →
Python校园消费分析:一卡通流水到经济评估的完整实战

Python校园消费分析:一卡通流水到经济评估的完整实战

简介&#xff1a;这是一套基于Python的校园消费行为分析与经济评估系统完整项目资源&#xff0c;面向数据分析学习者、高校信息化管理人员及助学金评定相关研究者&#xff0c;解决从校园卡消费数据到学生经济画像构建的问题。包内共20个文件&#xff0c;以Python源码、编译缓存…

2026/10/12 19:18:57 阅读更多 →
C语言递归的工程本质:栈空间、契约与四大经典场景

C语言递归的工程本质:栈空间、契约与四大经典场景

1. 为什么“递归”是C语言学习者绕不开的“成年礼”刚带完一届某高校嵌入式方向的实训项目&#xff0c;有位A同学在调试一个树形结构遍历模块时卡了整整三天。他反复检查指针是否越界、内存是否泄漏、函数调用栈是否溢出&#xff0c;最后发现——问题根本不在硬件或内存&#x…

2026/10/12 19:17:57 阅读更多 →

日新闻

复古胶片颗粒感噪点合成器:Canvas ImageData 像素高斯杂色注入算法

复古胶片颗粒感噪点合成器:Canvas ImageData 像素高斯杂色注入算法

在数码相机、高清显示屏与现代矢量图形技术高度发达的今天&#xff0c;画面可以做到绝对的锐利、平滑与无瑕。然而&#xff0c;当一张秋日手账插画或拍立得照片过于“平整无瑕”时&#xff0c;往往会散发出一种冰冷生硬的“数码塑料感&#xff08;Digital Plasticity&#xff0…

2026/10/12 0:00:59 阅读更多 →
活字印刷古籍线装排版:Canvas 竖排文字与栏线自适应算法

活字印刷古籍线装排版:Canvas 竖排文字与栏线自适应算法

在现代网页与移动端设计中&#xff0c;横排&#xff08;Horizontal Layout&#xff09;早已经成为了绝对的主流。然而&#xff0c;当我们翻开泛黄的线装古籍、宋版木刻诗集&#xff0c;或是欣赏一张茶道雅集的手写便签时&#xff0c;那种**自上而下纵向书写、自右向左逐列铺展&…

2026/10/12 0:00:59 阅读更多 →
周日晚间的“精神松绑减震器”:无压力情绪倾倒箱与温和轻声陪伴

周日晚间的“精神松绑减震器”:无压力情绪倾倒箱与温和轻声陪伴

每到周日的晚上八点到十点&#xff0c;很多人心里都会悄悄亮起一盏警示灯。 在心理学上&#xff0c;这种现象有一个专门的称谓——“周日夜晚焦虑症&#xff08;Sunday Scaries&#xff09;”。明天又是周一&#xff0c;闹钟又要重新在七点响彻卧房&#xff1b;脑海里仿佛有一个…

2026/10/12 0:00:59 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介&#xff1a;基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码&#xff0c;面向计算机相关专业课程设计与期末大作业学生&#xff0c;以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程&#xff0c;…

2026/10/12 0:16:30 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程&#xff1a;键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化&#xff0c;十个新手有八个栽在"往输入框里填东西"这件事上&#xff1a;要么填不进去&#xff0c;要么填了一半&#xff0c;要么直接把原来内容追加在后面。这背后的根因&…

2026/10/12 0:16:38 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程&#xff1a;阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀&#xff1a;什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面&#xff0c;跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/12 0:16:43 阅读更多 →

月新闻

我发现了一个新思路:用 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/11 10:45:37 阅读更多 →
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/12 14:48:49 阅读更多 →
黑夜航拍船只数据集训练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/12 18:11:17 阅读更多 →