当前位置: 首页 > article >正文

图像滤波代码

#includestdio.h#includestdlib.h#includemath.h// 5阶拉普拉斯核二维转一维按行优先存储 5×5 → 25元素intlaplacian_5x5_1d[]{0,0,1,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,1,0,0};#defineKERNEL_SIZE5// 核尺寸5×5#defineKERNEL_LEN25// 一维核总长度// 计算一维卷积核的权重总和归一化核心intcalc_kernel_sum_1d(){intsum0;for(inti0;iKERNEL_LEN;i){sumlaplacian_5x5_1d[i];}// 避免除以0若总和为0取1returnsum0?1:sum;}/** * 读取P5格式PGM图像自动解析宽高、最大灰度值 * param filename: PGM文件路径 * param width: 输出图像宽度自动获取 * param height: 输出图像高度自动获取 * param max_val: 输出最大灰度值通常255 * return: 像素数组unsigned char*失败返回NULL */unsignedchar*read_p5_pgm(constchar*filename,int*width,int*height,int*max_val){FILE*fpfopen(filename,rb);if(!fp){fprintf(stderr,错误无法打开文件 %s\n,filename);returnNULL;}// 1. 校验魔数必须是P5charmagic[3];fscanf(fp,%s,magic);if(magic[0]!P||magic[1]!5){fprintf(stderr,错误仅支持P5格式二进制PGM文件\n);fclose(fp);returnNULL;}// 2. 跳过注释行以#开头charc;while((cfgetc(fp))#){while(fgetc(fp)!\n);// 跳过整行注释}ungetc(c,fp);// 把非#字符放回缓冲区// 3. 自动读取宽、高、最大灰度值if(fscanf(fp,%d %d %d,width,height,max_val)!3){fprintf(stderr,错误PGM文件头解析失败\n);fclose(fp);returnNULL;}fgetc(fp);// 跳过最后一个分隔符换行/空格// 4. 分配像素内存intpixel_count(*width)*(*height);unsignedchar*pixels(unsignedchar*)malloc(pixel_count*sizeof(unsignedchar));if(!pixels){fprintf(stderr,错误内存分配失败\n);fclose(fp);returnNULL;}// 5. 读取二进制像素数据P5格式核心if(fread(pixels,sizeof(unsignedchar),pixel_count,fp)!pixel_count){fprintf(stderr,错误像素数据读取失败\n);free(pixels);fclose(fp);returnNULL;}fclose(fp);returnpixels;}/** * 5阶拉普拉斯滤波处理一维卷积核 归一化 * param src: 输入像素数组一维 * param width/height: 图像宽高自动获取的数值 * return: 滤波后像素数组一维 */unsignedchar*laplacian_5x5_filter_1d(constunsignedchar*src,intwidth,intheight){intpaddingKERNEL_SIZE/2;// 5×5核需要2像素边缘填充intpixel_countwidth*height;unsignedchar*dst(unsignedchar*)malloc(pixel_count*sizeof(unsignedchar));if(!dst)returnNULL;// 计算核权重总和归一化因子intkernel_sumcalc_kernel_sum_1d();// 遍历图像跳过边缘padding区域避免越界for(intypadding;yheight-padding;y){for(intxpadding;xwidth-padding;x){intsum0;// 遍历一维卷积核计算卷积核心二维坐标转一维索引for(intky0;kyKERNEL_SIZE;ky){// 核的行for(intkx0;kxKERNEL_SIZE;kx){// 核的列// 1. 一维核索引行优先 → ky*KERNEL_SIZE kxintkernel_idxky*KERNEL_SIZEkx;// 2. 图像像素索引(当前行核行偏移)×宽度 (当前列核列偏移)intimg_yy-paddingky;intimg_xx-paddingkx;intsrc_idximg_y*widthimg_x;// 3. 卷积累加核权重 × 像素值sumlaplacian_5x5_1d[kernel_idx]*src[src_idx];}}// 卷积结果归一化除以核权重总和sumsum/kernel_sum;// 溢出保护 灰度值映射到0-255sumsum255?255:(sum0?0:sum);dst[y*widthx](unsignedchar)sum;}}// 边缘区域填充为0for(inti0;ipixel_count;i){intyi/width;intxi%width;if(ypadding||yheight-padding||xpadding||xwidth-padding){dst[i]0;}}returndst;}/** * 保存P5格式PGM图像 * param filename: 输出路径 * param pixels: 像素数组一维 * param width/height/max_val: 图像参数自动获取的数值 */voidsave_p5_pgm(constchar*filename,constunsignedchar*pixels,intwidth,intheight,intmax_val){FILE*fpfopen(filename,wb);if(!fp){fprintf(stderr,错误无法保存文件 %s\n,filename);return;}// 写入P5文件头fprintf(fp,P5\n%d %d\n%d\n,width,height,max_val);// 写入二进制像素数据fwrite(pixels,sizeof(unsignedchar),width*height,fp);fclose(fp);}// 主函数演示使用intmain(intargc,char*argv[]){if(argc!3){printf(使用方法%s 输入P5 PGM文件 输出P5 PGM文件\n,argv[0]);return1;}// 1. 读取PGM自动获取宽高intwidth,height,max_val;unsignedchar*src_pixelsread_p5_pgm(argv[1],width,height,max_val);if(!src_pixels)return1;printf(PGM解析成功宽度%d高度%d最大灰度值%d\n,width,height,max_val);printf(一维拉普拉斯核权重总和%d归一化因子\n,calc_kernel_sum_1d());// 2. 5阶拉普拉斯滤波一维核 归一化unsignedchar*dst_pixelslaplacian_5x5_filter_1d(src_pixels,width,height);if(!dst_pixels){free(src_pixels);return1;}// 3. 保存滤波结果save_p5_pgm(argv[2],dst_pixels,width,height,max_val);printf(滤波完成一维核结果已保存至 %s\n,argv[2]);// 释放内存free(src_pixels);free(dst_pixels);return0;}

