gpt4 book ai didi

java - ImageJ - 累积直方图和直方图

转载 作者:行者123 更新时间:2023-12-01 22:07:10 26 4
gpt4 key购买 nike

我的程序遇到了一个小问题,因为它似乎无法找到直方图中的最高值来计算直方图应该的比例,所以现在整个直方图超出了范围

我真的希望有人能帮助我,因为这让我发疯

import ij.*;
import ij.process.*;
import ij.gui.*;
import java.awt.*;
import ij.plugin.filter.*;

public class Oblig3_Oppg2 implements PlugInFilter {

public int setup(String arg, ImagePlus im) {;
return DOES_8G + NO_CHANGES;
}

public void run(ImageProcessor ip) {
final int W = 256;
final int H = 100;
final int H1 = 140;
int[] hist = ip.getHistogram();
int[] KH = new int[W]; //Cumulative Histogram Array


int maxVal;

//Calculates the highest pixel count in the Histogram

for (int i = 0; i < W; i++){
if (hist[i] > maxVal){
maxVal = i;
}
}

KH[0] = hist[0];

for(int i = 1; i < W; i++) {
KH[i] = KH[i-1] + hist[i];
}

ImageProcessor histIp = new ByteProcessor(W, H1);
histIp.setValue(255);
histIp.fill();

int max = KH[255];


for(int j = 0; j < W; j++){
KH[j] = (KH[j]*100)/max; //Scales the Cumulative Histogram
hist[j] = (hist[j]*100)/maxVal; // Scales the Histogram
}

for (int k = 0; k < W; k++){
histIp.setValue(0);
histIp.drawLine(k, H, k, H-KH[k]);
}

for (int k = 0; k < W; k++){
histIp.setValue(0);
histIp.drawLine(k, H, k, H-hist[k]);
}

for (int l = 0; l < W; l++){
histIp.setValue(l);
histIp.drawLine(l, 140, l, 102);
}
histIp.setValue(0);
histIp.drawLine(W, H, W, 0);

// Display the histogram image:

String hTitle = "Histogram";
ImagePlus histIm = new ImagePlus(hTitle, histIp);
histIm.show();

}

}

最佳答案

您应该设置maxVal实际,而不是循环中当前索引:

for (int i = 0; i < W; i++){
if (hist[i] > maxVal){
maxVal = hist[i]; // <-- here
}
}

此外,最好将循环限制为 hist.length而不是W 。如果您设置W,这将防止出现错误。与 ip.getHistogram() 的数组长度不同的某个值返回。

由于您没有提供可运行的示例(即整个Java类;我假设您实现了 ij.plugin.filter.PlugInFilter ),因此我没有测试代码,并且我并不完全清楚您想要实现什么。

关于java - ImageJ - 累积直方图和直方图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32482615/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com