Question: Please help, these are my example outputs: Example for gradle run - q - - args = ' input _ files / correctfiles .

Please help, these are my example outputs:
Example for gradle run -q --args="'input_files/correctfiles.txt''3''1'":
0.857143 or 0.714286
'3''2'":
0.857143 or 0.714286
'4''3'"
1.000000
'3''4'"
0.857143 or 0.714286
The outputs I get are:
'3''1'
0.428571
'3''2'":
0.428571
'4''3'":
1.000000
'3''4'":
Exception in thread "main" java.lang.IndexOutOfBoundsException: Index 4 out of bounds for length 4
I think theres an issue with my clustering logic, Please help, I have no idea how to get my output calculations correct.
Here is my code that handles the histogram clustering
public List performClustering(){
if (clusters.isEmpty()){
throw new IllegalArgumentException("Error: No files to cluster.");
}
while (clusters.size()> K){
int[] closestClusters = findClosestClusters();
mergeClusters(closestClusters[0], closestClusters[1]);
}
return clusters;
}
private int[] findClosestClusters(){
double minDistance = Double.MAX_VALUE;
int[] closestIndices ={-1,-1};
for (int i =0; i < clusters.size(); i++){
for (int j = i +1; j < clusters.size(); j++){
double distance = calculateDistance(clusters.get(i), clusters.get(j));
if (distance < minDistance){
minDistance = distance;
closestIndices[0]= i;
closestIndices[1]= j;
}
}
}
return closestIndices;
}
public double calculateDistance(ImageCluster cluster1, ImageCluster cluster2){
if (similarityMeasure ==1){
return normHistDistance(cluster1, cluster2); // Use NormHist
}
else if (similarityMeasure ==2){
return normHist4Distance(cluster1, cluster2); // Use NormHist4
}
else if (similarityMeasure ==3){
return invSquareDiffDistance(cluster1, cluster2); // Use InvSquareDiff
}
else if (similarityMeasure ==4){
return normHist9Distance(cluster1, cluster2);
}
else {
throw new IllegalArgumentException("Invalid similarity measure: "+ similarityMeasure +". Must be 1,2, or 3.");
}
}
private double normHistDistance(ImageCluster cluster1, ImageCluster cluster2){
return cluster1.getHistogram().similarity(cluster2.getHistogram()); // Histogram similarity
}
private double normHist4Distance(ImageCluster cluster1, ImageCluster cluster2){
// Divide images into 4 parts and compare histograms
List hists1= cluster1.getHistograms();
List hists2= cluster2.getHistograms();
double totalSimilarity =0.0;
for (int i =0; i <4; i++){
totalSimilarity += hists1.get(i).similarity(hists2.get(i));
}
return totalSimilarity /4; // Average similarity
}
private double invSquareDiffDistance(ImageCluster cluster1, ImageCluster cluster2){
double[][] pixels1= cluster1.getPixelData();
double[][] pixels2= cluster2.getPixelData();
double sumSquaredDiff =0.0;
for (int x =0; x <128; x++){
for (int y =0; y <128; y++){
double diff = pixels1[x][y]- pixels2[x][y];
sumSquaredDiff += diff * diff;
}
}
// Check if both images are identical
if (sumSquaredDiff ==0.0){
return 0.0; // Return 0 for identical images
}
return Math.sqrt(sumSquaredDiff); // Return the square root of the summed squared differences
}
private double normHist9Distance(ImageCluster cluster1, ImageCluster cluster2){
List hists1= cluster1.getHistograms();
List hists2= cluster2.getHistograms();
double totalSimilarity =0.0;
for (int i =0; i <9; i++){
totalSimilarity += hists1.get(i).similarity(hists2.get(i));
}
return totalSimilarity /9;
}
public void mergeClusters(int index1, int index2){
ImageCluster cluster1= clusters.get(index1);
ImageCluster cluster2= clusters.get(index2);
/// Merge images and their histograms
for (int i =0; i < cluster2.getImageNames().size(); i++){
String imageName = cluster2.getImageNames().get(i);
// If there are histograms available, add them; otherwise, just add the image
if (i < cluster2.getHistograms().size()){
Histogram histogramToAdd = cluster2.getHistograms().get(i);
cluster1.addImage(imageName, histogramToAdd);
}
}
cluster1.recalculateHistogram();
clusters.remove(index2);
}

Step by Step Solution

There are 3 Steps involved in it

1 Expert Approved Answer
Step: 1 Unlock blur-text-image
Question Has Been Solved by an Expert!

Get step-by-step solutions from verified subject matter experts

Step: 2 Unlock
Step: 3 Unlock

Students Have Also Explored These Related Programming Questions!