相关文章:

图像滤波代码

#include <stdio.h> #include <stdlib.h> #include <math.h>// 5阶拉普拉斯核&#xff08;二维转一维&#xff1a;按行优先存储 55 → 25元素&#xff09; int laplacian_5x5_1d[] {0, 0, 1, 0, 0,0, 0, 0, 0, 0,1, 0, 0, 0, 1,0, 0, 0, 0, 0,0, 0, 1, 0, 0…...

Python flask 的校园新闻发布平台论坛交流系统

目录需求分析技术选型数据库设计核心功能实现论坛交互功能安全防护部署方案测试优化项目技术支持可定制开发之功能创新亮点源码获取详细视频演示 &#xff1a;文章底部获取博主联系方式&#xff01;同行可合作需求分析 明确校园新闻发布平台的核心功能需求&#xff0c;包括用户…...

OpenClaw部署到QQ心得与教程

我是一个月前OpenClaw刚出的时候就跟着一个博主做了一遍把OpenClaw部署到飞书&#xff0c;但是倒腾了好久&#xff0c;最终却在OpenClaw网页上都没跑通&#xff0c;OpenClaw不回应我——第一次探索以失败而告终了。三月时OpenClaw爆火了&#xff0c;我在网上刷到了各种各样的视…...

Python flask 的快递物流商品分拣管理系统6c5n0906

目录系统架构设计数据库模型设计核心功能实现分拣算法实现用户界面开发测试计划部署方案项目技术支持可定制开发之功能创新亮点源码获取详细视频演示 &#xff1a;文章底部获取博主联系方式&#xff01;同行可合作系统架构设计 采用Flask作为后端框架&#xff0c;前端使用HTML…...

别被云端AI割韭菜了:90%企业的AI转型都在白花钱

当所有厂商都在鼓吹“上云即智能”时&#xff0c;没人告诉你&#xff0c;你的数据正在裸奔、合规风险正在不断累积、ROI永远算不清楚。更没人告诉你&#xff1a;那些天天喊着“AI赋能”的厂商&#xff0c;自己内部用的全是本地部署。三个扎心真相&#xff0c;字字真实&#xff…...

deepseek实战教程-第十八篇:DeepSeek原理篇:DeepSeek的思维链(Chain of Thought,简称CoT)详解

什么是思维链(CoT)? 思维链简单来说,就是让模型在给出最终答案之前,先展示一步步的推理过程。就像我们在解决复杂问题时,会在草稿纸上逐步推导一样。 DeepSeek的CoT特点 1. 原生深度思考能力 DeepSeek模型在训练阶段就被赋予了强大的推理能力,不是简单的外挂插件。这…...

4. AI面试题之 Prompt

0. Prompt 提示词 同步参考一&#xff1a;Prompt 1. 聊聊你对提示词的理解? 2. PromptTemplate作用是啥?在程序中如何使用? PromptTemplate 提示词模板&#xff0c;通过使用占位符{} 将固定模板与动态输入解耦&#xff0c;实现内容的动态替换&#xff0c;避免重复编写相似…...

Python flask 攀枝花市鲜花在线销售商城系统vue pycharm

目录技术栈选择项目结构设计核心功能实现开发流程注意事项项目技术支持可定制开发之功能创新亮点源码获取详细视频演示 &#xff1a;文章底部获取博主联系方式&#xff01;同行可合作技术栈选择 后端采用Python Flask框架&#xff0c;负责API接口开发、数据库交互及业务逻辑处…...

MATLAB 分步傅里叶法产生 DSR 方波

