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

零基础数据结构与算法——第七章:算法实践与工程应用-图像处理

7.4.1 搜索引擎

7.4.2 推荐系统

7.4.3 金融算法

7.4.4 图像处理

图像处理是算法在计算机视觉领域的应用,包括图像滤波、特征提取、目标检测等。

图像处理中使用的算法:

  1. 图像滤波
public class ImageFilter {public static int[][] applyGaussianBlur(int[][] image, int radius) {int height = image.length;int width = image[0].length;// 创建高斯核double[][] kernel = createGaussianKernel(radius);// 应用滤波int[][] result = new int[height][width];for (int i = 0; i < height; i++) {for (int j = 0; j < width; j++) {result[i][j] = applyKernel(image, i, j, kernel);}}return result;}private static double[][] createGaussianKernel(int radius) {int size = 2 * radius + 1;double sigma = radius / 3.0;double[][] kernel = new double[size][size];double sum = 0;for (int i = 0; i < size; i++) {for (int j = 0; j < size; j++) {int x = i - radius;int y = j - radius;kernel[i][j] = Math.exp(-(x * x + y * y) / (2 * sigma * sigma));sum += kernel[i][j];}}// 归一化for (int i = 0; i < size; i++) {for (int j = 0; j < size; j++) {kernel[i][j] /= sum;}}return kernel;}private static int applyKernel(int[][] image, int row, int col, double[][] kernel) {int height = image.length;int width = image[0].length;int radius = kernel.length / 2;double sum = 0;for (int i = 0; i < kernel.length; i++) {for (int j = 0; j < kernel[0].length; j++) {int r = row + i - radius;int c = col + j - radius;// 边界处理if (r >= 0 && r < height && c >= 0 && c < width) {sum += image[r][c] * kernel[i][j];}}}return (int) Math.round(sum);}
}
  1. 边缘检测
public class EdgeDetection {public static int[][] applySobel(int[][] image) {int height = image.length;int width = image[0].length;// Sobel算子int[][] sobelX = {{-1, 0, 1},{-2, 0, 2},{-1, 0, 1}};int[][] sobelY = {{-1, -2, -1},{0, 0, 0},{1, 2, 1}};// 应用Sobel算子int[][] result = new int[height][width];for (int i = 1; i < height - 1; i++) {for (int j = 1; j < width - 1; j++) {int gx = applyKernel(image, i, j, sobelX);int gy = applyKernel(image, i, j, sobelY);// 计算梯度幅值int magnitude = (int) Math.sqrt(gx * gx + gy * gy);// 限制在0-255范围内result[i][j] = Math.min(255, magnitude);}}return result;}private static int applyKernel(int[][] image, int row, int col, int[][] kernel) {int sum = 0;for (int i = 0; i < 3; i++) {for (int j = 0; j < 3; j++) {sum += image[row + i - 1][col + j - 1] * kernel[i][j];}}return sum;}
}
http://www.dtcms.com/a/337334.html

相关文章:

  • LLM - MCP传输协议解读:从SSE的单向奔赴到Streamable HTTP的双向融合
  • JavaScript 原型继承与属性访问规则详解
  • ES入门教程
  • CSDN转PDF【无水印且免费!!!】
  • linux 内核 - 进程地址空间的数据结构
  • 【STM32】STM32H750 CubeMX 配置 USB CDC 虚拟串口笔记
  • 保姆级教学:使用 Jenkins 部署前端项目(2025 年最新版)
  • 基于JS实现的中国象棋AI系统:多模块协同决策与分析
  • ffmpeg编译
  • 音视频面试题集锦第 26 期
  • 计算机网络-IPv6
  • 679. 24 点游戏
  • Android Cutout(屏幕挖孔)详解
  • ubuntu 编译ffmpeg6.1 增加drawtext,libx264,libx265等
  • Leetcode 3648. Minimum Sensors to Cover Grid
  • OCR库pytesseract安装保姆级教程
  • LeetCode:无重复字符的最长子串
  • SQLite 加密与不加密性能对比与优化实践
  • Opsqueue:为重负载而生的轻量级批处理队列,已开源!
  • 视频因为264问题无法网页播放,解决方案之一:转化视频
  • 智创飞跃|2025 Google 开发者大会伴你成长精进
  • 兴趣爱好——虾哥开源小智AI机器人搭建(丐版—最低成本)ESP32开发板 MicroPython V1.0.0 Rev1
  • 嵌入式Linux学习 -- 进程和线程4
  • 三高架构杂谈
  • Ansible 自动化运维实践笔记:Jinja2 模板、LNMP+WordPress 部署与大项目管理
  • 飞算JavaAI智慧校园场景实践:从校园管理到师生服务的全链路技术革新
  • 【C++✨】多种 C++ 解法固定宽度右对齐输出(每个数占 8 列)
  • 常见的光源频闪控制方式
  • GitHub 热榜项目 - 日榜(2025-08-18)
  • 为什么有些相机“即插即用”,而有些则需要采集卡?