java 直方图_Java直方图

直方图将包含四个实例变量,和一个构造函数(constructor)如下。privateStringtitle;privatedoublestart,stop;privatedouble[]data;publicHistogram(Stringtitle,doublestart,doublest...

直方图将包含四个实例变量,和一个构造函数(constructor)如下。

private String title;

private double start, stop;

private double[] data;

public Histogram(String title, double start, double stop, double[] data, int numBars)

写一个readhistogram方法,从控制台(console)读取直方图。比如:

Enter a histogram.

Title:

My Histogram

Start value:

12.0

End value:

14.5

Data:

2.3 1.55 21.9 13.33 17.25 5.21

假设提供的数字不超过1000。通过使用toString方法从控制台写一个main program。

下一步,开始(start value),停止(end value)和标题(Title)值将被使用。编辑方法如下:

先求数据数组中的最大值并且其对应最长的条形长度为40。此外,每个条形是double。使用data中的每个值乘以40再除以data当中最大的值21.9,则得到开始值与data中每个值中间的#数量。输出如下所示:

My Histogram

12.0 #### 2.3

12.5 ### 1.55

13.0 ######################################## 21.9

13.5 ########################### 13.33

14.0 ################################## 17.25

14.5 ########## 5.21

20^

比如12.0 #### 2.3,12为开始值,2.3是data当中第一个值,21.9是data中最大值,那么#的数量为 2.3*40/21.9=4.2,约等于4。int numBars=6,同样等于data的个数。

展开

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 在Java中,可以使用OpenCV库来计算两个图像的直方图并计算相似度。以下是基本的步骤: 1. 导入OpenCV库。 ```java import org.opencv.core.Core; import org.opencv.core.Mat; import org.opencv.core.CvType; import org.opencv.core.Size; import org.opencv.core.MatOfFloat; import org.opencv.imgcodecs.Imgcodecs; import org.opencv.imgproc.Imgproc; ``` 2. 分别读取两张图像。 ```java Mat img1 = Imgcodecs.imread("image1.jpg"); Mat img2 = Imgcodecs.imread("image2.jpg"); ``` 3. 将图像转换为HSV色彩空间。 ```java Mat hsvImg1 = new Mat(); Mat hsvImg2 = new Mat(); Imgproc.cvtColor(img1, hsvImg1, Imgproc.COLOR_BGR2HSV); Imgproc.cvtColor(img2, hsvImg2, Imgproc.COLOR_BGR2HSV); ``` 4. 分别计算两个图像的直方图。 ```java MatOfFloat hist1 = new MatOfFloat(); MatOfFloat hist2 = new MatOfFloat(); MatOfInt histSize = new MatOfInt(180); MatOfInt channels = new MatOfInt(0); MatOfFloat ranges = new MatOfFloat(0f, 180f); Imgproc.calcHist(Arrays.asList(hsvImg1), channels, new Mat(), hist1, histSize, ranges); Imgproc.calcHist(Arrays.asList(hsvImg2), channels, new Mat(), hist2, histSize, ranges); Core.normalize(hist1, hist1, 0, 1, Core.NORM_MINMAX, -1, new Mat()); Core.normalize(hist2, hist2, 0, 1, Core.NORM_MINMAX, -1, new Mat()); ``` 5. 计算两个直方图的相似度。 ```java double similarity = Imgproc.compareHist(hist1, hist2, Imgproc.CV_COMP_CORREL); ``` 其中,`Imgproc.CV_COMP_CORREL`表示使用相关性作为相似度度量方法,可以根据需要选择其他的相似度度量方法。 最后,相似度的值越接近1,表示两个图像的相似度越高。 ### 回答2: Java直方图计算两个图像的相似度是一种常见的图像比较方法。直方图是对图像中像素值出现频率的统计,可以反映图像的颜色分布情况。以下是通过Java编程计算两个图像相似度的步骤: 1. 导入Java图像处理库,如OpenCV或Java图像处理工具包(JAI)。 2. 加载两个待比较的图像文件,并将其转换为灰度图像。灰度图像仅包含亮度信息,忽略颜色信息。 3. 对每个图像计算灰度直方图。可以使用像素值作为直方图的横坐标,像素值出现的频率作为纵坐标。可以选择将像素值范围分成若干个区间,每个区间对应直方图的一个bin。 4. 对两个图像的直方图进行比较。可以使用某种相似性度量方法,如欧氏距离或相关系数等,计算直方图之间的相似度。可以遍历每个bin,将两个直方图对应bin的频率值进行比较,得到相似性度量。 5. 根据相似度结果,判断两个图像的相似度程度。可以设定一个阈值,小于阈值则认为两个图像相似,大于阈值则认为两个图像不相似。 6. 可以通过调整直方图的bin数量、相似性度量方法或阈值来优化相似度计算结果,以适应不同的应用场景。 Java直方图计算两个图像相似度是一种简单而有效的方法,但也存在一定的局限性。对于某些特定场景或要求更高的应用,可能需要使用其他更复杂的图像比较算法。 ### 回答3: Java直方图是一种计算图像相似度的常用方法。对于给定的两个图像,我们可以通过以下步骤来计算它们的相似度: 1. 将图像转换为灰度图像:首先,我们需要将彩色图像转换为灰度图像。这可以通过使用Java的图像处理库来实现。 2. 计算直方图:接下来,我们需要计算每个图像的直方图直方图是一个表示图像中像素值的分布的统计图。我们可以将图像分为若干个像素值范围,并计算每个范围内像素的数量。这可以通过创建一个大小为256的整数数组来实现,每个数组元素表示一个像素值对应的像素数量。 3. 计算相似度:一旦我们有了两个图像的直方图,我们可以通过不同的相似度度量方法来计算它们之间的相似度。常见的方法包括欧氏距离、曼哈顿距离和相关系数等。这些方法都可以通过使用Java的数学库来实现。 4. 综合评估:除了直方图相似度,我们还可以考虑其他因素来综合评估图像相似度。例如,可以考虑图像的结构、纹理和颜色分布等。这些因素可以通过使用Java的图像处理和机器学习库来计算和比较。 总之,通过使用Java直方图计算方法,我们可以很容易地计算两个图像之间的相似度。这对于图像检索、图像分类和内容识别等应用非常有用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值