首页 > 试题广场 >

图像相似度

[编程题]图像相似度
  • 热度指数:20250 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解
给出两幅相同大小的黑白图像(用0-1矩阵)表示,求它们的相似度。若两幅图像在相同位置上的像素点颜色相同,则称它们在该位置具有相同的像素点。两幅图像的相似度定义为相同像素点数占总像素点数的百分比。


输入描述:
第一行包含两个整数m和n,表示图像的行数和列数,用单个空格隔开。1≤m≤100, 1≤n≤100。之后m行,每行n个整数0或1,表示第一幅黑白图像上各像素点的颜色,相邻两个数用单个空格隔开。之后m行,每行n个整数0或1,表示第二幅黑白图像上各像素点的颜色,相邻两个数用单个空格隔开。


输出描述:
一个实数,表示相似度(以百分比的形式给出),精确到小数点后两位。
示例1

输入

3 3
1 0 1
0 0 1
1 1 0
1 1 0
0 0 1
0 0 1

输出

44.44
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int n = in.nextInt(), m = in.nextInt();
        int[][] num_1 = new int[n][m];
        int[][] num_2 = new int[n][m];

        for (int i = 0; i < n; i++) {
            for (int j = 0; j < m; j++) {
                num_1[i][j] = in.nextInt();
            }
        }
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < m; j++) {
                num_2[i][j] = in.nextInt();
            }
        }
        int count = 0;
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < m; j++) {
                if (num_1[i][j] == num_2[i][j]) {
                    count++;
                }
            }
        }
        double ret = ((count * 1.00) / (n * m)) * 100;
        System.out.printf("%.2f", ret);
    }
}

发表于 2024-09-09 21:35:13 回复(0)
import java.util.*;

public class Main{
    public static void main(String[] args){
        Scanner sc=new Scanner(System.in);
        int m=sc.nextInt(),n=sc.nextInt();
        int[][] arr1=new int[m][n],arr2=new int[m][n];
        arr1=loop(arr1,m,n,sc);
        arr2=loop(arr2,m,n,sc);
        int count=0;
        for(int i=0;i<m;i++){
            for(int j=0;j<n;j++){
                if(arr1[i][j]==arr2[i][j]) count++;
            } 
        }
        System.out.printf("%.2f",(float)(count*100)/(m*n));
    }
    public static int[][] loop(int[][] arr,int m,int n,Scanner sc){
        for(int i=0;i<m;i++)
            for(int j=0;j<n;j++){
                arr[i][j]=sc.nextInt();
            }
        return arr;
    }
}

发表于 2022-08-11 22:43:26 回复(0)
import java.util.*;
public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int m = scanner.nextInt();
        int n = scanner.nextInt();
        int[][] Martix = new int[m][n];
        //相似度
        double similarity = 0.0;
        for(int i = 0;i < m;i++){
            for(int j = 0;j < n;j++){
                Martix[i][j] = scanner.nextInt();
            }
        }
        
        for(int k = 0;k < m;k++){
            for(int l = 0;l < n;l++){
                //Martix[i][j] = scanner.nextInt();
                //输入第二个矩阵的值,与第一个矩阵下的各个值相比,有相同数字相似度就上升
                int toJudgeValueList = scanner.nextInt();
                if(toJudgeValueList == Martix[k][l]){
                    similarity++;
                }
            }
        }
        double similarityPercents = (100.0 * similarity) / (m * n);
        System.out.println(String.format("%.2f",similarityPercents));
    }
}

发表于 2022-07-01 17:31:54 回复(0)
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Main{
    public static void main(String[] args) throws IOException {
        BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));
        String[] str = bufferedReader.readLine().split(" ");
        int line = Integer.parseInt(str[0]);
        int column = Integer.parseInt(str[1]);
        int[][] num = new int[line][column];
        for (int i = 0; i < line; i++) {
            String[] strings = bufferedReader.readLine().split(" ");
            for (int j = 0; j < strings.length; j++) {
                int a = Integer.parseInt(strings[j]);
                num[i][j] = a;
            }
        }
        double count = 0.00;
        for (int i = 0; i < line; i++) {
            String[] strings = bufferedReader.readLine().split(" ");
            for (int j = 0; j < strings.length; j++) {
                int b = Integer.parseInt(strings[j]);
                if (num[i][j] == b){
                    count++;
                }
            }
        }
        System.out.printf("%.2f",(count*100  / (line * column)));
    }
}

