当前位置: 首页 > 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.lryc.cn/news/624411.html

相关文章:

  • Qt5核心模块详细讲解
  • Docker学习--认识Docker
  • 图论Day5学习心得
  • 码上爬第十八题【协程+webpack】
  • IDE开发系列(1)基于QT的简易IDE框架设计
  • Qt第十讲-使用快捷键
  • 面试问题详解三:Qt 的信号与槽连接、编译机制流程
  • 宋红康 JVM 笔记 Day05|运行时数据区内部结构、JVM中的线程说明、程序计数器
  • AR技术为消防救援装上“智能透视眼”
  • 【iOS】锁的原理
  • WPF中BindingList<T>和List<T>
  • C++ 指针与 C 语言指针的深度比较
  • MATLAB的实用字母识别系统实现含GUI界面
  • Image and Video Tokenization with Binary Spherical Quantization 论文阅读
  • 华为GaussDB的前世今生:国产数据库崛起之路
  • Java面试宝典:Redis高级特性和应用(发布 订阅、Stream)
  • 【Java基础常见辨析】重载与重写,深拷贝与浅拷贝,抽象类与普通类
  • 15.web api 6
  • 个人笔记SpringMVC
  • Klipper-delta_calibrate模块
  • Read View 在 MVCC 里如何工作的?
  • 《C++异常处理完全指南》
  • 如何在 Ubuntu 24.04 或 22.04 LTS 上安装 PowerShell
  • Spring Boot 实用小技巧:多级缓存(Caffeine + Redis)- 第545篇
  • 【网络安全实验报告】实验四: PGP邮件加密软件应用
  • C++STL之list详解
  • 【Linux指南】gcc/g++编译器:从源码到可执行文件的全流程解析
  • 8.18 机器学习-决策树(1)
  • goland怎么取消自动删除未使用的包
  • SWMM排水管网水力、水质建模及在海绵与水环境中的应用技术-模拟降雨和污染物质经过地面、排水管网、蓄水和处理