日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

匀光匀色--直方图匹配算法实现与应用

發布時間:2024/1/23 编程问答 45 豆豆
生活随笔 收集整理的這篇文章主要介紹了 匀光匀色--直方图匹配算法实现与应用 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、直方圖匹配(直方圖規定化)算法:是以一個圖像直方圖作為模板,使待處理圖像直方圖與模板直方圖近似。

算法流程:

  • 分別計算模板影像和待處理影像累積直方圖(統計像素值在0~255上分布比例);
  • 一次計算待圖像直方圖上每個值到模板圖像直方圖每個值之間差值,生成256個差值表;
  • 計算每個差值表中最小值,將最小值索引作為該差值表對應待處理圖像值變換后值,生成查找表;
  • 通過查找表對待處理圖像進行處理。
  • 實現步驟:

  • 計算累積直方圖:
  • 計算直方圖

    Map<Integer, Double> map = new HashMap<>();int width = image.getWidth();int height = image.getHeight();double totalPixel = width * height;double rate = 1 / (3 * totalPixel);for (int i = 0; i < 256; i++) {map.put(i, 0.0);// 通過循環,往集合里面填充0~255個位置,初始值都為0}//分別統計圖像上0~255上分布總數for (int i = 0; i < image.getWidth(); i++) {for (int j = 0; j < image.getHeight(); j++) {int rgb = image.getRGB(i, j);int r = (rgb >> 16) & 0xff;int g = (rgb >> 8) & 0xff;int b = rgb & 0xff;map.put(r, map.get(r) + rate);map.put(g, map.get(g) + rate);map.put(b, map.get(b) + rate);}}

    計算累積直方圖

    for(int i = 0; i < 256;i++) {tempSum += tempMap.get(i);imageSum += imageMap.get(i);tempList[i] = tempSum;imageList[i] = imageSum;}

    2.計算差值表

    List<Double[]> differenceList = new ArrayList<>();for(int i = 0; i < 256;i++) {Double[] differenceTable = new Double[256];for(int j = 0; j< 256;j++) {differenceTable[j] = Math.abs(imageList[i] - tempList[j]);}differenceList.add(differenceTable);}

    3.計算差值表最小值,生成查找表

    for(int i = 0; i < 256;i++) {Double[] differenceTable = differenceList.get(i);Double[] sortTable = new Double[256];for(int j = 0; j < 256;j++) {sortTable[j] = differenceTable[j];}Arrays.sort(sortTable);double mini = sortTable[0];Double[] table = differenceList.get(i);for(int j = 0; j < 256; j++) {if (mini == table[j]) {resultTable[i] = j;}}}

    4.通過查找表處理圖像

    for(int i = 0; i < width; i++) {for(int j = 0 ;j < height;j++) {int rgb = image.getRGB(i, j);int r = (rgb >> 16) & 0xff;int g = (rgb >> 8) & 0xff;int b = rgb & 0xff;r = rTable[r];g = gTable[g];b = bTable[b];rgb = (r & 0xff) << 16 | (g & 0xff) << 8 | b & 0xff;resultImage.setRGB(i, j, rgb);}}return resultImage;

    二、使用直方圖匹配算法對圖像進行勻光勻色。選取兩幅不同色調的圖像使用直方圖匹配算法進行處理。

    模板圖像:

    待處理圖像:

    處理后:

    結論:處理前模板圖像與待處理圖像色調差異較大,處理后圖像整體色調與模板圖像非常接近。

    總結

    以上是生活随笔為你收集整理的匀光匀色--直方图匹配算法实现与应用的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。