一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

淺析Java中的圖像處理操作

jf_78858299 ? 來源:深度學(xué)習(xí)與計(jì)算機(jī)視覺 ? 作者:磐懟懟 ? 2023-02-08 15:10 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

我們將在本文中介紹以下高級(jí)圖像處理操作:

  • Canny 邊緣檢測
  • 輪廓和形狀識(shí)別

Canny 邊緣檢測 :Canny 邊緣檢測是一種流行的邊緣檢測算法。它是由 John F. Canny 在 1986 年開發(fā)的。它是一個(gè)多階段算法,我們將按如下方式經(jīng)歷每個(gè)階段:

  1. 噪聲抑制: 第一步是使用高斯平滑從圖像中去除噪聲,這涉及使用高斯核,其中靠近核中心的像素被賦予比遠(yuǎn)處像素更多的權(quán)重。
  2. 梯度計(jì)算 :應(yīng)用Sobel 濾波器計(jì)算圖像的梯度以計(jì)算邊緣強(qiáng)度和方向,該濾波器突出顯示 x 和 y 軸上的強(qiáng)度變化。
  3. Non-Maximum Suppression: Non-Maximum Suppression通過遍歷上一步生成的梯度矩陣中的所有值來尋找邊緣方向強(qiáng)度更大的像素,從而減少邊緣的厚度。
  4. 雙閾值滯后: 最后一步使用輸入?yún)?shù)下閾值和上限閾值來過濾掉潛在邊緣,根據(jù)以下標(biāo)準(zhǔn)丟棄不相關(guān)的邊緣:

如果像素梯度值高于上限閾值,則像素被接受為邊緣。

如果像素梯度值低于下限閾值,則像素被拒絕。

如果像素梯度值介于兩個(gè)閾值之間,則僅當(dāng)它連接到高于閾值上限的像素時(shí)才會(huì)被接受。

ImgProc類為 Canny 邊緣檢測提供了一個(gè)Canny方法,該方法采用以下參數(shù):

  • Source Image: Mat
  • Output edges: Mat
  • Lower Threshold: double
  • Upper Threshold: double

public static Mat cannyEdges(Mat img){
Mat canny = new Mat();
Imgproc.Canny(img,canny,30,100);
return canny;
}

Canny 邊緣檢測

圖片

原始圖像

圖片

Canny 邊緣檢測

圖片

雙邊濾波圖像上的 Canny 邊緣檢測

注意:Canny 邊緣檢測算法基于梯度,因此對(duì)圖像噪聲高度敏感。因此,在灰度圖像上應(yīng)用 Canny 邊緣檢測是一種很好的做法。

**輪廓:**輪廓可以定義為連接沿邊界具有相同強(qiáng)度的所有連續(xù)點(diǎn)的曲線。它們對(duì)于形狀分析和對(duì)象檢測很有用。

使用二值圖像查找輪廓是一種很好的做法。二值圖像是這樣的圖像,其中每個(gè)像素只能有兩個(gè)可能的強(qiáng)度值(0 表示黑色,1 或 255 表示白色)。

ImgProc 類提供了一種用于生成二值圖像的閾值方法,該方法使用以下參數(shù):

  • Source Image: Mat - grayscale image
  • Output Image: Mat
  • Threshold : double: 如果像素值小于閾值,則設(shè)置為 0。
  • Maximum:雙精度 - 分配給超過閾值的像素的最大值。
  • Type of threshold:int - OpenCV 提供不同類型的閾值技術(shù),如 OTSU 、TOZERO等。

public static Mat convertToBinary(Mat img){
Mat binImg = new Mat();
Imgproc.threshold(img,binImg,125 ,255,Imgproc.THRESH_BINARY);
return binImg;
}

圖像轉(zhuǎn)換為二進(jìn)制

圖片

二進(jìn)制圖像

尋找輪廓:ImgProc 類提供了一個(gè)findContours方法,該方法接受以下輸入?yún)?shù):

  • Image:Mat - 二進(jìn)制圖像
  • Contours : List- 檢測到的輪廓存儲(chǔ)在這個(gè)列表中
  • Hierarchy : Mat - 存儲(chǔ)有關(guān)圖像拓?fù)涞男畔?/li>
  • Contour Retrieval Mode:int - OpenCV 提供以下檢索模式:
    • RETR_LIST(0) :檢索所有輪廓而不保持層次關(guān)系。
    • RETR_EXTERNAL(1): 僅檢索所有極端外輪廓。
    • RETR_CCOMP(2): 檢索所有輪廓并將它們排列到 2 級(jí)層次結(jié)構(gòu)中。對(duì)象的外部輪廓放置在層次 1 中,對(duì)象內(nèi)部的孔的輪廓放置在層次 2 中。
    • RETR_TREE(3): 檢索所有輪廓并創(chuàng)建完整的層次結(jié)構(gòu)列表。
  • Contour Approximation Method : int - 近似方法指定存儲(chǔ)邊界坐標(biāo)的方式。
    • CHAIN_APPROX_NONE: 存儲(chǔ)所有邊界點(diǎn)。
    • CHAIN_APPROX_SIMPLE :去除冗余點(diǎn)并壓縮輪廓;例如:對(duì)于一條線,存儲(chǔ)兩個(gè)端點(diǎn)。

