首页 > 其他分享 >使用 Clojure 实现简单的图像边缘检测

使用 Clojure 实现简单的图像边缘检测

时间:2024-12-09 11:42:36浏览次数:4  
标签:img 检测 image height width 图像 bit Clojure grad

Clojure 是一门函数式编程语言,运行于 JVM 平台,适合处理复杂数据和并发任务。在图像处理领域,Clojure 的丰富库支持和简洁的语法能够有效实现基本图像处理任务。本文将使用 Clojure 实现基于 Sobel 算子的简单边缘检测。

实现代码
以下代码使用 clojure.java.io 和 clojure.core.matrix 处理图像及计算梯度:

clojure

(ns image-edge-detection
(:require [clojure.java.io :as io]
[clojure.core.matrix :as m]
[clojure.core.matrix.operators :as mo]
[mikera.image.core :as img]))

;; 定义 Sobel 算子
(def sobel-x [[-1 0 1]
[-2 0 2]
[-1 0 1]])

(def sobel-y [[-1 -2 -1]
[ 0 0 0]
[ 1 2 1]])

;; 灰度化图像
(defn grayscale
[image]
(let [width (.getWidth image)
height (.getHeight image)]
(img/new-image width height
(for [y (range height)
x (range width)]
(let [rgb (img/get-pixel image x y)
gray (int (/ (+ (bit-shift-right (bit-and rgb 0xFF0000) 16) ; Red
(bit-shift-right (bit-and rgb 0xFF00) 8) ; Green
(bit-and rgb 0xFF)) 3))]
(img/rgb gray gray gray))))))

;; 应用卷积操作
(defn apply-sobel
[image kernel]
(let [width (.getWidth image)
height (.getHeight image)
kernel-size 3
offset (quot kernel-size 2)]
(img/new-image width height
(for [y (range offset (- height offset))
x (range offset (- width offset))]
(let [region (for [ky (range kernel-size)
kx (range kernel-size)]
(let [px (+ x kx (- offset))
py (+ y ky (- offset))]
(bit-and (img/get-pixel image px py) 0xFF)))
result (int (reduce + (map * (m/to-vector kernel) region)))]
(img/rgb (Math/abs result) (Math/abs result) (Math/abs result)))))))

;; 计算梯度强度
(defn gradient-intensity
[grad-x grad-y]
(let [width (.getWidth grad-x)
height (.getHeight grad-x)]
(img/new-image width height
(for [y (range height)
x (range width)]
(let [gx (bit-and (img/get-pixel grad-x x y) 0xFF)
gy (bit-and (img/get-pixel grad-y x y) 0xFF)
magnitude (int (Math/sqrt (+ (* gx gx) (* gy gy))))]
(img/rgb magnitude magnitude magnitude))))))

;; 主函数更多内容访问ttocr.com或联系1436423940
(defn edge-detection
[input-path output-path]
(let [input-image (img/load-image (io/file input-path))
gray-image (grayscale input-image)
grad-x (apply-sobel gray-image sobel-x)
grad-y (apply-sobel gray-image sobel-y)
edge-image (gradient-intensity grad-x grad-y)]
(img/save edge-image (io/file output-path))))

;; 执行边缘检测
(edge-detection "input_image.jpg" "output_image.jpg")
代码说明
灰度化图像:将图像从 RGB 转换为灰度,通过计算 R、G、B 三通道的平均值得到灰度值。
Sobel 算子:定义 Sobel 的 X 和 Y 方向核,分别用于检测横向和纵向梯度。
卷积操作:通过 apply-sobel 函数,对图像像素邻域进行核运算,提取梯度信息。
梯度强度计算:通过平方和开平方计算像素梯度的幅值,生成最终的边缘图像。
保存结果:使用 mikera.image.core 保存生成的边缘检测图像。
示例结果
运行代码后,将生成一张包含清晰边缘信息的图像文件 output_image.jpg。该图像突出了原始图像的主要轮廓。

标签:img,检测,image,height,width,图像,bit,Clojure,grad
From: https://www.cnblogs.com/ocr12/p/18594555