MATLAB分步傅里叶法产生DSR方波在信号处理领域&#xff0c;产生特定波形是一项基础且重要的任务。今天咱们就来聊聊如何使用 MATLAB 的分步傅里叶法产生 DSR 方波。 什么是分步傅里叶法&#xff1f; 分步傅里叶法是一种用于求解非线性薛定谔方程等偏微分方程的数值方法。简单来…...

【图像提取】基于matlab数学形态学的数字视网膜图像血管提取 (DRIVE) 数据集分割【含Matlab源码 15146期】

&#x1f4a5;&#x1f4a5;&#x1f4a5;&#x1f4a5;&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;&#x1f49e;&#x1f49e;&#x1f49e;&#x1f49e;&#x1f49e;&#x1f49e;欢迎来到海神之光博客之家&#x1f49e;&#x1f49e;&#x1f49e;&#x1f49…...

丙午年正月廿二历史观

丙午年正月廿二历史观 走在时代大道上&#xff0c;过着当下真生活。 历史风云波涛起&#xff0c;春秋气候天地阔。 草木无声千百年&#xff0c;凡人有欲世代作。 行业精细世界网&#xff0c;城镇阡陌贪念落。 复踏南辕北辙事&#xff0c;再说刻舟求剑座。 何怕掩耳盗铃因&#…...

实测!AiPy + OpenClaw = AI界最佳拍档!

当下 AI 工具层出不穷&#xff0c;被大家称作 “小龙虾” 的 OpenClaw 凭借便捷性圈粉无数&#xff0c;在实际落地中却暴露出能力短板&#xff0c;单一操作难以完成从需求到成品的全流程交付俗话说&#xff0c;双拳难敌四手若是双拳 四手呢&#xff0c;那效率还不唰唰唰地提高…...

简述:openclaw应用二三事

简述&#xff1a;openclaw应用二三事 本blog地址&#xff1a;https://blog.csdn.net/hsg77...

AI进入封建时代:基于三省六部设计多agent

刷到一个有意思的项目&#xff0c;基于中国古代存在了 1400 年的“三省六部”制度设计 multi agent 协作架构。明太祖朱元璋废除的三省&#xff0c;在1400年之后赛博复活了。 AI朝廷一用明代六部制管理你的Al Agent团队 30分钟搭建多Agent 协作零代码古代治国智慧现代AI管理 …...

急疯了!手滑删除了核心单据,老板还催着汇报数据,从头补录真的太多了……

前两天小郑手滑操作&#xff0c;误删了近三个月的销售出库单数据&#xff0c;她瞬间慌神&#xff1a;这些单据是对账、核算成本的关键依据&#xff0c;少了不仅要重新核对海量数据&#xff0c;还可能影响月度结账&#xff0c;更怕耽误和客户的回款对接&#xff01;日常工作中&a…...

UniTac-NV开源:实现Xela与Contactile触觉传感器数据统一的新框架

在机器人感知领域&#xff0c;触觉传感器种类繁多&#xff0c;但算法往往高度依赖特定硬件&#xff0c;限制了技术复用与迁移。针对这一挑战&#xff0c;IROS 2025论文《UniTac-NV: A Unified Tactile Representation For Non-Vision-Based Tactile Sensors》提出了一种通用解决…...

华为OD机考双机位C卷 - 天然蓄水库 (Java)

天然蓄水库 2026华为OD机试双机位C卷 - 华为OD上机考试双机位C卷 华为OD机试双机位C卷真题目录(Java)点击查看: 【全网首发】2026华为OD机位C卷 机考真题题库含考点说明以及在线OJ(Java题解) 题目描述 公元2919年,人类终于发现了一颗宜居星球——X星。 现想在X星一片连绵…...

土地储备政策汇编

土地储备政策汇编 汇编时间: 2026年3月11日 资料来源: 自然资源部官网等 目录 土地储备管理办法&#xff08;2025年&#xff09;土地储备资金财务管理办法&#xff08;2018年&#xff09;关于加强土地储备与融资管理的通知&#xff08;2012年&#xff09;关于做好运用地方政府…...

智慧教育新生态:让 AI 真正服务于学生全面成长

在数字时代浪潮下&#xff0c;教育数字化已成为推动教育强国建设的重要突破口&#xff0c;而人工智能&#xff08;AI&#xff09;作为核心驱动力&#xff0c;正深刻重构教育的形态、流程与内涵。《教育强国建设规划纲要&#xff08;2024—2035年&#xff09;》明确提出&#xf…...

模型文件硬塞进 Git,GitHub 直接打回原形:使用Git-LFS管理大文件