public static void findAndDrawContours(Mat binImg,Mat org){
List contourList = new ArrayList();
Imgproc.findContours(binImg,contourList,new Mat(), Imgproc.RETR_LIST, Imgproc.CHAIN_APPROX_SIMPLE);
Imgproc.drawContours(org, contourList, -1, new Scalar(50, 205, 50), 2);
HighGui.imshow("Contours",org);
HighGui.waitKey();
}

查找和繪制輪廓

繪制輪廓: ImgProc 類提供了一個(gè)drawContours方法,該方法使用以下參數(shù):

  • Image:Mat - 目標(biāo)圖像
  • Contour List:List< MatOfPoint>
  • Contour Index: int - 要繪制的輪廓索引,負(fù)值表示所有輪廓都已繪制。
  • Color:Scalar - 輪廓的顏色。
  • Thickness:int - 邊界線的厚度。

圖片

輪廓

使用輪廓進(jìn)行形狀檢測: 我們可以使用輪廓來根據(jù)近似曲線中的周長、面積和陣列點(diǎn)的數(shù)量來檢測形狀。ImgProc 類提供了一個(gè)approxPolyDP方法,該方法返回基于輪廓的近似曲線并使用以下參數(shù):

  • curve:MatOfPoint2f
  • approxCurve: MatOfPoint2f - 輸出曲線
  • epsilon: double - Epsilon 指定近似精度。這是原始曲線與其近似值之間的最大距離,我們可以使用 ImgProc arcLength 方法(返回曲線長度或周長)進(jìn)行優(yōu)化。
  • closed:布爾值 - 如果近似曲線是閉合的,則為 true,否則為 false。

public static void shapeDetection(Mat binImg,Mat org){
List contourList = new ArrayList();
List selectedContours = new ArrayList<>();
Imgproc.findContours(binImg,contourList,new Mat(), Imgproc.RETR_EXTERNAL, Imgproc.CHAIN_APPROX_SIMPLE);
for(int i=0;i MatOfPoint2f point = new MatOfPoint2f();
point.fromList(contourList.get(i).toList());
MatOfPoint2f approxCurve = new MatOfPoint2f();
double parameter = Imgproc.arcLength(point, true);
Imgproc.approxPolyDP(point, approxCurve, parameter * 0.02, true);
long total = approxCurve.total();
//Detecting Rectangle Shape
if (total == 4) {
double area = Imgproc.contourArea(contourList.get(i));
//rectangle with area greater than 500
if(area>500)
selectedContours.add(contourList.get(i));
}
}
Imgproc.drawContours(org, selectedContours, -1, new Scalar(50, 205, 50), 3);
HighGui.imshow("Contours",org);
HighGui.waitKey();
}

