匀光匀色--直方图匹配算法实现与应用
生活随笔
收集整理的這篇文章主要介紹了
匀光匀色--直方图匹配算法实现与应用
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
一、直方圖匹配(直方圖規定化)算法:是以一個圖像直方圖作為模板,使待處理圖像直方圖與模板直方圖近似。
算法流程:
實現步驟:
計算直方圖
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;二、使用直方圖匹配算法對圖像進行勻光勻色。選取兩幅不同色調的圖像使用直方圖匹配算法進行處理。
模板圖像:
待處理圖像:
處理后:
結論:處理前模板圖像與待處理圖像色調差異較大,處理后圖像整體色調與模板圖像非常接近。
總結
以上是生活随笔為你收集整理的匀光匀色--直方图匹配算法实现与应用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 无人机图像处理工具更新——多线程优化版
- 下一篇: 图像处理之双线性插值原理和实现