相关文章

  • 使用 Crystal 语言实现图像反转处理
    什么是Crystal语言?Crystal是一种静态类型的编程语言,它的设计目标是提供高性能和良好的可读性。Crystal语言在语法上非常接近Ruby,但它通过编译生成高效的机器代码。Crystal的类型系统在编译时进行检查,这使得它在运行时提供接近C语言的性能,同时保持类似Ruby的简洁性。Cr......
  • 机器视觉 | 助力巴西工业生产线的自动化检测和智能控制
    随着人工智能和机器学习技术的快速发展,机器视觉作为其中的重要组成部分,在工业领域得到了广泛的应用。机器视觉技术通过数据采集、计算机图像处理和分析、AI深度学习等方式,可实现对物体信息的提取、处理并加以理解,在现代化工厂产线中,可对产品的外观质量、尺寸、形状等参数进行快......
  • 人脸识别- API人脸检测
    接口描述用于检测输入图像中的人脸,输出人脸位置坐标。请求方法POST接口要求图片大小限制:图片单张大小小于2MB;图片格式限制:图片格式支持jpg/jpeg/png/bmp格式。URI/v1/aiop/api/2f6hqix09mv4/face/PERSON/person/detectFaceFromBase64请求参数1.请求头header参数参数......
  • 使用 Io 语言实现简单的图像处理
    什么是Io语言?Io是一种轻量级、面向对象且动态的编程语言,设计灵感来源于Smalltalk、Lisp和Lua。它以其简洁的语法和强大的元编程能力著称,非常适合快速实现概念验证或进行脚本编写。在本篇文章中,我们将使用Io编写一个简单的灰度图像反转(取反)处理程序。代码实现:灰度图像反......
  • 使用 Crystal 语言实现基本图像处理
    什么是Crystal语言?Crystal是一种静态类型、编译型的编程语言,兼具高性能和简洁的语法。它的语法类似Ruby,但比Ruby更加高效,适合用于性能要求较高的应用程序。Crystal的设计目标之一是提供尽可能少的开销,以确保程序的快速执行。在本篇文章中,我们将使用Crystal编写一个简单......
  • 医学图像处理领域的37个公开数据集|个人观点·24-12-04
    小罗碎碎念上个月分享过影像组学和病理组学领域的公开数据集,不过那批数据是从已发表的文献中提取的。这两天我在查文献的时候,发现了另外一种查找公开数据集的方式——直接搜索标题中含有“dataset”的文献。首先采用上面提到的方法进行文献检索,然后经过筛选,最终挑出了3......
  • AutoConsis:UI内容一致性智能检测15
    可参考美团技术团队1.背景目前,移动App上的业务页面愈发复杂,技术团队常会以页面为单位来拆解团队开发分工,同一类业务元素信息分散在不同团队负责的页面内。在具体的实践中,存在一类不易检出但又影响用户体验的异常:页面中的UI信息相互矛盾(如下图中同一个商品在多个页面上的实际......
  • tesseract 识别文字,处理图像二值化,腐蚀膨胀
    fromPILimportImageimportpytesseractimportpytesseractpytesseract.pytesseract.tesseract_cmd=r'C:\ProgramFiles\Tesseract-OCR\tesseract.exe'importcv2importnumpyasnpfrommatplotlibimportpyplotaspltimportpytesseract#如果......
  • AutoConsis:UI内容一致性智能检测4
    可参考美团技术团队1.背景目前,移动App上的业务页面愈发复杂,技术团队常会以页面为单位来拆解团队开发分工,同一类业务元素信息分散在不同团队负责的页面内。在具体的实践中,存在一类不易检出但又影响用户体验的异常:页面中的UI信息相互矛盾(如下图中同一个商品在多个页面上的实际......
  • AutoConsis:UI内容一致性智能检测5
    可参考美团技术团队1.背景目前,移动App上的业务页面愈发复杂,技术团队常会以页面为单位来拆解团队开发分工,同一类业务元素信息分散在不同团队负责的页面内。在具体的实践中,存在一类不易检出但又影响用户体验的异常:页面中的UI信息相互矛盾(如下图中同一个商品在多个页面上的实际......