使用輪廓進(jìn)行形狀檢測

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 圖像處理
    +關(guān)注

    關(guān)注

    27

    文章

    1327

    瀏覽量

    57919
  • 邊緣檢測
    +關(guān)注

    關(guān)注

    0

    文章

    94

    瀏覽量

    18399
  • 噪聲抑制
    +關(guān)注

    關(guān)注

    0

    文章

    29

    瀏覽量

    12326
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    Java的常用異常處理方法 java推薦

    Java,異常情況分為Exception(異常)和Error(錯(cuò)誤)兩大類,Java異常通常是指程序運(yùn)行過程中出現(xiàn)的非正常情況,如用戶輸入錯(cuò)誤、除數(shù)為零、需要處理的文件不存在、數(shù)組
    發(fā)表于 01-19 17:26

    圖像處理ROI和繪圖是如何操作的?

    圖像處理ROI和繪圖的操作
    發(fā)表于 11-09 07:01

    基于Java技術(shù)的法醫(yī)圖像邊緣檢測的研究

    在醫(yī)學(xué)圖像,在相對(duì)較小的區(qū)域內(nèi)圖像頻率的陡峭變化反映了目標(biāo)對(duì)象的邊緣信息,基于Sobel 算子的梯度向量操作對(duì)低噪聲的醫(yī)學(xué)圖像的邊緣提取效
    發(fā)表于 07-30 09:23 ?18次下載

    淺析監(jiān)控圖像處理系統(tǒng)的軟件結(jié)構(gòu)

    在現(xiàn)在的面向計(jì)算機(jī)內(nèi)存的圖像處理系統(tǒng)里,一般采用Windows操作系統(tǒng)、PCI總線、單屏操作方式,而且又融合了圖像通信技術(shù)。
    發(fā)表于 01-20 15:00 ?1743次閱讀
    <b class='flag-5'>淺析</b>監(jiān)控<b class='flag-5'>圖像</b><b class='flag-5'>處理</b>系統(tǒng)的軟件結(jié)構(gòu)

    JAVA教程之從網(wǎng)絡(luò)取得圖像

    JAVA教程之從網(wǎng)絡(luò)取得圖像,很好的JAVA的資料,快來學(xué)習(xí)吧
    發(fā)表于 04-11 17:28 ?5次下載

    圖像處理基本算法操作

    直方圖是圖像處理另一重要處理過程,它反映圖像不同像素值的統(tǒng)計(jì)信息。從這句話我們可以了解到直方
    的頭像 發(fā)表于 08-14 15:05 ?6099次閱讀
    <b class='flag-5'>圖像</b><b class='flag-5'>處理</b>基本算法<b class='flag-5'>操作</b>

    圖像處理教程之圖像的鄰域操作資料說明

    所定義的所有鄰域應(yīng)該具有相同的大小。鄰域運(yùn)算與點(diǎn)運(yùn)算一起形成了最基本、最重要的圖像處理方法。鄰域操作包括兩種類型:滑動(dòng)鄰域操作和分離鄰域操作
    發(fā)表于 03-08 15:58 ?12次下載
    <b class='flag-5'>圖像</b><b class='flag-5'>處理</b>教程之<b class='flag-5'>圖像</b>的鄰域<b class='flag-5'>操作</b>資料說明

    10個(gè)Java編程異常處理最佳實(shí)踐

    這里是我收集的10個(gè)Java編程中進(jìn)行異常處理的10最佳實(shí)踐。在Java編程對(duì)于檢查異常有褒有貶,強(qiáng)制處理異常是一門語言的功能。在本文中,
    的頭像 發(fā)表于 05-03 17:49 ?2159次閱讀

    JAVANIO通過MappedByteBuffer操作大文件

    java io操作通常采用BufferedReader,BufferedInputStream等帶緩沖的IO類處理大文件,不過java n
    的頭像 發(fā)表于 05-05 23:42 ?3756次閱讀

    視覺圖像系統(tǒng),ROI如何做顯示處理以及具體操作步驟

    處理以及具體操作步驟。 如何確保ROI感興趣的區(qū)域,在我們選定的測量范圍之內(nèi)呢?大致有4個(gè)以下步驟: 1)基于標(biāo)準(zhǔn)圖像目標(biāo)的特征,確定參考坐標(biāo)系; 2)在標(biāo)準(zhǔn)圖像
    的頭像 發(fā)表于 01-27 09:39 ?1.1w次閱讀
    視覺<b class='flag-5'>圖像</b>系統(tǒng)<b class='flag-5'>中</b>,ROI如何做顯示<b class='flag-5'>處理</b>以及具體<b class='flag-5'>操作</b>步驟

    OpenCV實(shí)現(xiàn)了圖像形態(tài)學(xué)什么常見操作?

    圖像形態(tài)學(xué)是圖像處理的分支學(xué)科,在二值圖像處理占有重要地位、OpenCV
    的頭像 發(fā)表于 05-27 14:11 ?1664次閱讀
    OpenCV<b class='flag-5'>中</b>實(shí)現(xiàn)了<b class='flag-5'>圖像</b>形態(tài)學(xué)什么常見<b class='flag-5'>操作</b>?

    FPGA如何使用Verilog處理圖像

    的完整 Verilog 代碼 。 在這個(gè)FPGA Verilog項(xiàng)目中,一些簡單的處理操作都是在Verilog實(shí)現(xiàn)的,比如反相、亮度控制和閾值操作
    的頭像 發(fā)表于 09-23 15:50 ?6612次閱讀

    java實(shí)時(shí)圖像處理庫教程演示

    項(xiàng)目介紹 項(xiàng)目名稱:cv4j 所屬系列:openharmony的第三方組件適配移植 功能:CV in Java,純 java 實(shí)時(shí)圖像處理庫 項(xiàng)目移植狀態(tài):主功能完成 調(diào)用差異:無
    發(fā)表于 03-23 09:19 ?2次下載

    形態(tài)學(xué)運(yùn)算與仿真:圖像處理形態(tài)學(xué)操作的簡單解釋

    形態(tài)學(xué)是圖像處理領(lǐng)域的一個(gè)分支,主要用于描述和處理圖像的形狀和結(jié)構(gòu)。形態(tài)學(xué)可以用于提取圖像
    的頭像 發(fā)表于 05-23 15:52 ?1373次閱讀
    形態(tài)學(xué)運(yùn)算與仿真:<b class='flag-5'>圖像</b><b class='flag-5'>處理</b><b class='flag-5'>中</b>形態(tài)學(xué)<b class='flag-5'>操作</b>的簡單解釋

    java對(duì)clob類型數(shù)據(jù)怎么處理

    處理CLOB類型數(shù)據(jù)在Java是一項(xiàng)非常常見和重要的任務(wù)。CLOB(Character Large Object)是一種用于存儲(chǔ)大量字符數(shù)據(jù)的數(shù)據(jù)類型,通常用于存儲(chǔ)大型文本文檔、XML文檔
    的頭像 發(fā)表于 11-21 10:30 ?3260次閱讀