亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > Java > 正文

java圖像處理之倒角距離變換

2024-07-13 10:16:58
字體:
來源:轉載
供稿:網友

圖像處理中的倒角距離變換(Chamfer Distance Transform)在對象匹配識別中經常用到,算法基本上是基于3x3的窗口來生成每個像素的距離值,分為兩步完成距離變換,第一步從左上角開始,從左向右、從上到下移動窗口掃描每個像素,檢測在中心像素x的周圍0、1、2、3四個像素,保存最小距離與位置作為結果,圖示如下:

java,倒角,距離變換,java二值圖像倒角距離變換,java倒角距離

第二步從底向上、從右向左,對每個像素,檢測相鄰像素4、5、6、7保存最小距離與位置作為結果,如圖示所:

java,倒角,距離變換,java二值圖像倒角距離變換,java倒角距離

完成這兩步以后,得到的結果輸出即為倒角距離變換的結果。完整的圖像倒角距離變換代碼實現可以分為如下幾步:

1.對像素數組進行初始化,所有背景顏色像素點初始距離為無窮大,前景像素點距離為0

2.開始倒角距離變換中的第一步,并保存結果

3.基于第一步結果完成倒角距離變換中的第二步

4.根據距離變換結果顯示所有不同灰度值,形成圖像

最終結果顯示如下(左邊表示原圖、右邊表示CDT之后結果)

java,倒角,距離變換,java二值圖像倒角距離變換,java倒角距離

完整的二值圖像倒角距離變換的源代碼如下:

package com.gloomyfish.image.transform;  import java.awt.Color; import java.awt.image.BufferedImage; import java.util.Arrays;  import com.gloomyfish.filter.study.AbstractBufferedImageOp;  public class CDTFilter extends AbstractBufferedImageOp {   private float[] dis; // nn-distances   private int[] pos; // nn-positions, 32 bit index   private Color bakcgroundColor;      public CDTFilter(Color bgColor)   {     this.bakcgroundColor = bgColor;   }    @Override   public BufferedImage filter(BufferedImage src, BufferedImage dest) {     int width = src.getWidth();     int height = src.getHeight();      if (dest == null)       dest = createCompatibleDestImage(src, null);      int[] inPixels = new int[width * height];     pos = new int[width * height];     dis = new float[width * height];     src.getRGB(0, 0, width, height, inPixels, 0, width);     // 隨機生成距離變換點     int index = 0;     Arrays.fill(dis, Float.MAX_VALUE);     int numOfFC = 0;     for (int row = 0; row < height; row++) {       for (int col = 0; col < width; col++) {         index = row * width + col;         if (inPixels[index] != bakcgroundColor.getRGB()) {           dis[index] = 0;           pos[index] = index;           numOfFC++;         }       }     }     final float d1 = 1;     final float d2 = (float) Math.sqrt(d1 * d1 + d1 * d1);     System.out.println(numOfFC);     float nd, nd_tmp;     int i, in, cols, rows, nearestPixel;      // 1 2 3     // 0 i 4     // 7 6 5     // first pass: forward -> L->R, T-B     for (rows = 1; rows < height - 1; rows++) {       for (cols = 1; cols < width - 1; cols++) {         i = rows * width + cols;          nd = dis[i];         nearestPixel = pos[i];         if (nd != 0) { // skip background pixels           in = i;            in += -1; // 0           if ((nd_tmp = d1 + dis[in]) < nd) {             nd = nd_tmp;             nearestPixel = pos[in];           }            in += -width; // 1           if ((nd_tmp = d2 + dis[in]) < nd) {             nd = nd_tmp;             nearestPixel = pos[in];           }            in += +1; // 2           if ((nd_tmp = d1 + dis[in]) < nd) {             nd = nd_tmp;             nearestPixel = pos[in];           }            in += +1; // 3           if ((nd_tmp = d2 + dis[in]) < nd) {             nd = nd_tmp;             nearestPixel = pos[in];           }            dis[i] = nd;           pos[i] = nearestPixel;         }       }     }      // second pass: backwards -> R->L, B-T     // exactly same as first pass, just in the reverse direction     for (rows = height - 2; rows >= 1; rows--) {       for (cols = width - 2; cols >= 1; cols--) {         i = rows * width + cols;          nd = dis[i];         nearestPixel = pos[i];         if (nd != 0) {           in = i;            in += +1; // 4           if ((nd_tmp = d1 + dis[in]) < nd) {             nd = nd_tmp;             nearestPixel = pos[in];           }            in += +width; // 5           if ((nd_tmp = d2 + dis[in]) < nd) {             nd = nd_tmp;             nearestPixel = pos[in];           }            in += -1; // 6           if ((nd_tmp = d1 + dis[in]) < nd) {             nd = nd_tmp;             nearestPixel = pos[in];           }            in += -1; // 7           if ((nd_tmp = d2 + dis[in]) < nd) {             nd = nd_tmp;             nearestPixel = pos[in];           }            dis[i] = nd;           pos[i] = nearestPixel;          }       }     }      for (int row = 0; row < height; row++) {       for (int col = 0; col < width; col++) {         index = row * width + col;         if (Float.MAX_VALUE != dis[index]) {           int gray = clamp((int) (dis[index]));           inPixels[index] = (255 << 24) | (gray << 16) | (gray << 8)               | gray;         }       }     }     setRGB(dest, 0, 0, width, height, inPixels);     return dest;   }    private int clamp(int i) {     return i > 255 ? 255 : (i < 0 ? 0 : i);   }  } 

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VeVb武林網。


注:相關教程知識閱讀請移步到JAVA教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
成人亲热视频网站| 91精品国产亚洲| 久久国产精品久久久久久| 久久人人爽人人| 国产精品视频永久免费播放| 国产亚洲精品久久久久久牛牛| 九九精品在线视频| 一区二区亚洲欧洲国产日韩| 欧美性猛xxx| 国产欧亚日韩视频| 精品视频在线播放| 欧美限制级电影在线观看| 国产一区玩具在线观看| 亚洲成人黄色在线观看| 青草青草久热精品视频在线网站| 精品一区二区电影| 亚洲综合大片69999| 亚洲18私人小影院| 精品中文字幕在线2019| 亚洲丝袜一区在线| 91精品国产91久久| 欧美亚洲成人精品| 国产精品99久久久久久久久久久久| 国产成人精品一区二区| 亚洲欧美在线一区二区| 深夜福利日韩在线看| 日韩中文字幕在线观看| 久久国内精品一国内精品| 欧美视频在线观看免费网址| 亚洲欧美国产精品专区久久| 亚洲欧美日韩一区在线| 狠狠躁夜夜躁久久躁别揉| 九色成人免费视频| 亚洲成人av片| 精品视频一区在线视频| 欧美孕妇毛茸茸xxxx| 亚洲国产精品va在线看黑人| 久久人人爽人人爽人人片av高清| 久久成人这里只有精品| 国产综合香蕉五月婷在线| 欧美激情综合色综合啪啪五月| 国产精品igao视频| 欧美怡红院视频一区二区三区| 国产精品三级美女白浆呻吟| 欧美亚洲伦理www| 成人黄色免费在线观看| 亚洲精品动漫久久久久| 久久久噜久噜久久综合| 欧美激情综合色| 精品国产91乱高清在线观看| 国产玖玖精品视频| 国产精品极品在线| 国产精品jvid在线观看蜜臀| 国产日韩欧美影视| 欧美极品少妇xxxxⅹ喷水| 成人午夜激情网| 97超级碰在线看视频免费在线看| 成人午夜高潮视频| 欧美中文在线观看| 国产欧美一区二区三区在线| 亚洲免费一在线| 欧美高清激情视频| 国产欧美日韩丝袜精品一区| 91高清免费在线观看| 国产亚洲免费的视频看| 久久久久久综合网天天| 最新国产精品亚洲| 亚洲激情视频在线播放| 91精品国产成人| 欧美猛少妇色xxxxx| 国产精品久久久久高潮| 久久久久久伊人| 日韩中文字幕精品| 亚洲人线精品午夜| 久久精品国产成人精品| 色yeye香蕉凹凸一区二区av| 国产精品日韩久久久久| 91av在线免费观看| 欧美激情一级精品国产| 中文字幕亚洲无线码在线一区| 九色精品免费永久在线| 国产美女扒开尿口久久久| 精品国产一区二区三区久久| 中文字幕亚洲欧美日韩在线不卡| 日本韩国在线不卡| 国产精品久久久久久久av电影| 51视频国产精品一区二区| 久久天天躁狠狠躁夜夜av| 在线观看日韩专区| 久久99精品国产99久久6尤物| 久久成年人免费电影| 国产欧美精品一区二区| 欧美另类交人妖| 欧美亚洲视频在线观看| 亚洲日韩欧美视频一区| 国产精品视频一区二区三区四| 亚洲欧美日韩精品久久亚洲区| 青青a在线精品免费观看| 国产精品久久久久久久久借妻| 91极品女神在线| 日韩欧美在线免费| 九九热精品在线| 亚洲精品电影网站| 欧美资源在线观看| 亚洲国产小视频在线观看| 91精品国产综合久久香蕉的用户体验| 国产精品久久久久久久午夜| 欧美激情视频在线观看| 欧美国产日产韩国视频| 亚洲免费电影一区| 亚洲男人天堂2019| 欧美精品一区三区| 青青在线视频一区二区三区| 久久久久久久久久久av| 欧美丝袜一区二区三区| 91久久国产综合久久91精品网站| 欧美成人精品在线视频| 久久国产精品首页| 日韩电视剧在线观看免费网站| 亚洲自拍小视频免费观看| 成人免费淫片aa视频免费| 欧美视频13p| 国产一区二区三区四区福利| 日韩中文字幕精品视频| 日韩一中文字幕| 国产一区二区免费| 不卡在线观看电视剧完整版| 69久久夜色精品国产7777| 久久久久久这里只有精品| 国产成人精品综合| 九九热这里只有精品免费看| 久久视频在线免费观看| 亚洲va电影大全| 在线精品播放av| 欧美日韩国产一中文字不卡| 精品国产一区二区三区久久狼黑人| 亚洲自拍偷拍色片视频| 欧美激情精品在线| 精品免费在线观看| 亚洲色图五月天| 国产亚洲精品美女久久久| 在线看福利67194| 国产成人鲁鲁免费视频a| 成人在线免费观看视视频| 中文字幕精品一区久久久久| 欧美专区第一页| 国产suv精品一区二区三区88区| 亚洲成人精品视频| 久久九九亚洲综合| 欧美精品videosex性欧美| 日韩中文字幕av| 精品少妇一区二区30p| 亚洲国产精品视频在线观看| 日韩成人激情影院| 欧美三级欧美成人高清www| 17婷婷久久www| 国产日韩精品一区二区| 国产精品久久久久久亚洲调教| 日韩精品高清在线| 国产一区二区丝袜高跟鞋图片| 亚洲国产精品人人爽夜夜爽| 91九色国产社区在线观看| 日韩精品极品视频| 国产男人精品视频|