醋孔啥投Streamlit 是一款专为数据科学家和机器学习工程师设计的 Python 库&#xff0c;可快速将数据脚本转换为交互式 Web 应用&#xff0c;无需前端开发经验&#xff0c;所以最近研究了一下&#xff0c;结合LangChain 1.0 实现了简单的智能问答前后端应用&#xff0c;大模型使…...

DevOps_node

瘸俦又惶一、前言 上一篇我们掌握了睿尔曼第三代机械臂的基础运动控制逻辑&#xff0c;而夹爪作为机械臂完成抓取、放置等作业的核心执行部件&#xff0c;是从“单纯运动”到“实际作业”的关键环节。相比于传统工业夹爪复杂的气动/电动控制调试&#xff0c;睿尔曼第三代机械臂…...

源码: 以下代码包含了一个数据库所有的 CRUD (增删改查)操作。 <div> <button id=“js_add_btn“>添 ...

路姿爬慰?? 文章目录- Conda是什么&#xff1f;不止是包管理器&#xff01; - ?? Conda vs Pip vs UV&#xff1a;三分天下&#xff0c;各显神通 - ??? Conda开发项目常用命令速查手册 - ?? 常见“翻车”现场与救援指南 - ?? 离线部署&#xff1a;没有网络也能搭建环…...

Web前端入门第 问:JavaScript 一个简单的 IndexedDB 数据库入门示例

匮甘霞肪概述 HOG行人检测是一种基于方向梯度直方图特征的计算机视觉目标检测技术&#xff0c;它通过计算图像局部区域的梯度方向直方图来描述目标的外观形状特征。该算法首先将图像分割为小的连通区域&#xff08;细胞单元&#xff09;&#xff0c;计算每个单元内像素的梯度方…...

做 AI 测试用例系统时,Prompt、MCP、Agent、Skills、OpenClaw 到底分别是什么?

&#x1f4dd; 面试求职&#xff1a; 「面试试题小程序」 &#xff0c;内容涵盖 测试基础、Linux操作系统、MySQL数据库、Web功能测试、接口测试、APPium移动端测试、Python知识、Selenium自动化测试相关、性能测试、性能测试、计算机网络知识、Jmeter、HR面试&#xff0c;命中…...

AI 自动逆向 JS 加密!自动抓密钥、出报告,彻底解放双手,解决抓包数据包加密难题

0x01 简介 前端JS加密、混淆、数据包加密&#xff0c;一直是逆向分析的痛点&#xff0c;手动抠代码、断点调试耗时费力。AI_JS_DEBUGGER 基于Chrome开发者协议&#xff08;CDP&#xff09;&#xff0c;以AI驱动实现全自动JS逆向分析&#xff0c;无需复杂操作&#xff0c;就能自…...

回顾一下WPF原生实现命令

抑嘲仁俾概述 在复杂的嵌入式世界中&#xff0c;程序代码和数据往往分散存储在多种不同的内存芯片里&#xff08;例如 Flash 、 SRAM 、外部 SDRAM等&#xff09;。分散加载&#xff08;Scatter-Loading&#xff09;文件&#xff0c;就像一张精准的“内存地图”&#xff0c;告…...

想用 Claude Code 做 AI 编程,很多人其实卡在了接入这一步

这两年&#xff0c;很多开发者已经不是在问“AI 编程值不值得用”&#xff0c;而是在问&#xff1a; 怎么才能尽快把它接进自己的开发流程里。 尤其是像 Claude Code 这类终端型 AI 编程工具&#xff0c;对会写代码的人来说吸引力很直接&#xff1a;不用切网页&#xff0c;不用…...

论生成式AI从“工具逻辑”向“精神秩序”的过渡!

生成式AI从“工具逻辑”向“精神秩序”的过渡&#xff0c;标志着其社会角色正发生本质性转变——从被动响应的“效率机器”&#xff0c;逐渐演变为主动参与、甚至重构人类认知、情感与价值系统的“精神性存在”。这一过渡是技术、社会与文化复杂互动的结果&#xff0c;可从以下…...

基于python的网络生鲜超市购物管理系统的设计与实现

前言 网络生鲜超市购物系统是一个集在线购买、支付、订单管理、会员服务等功能于一体的综合性电子商务平台。该系统旨在为广大用户提供便捷、高效的购书体验&#xff0c;同时帮助生鲜超市拓宽销售渠道&#xff0c;提升品牌影响力。 采用当前流行的B/S模式以及3层架构的设计思想…...

鸿蒙常见问题分析三十二:Column子组件超出容器边界

上周末&#xff0c;我正为一个新的HarmonyOS应用页面布局挠头。设计稿上是一个精美的信息卡片&#xff0c;外层Column容器设置了固定的宽高和圆角背景&#xff0c;里面嵌套了一个显示标题的Row。我按照设计实现了边框、内边距&#xff0c;一切看起来都很完美——直到我给内部的…...