首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ImageJ -累积直方图和直方图

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

Stack Overflow用户
提问于 2015-09-09 14:40:55
回答 1查看 1.8K关注 0票数 0

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

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

代码语言:javascript
复制
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();

    }

}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-09-09 17:41:56

应该将maxVal设置为实际值,而不是循环中的当前索引:

代码语言:javascript
复制
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),所以我没有测试代码,我也不太清楚您想要实现什么。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32482615

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档