发表于 2021-10-23 00:51:18 回复(0)
import java.util.*;
public class Main{
    public static void main(String[] args){
        Scanner sc=new Scanner(System.in);
        while(sc.hasNext()){
            //最普通的方法
            Integer m=sc.nextInt();
            Integer n=sc.nextInt();
           int[][]pic=new int[m][n];
            double similarity=0.0;
            for(int i=0;i<m;i++){
                for(int j=0;j<n;j++){
                    pic[i][j]=sc.nextInt();
                }
            }
            for(int d=0;d<m;d++){
                for(int g=0;g<n;g++){
                    if(pic[d][g]==sc.nextInt()){
                        similarity++;
                    }
                }
            }
            System.out.printf("%.2f",100.0*similarity/(m*n));
        }
    }
}

发表于 2021-10-20 14:35:54 回复(0)
import java.util.*;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int m = sc.nextInt();
        int n = sc.nextInt();
        List<Integer> list1 = new ArrayList<>();
        List<Integer> list2 = new ArrayList<>();
        while (sc.hasNextInt()) {
            for (int i = 0; i < m * n; i++) {
                list1.add(sc.nextInt());
            }
            for (int i = 0; i < m * n; i++) {
                list2.add(sc.nextInt());
            }
            double t = 0;

            for (int i = 0; i < m * n; i++) {
                if (list1.get(i) == list2.get(i)) {
                    t++;
                }
            }
            System.out.printf("%.2f\n", ((t * 100) / (m * n)));
        }
    }
}

发表于 2021-07-14 15:55:48 回复(0)
import java.util.*;
public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int m = scanner.nextInt();
        int n = scanner.nextInt();
        int[] array = new int[m*n];
        int similar = 0;
        int num = 0;
        for(int i=0;i<m*n;i++) {
            array[i] = scanner.nextInt();
        }
                //不必创建两个数组,另一个直接比较即可
        for(int i=0;i<m*n;i++) {
            num = scanner.nextInt();
            if(num==array[i]) {
                similar++;
            }
        }
        System.out.printf("%.2f",similar*1.0/(m*n)*100);
    }

发表于 2021-03-18 15:19:36 回复(0)
水水水
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner input=new Scanner(System.in);
        int x=input.nextInt(),y=input.nextInt();
        int[][] a=new int[y][x],b=new int[y][x];
        int nt=x*y;double av=0;
        for(int i=0;i<a.length;i++){
            for(int ii=0;ii<a[i].length;ii++){
                a[i][ii]=input.nextInt();
            }
        }

        for(int i=0;i<a.length;i++){
            for(int ii=0;ii<a[i].length;ii++){
                if(a[i][ii]==input.nextInt())
                    av++;
            }
        }
        if(av==0){
            System.out.println("0.00");
        }else{
            System.out.println(String.format("%.2f",(av/nt)*100));
        }


    }
}


发表于 2020-10-31 10:44:31 回复(0)
import java.util.*;
public class Main {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        int count = 0;
        int m = input.nextInt();
        int n = input.nextInt();
        int[][] one = new int[m][n];
        for(int i = 0; i < m; i++) {
            for(int j = 0; j < n; j++) {
                one[i][j] = input.nextInt();
            }
        }
        int[][] two = new int[m][n];
        for(int i = 0; i < m; i++) {
            for(int j = 0; j < n; j++) {
                two[i][j] = input.nextInt();
            }
        }
        for(int i = 0; i < m; i++) {
            for(int j = 0; j < n; j++) {
                if(one[i][j] == two[i][j]) {
                    count++;
                }
            }
        }
        double num = (double)count / (m * n);
        System.out.println(String.format("%.2f", num * 100));
    }
}
发表于 2020-04-23 23:06:36 回复(0)