Programlama | Programlama Dilleri | C Programlama Dili |C++

Anasayfa Forum
Hoşgeldiniz, Ziyaretçi
Lütfen Giriş ya da Kayıt.    Kayıp Parola?
iki resim dosyasini parametre olarak tanitma (1 inceleyen) (1) Ziyaretçi
Java Programlama Dili NetBeans ve JCreator
EN ALT Beğenilen: 0
BAŞLIK: iki resim dosyasini parametre olarak tanitma
#42
iki resim dosyasini parametre olarak tanitma 8 Yıl, 9 Ay önce Karma: 0  
arkadaslar bozulma oranlarini konu alan bir kodu biraraya getirdim.mantık : baslangicta bmp olan formatin jpeg e donusumundeki bozulma oranlarini hesaplamak.

program kodu hatasiz olarak calismakta fakat 2 resim dosyasini parametre olarak tanitmam gerekmekte.
.
package com.sxz.math;
/**
*
* @author zengin
*/
import java.awt.image.BufferedImage;
import java.awt.Color;
import javax.imageio.ImageIO;
import java.io.IOException;
import java.io.File;
public final class PSNR {
private PSNR() {

}

public static void main(String[] args) {
if (args.length != 2) {
System.err.println("Iki parametre girmediniz!");
return;
}
File file1 = new File(args[0]);
if (!file1.exists() || !file1.canRead()) {
System.err.println("Dosyayi acamiyoruz " + file1.getAbsolutePath());
return;
}
File file2 = new File(args[1]);
if (!file2.exists() || !file2.canRead()) {
System.err.println("Dosyayi acamiyoruz " + file2.getAbsolutePath());
return;
}
BufferedImage image1 = getImage(file1);
BufferedImage image2 = getImage(file2);
if (image1.getWidth() != image2.getWidth()) {
System.err.println("Bu iki dosya ayni genislikte degildir!");
return;
}
if (image1.getHeight() != image2.getHeight()) {
System.err.println("Bu iki dosya ayni yukseklikte degildir!");
return;
}
final int size = image1.getHeight() * image1.getWidth();
int totalRed = 0;
int totalGreen = 0;
int totalBlue = 0;
int maxRed = -1;
int maxGreen = -1;
int maxBlue = -1;
int worstRedX = -1;
int worstRedY = -1;
int worstGreenX = -1;
int worstGreenY = -1;
int worstBlueX = -1;
int worstBlueY = -1;
double maxDistance = -1;
int maxX = -1;
int maxY = -1;
double totalDistance = 0;
for (int i = 0; i < image1.getWidth(); i++) {
for (int j = 0; j < image1.getHeight(); j++) {
final Color color1 = new Color(image1.getRGB(i, j));
final Color color2 = new Color(image2.getRGB(i, j));
final double distance = getColorDistance(color1, color2);
totalDistance += distance;
if (distance > maxDistance) {
maxDistance = distance;
maxX = i;
maxY = j;
}
final int redDiff = color1.getRed() - color2.getRed();
if (redDiff > maxRed) {
maxRed = redDiff;
worstRedX = i;
worstRedY = j;
}
final int greenDiff = color1.getGreen() - color2.getGreen();
if (greenDiff > maxGreen) {
maxGreen = greenDiff;
worstGreenX = i;
worstGreenY = j;
}
final int blueDiff = color1.getBlue() - color2.getBlue();
if (blueDiff > maxBlue) {
maxBlue = blueDiff;
worstBlueX = i;
worstBlueY = j;
}
totalRed += redDiff * redDiff;
totalGreen += greenDiff * greenDiff;
totalBlue += blueDiff * blueDiff;
}
}
System.out.print("max mesafe: " + maxDistance);
System.out.println(" @: " + maxX + " " + maxY);
System.out.println("ortalama uzaklik: " + (totalDistance / size));
System.out.println("toplam kirmizi: " + totalRed);
System.out.println("toplam yesil: " + totalGreen);
System.out.println("toplam mavi: " + totalBlue);
System.out.println("en kotu kirmizi @ " + worstRedX + " " + worstRedY + " is " + maxRed);
System.out.println("en kotu yesil @ " + worstGreenX + " " + worstGreenY + " is " + maxGreen);
System.out.println("en kotu mavi @ " + worstBlueX + " " + worstBlueY + " is " + maxBlue);
float meanSquaredError = (totalRed + totalGreen + totalBlue) / (image1.getWidth() * image1.getHeight() * 3);
System.out.println("mean squarederror : " + meanSquaredError);
if (meanSquaredError == 0) {
System.out.println("peak signal to noise ratio : 0");
return;
}
double peakSignalToNoiseRatio = 10 * StrictMath.log10((255 * 255) / meanSquaredError);
System.out.println("peak signal to noise ratio is : " + peakSignalToNoiseRatio);
}
private static BufferedImage getImage(File file) {
try {
return ImageIO.read(file);
} catch (IOException ioe) {
ioe.printStackTrace();
}
return null;
}
private static double getColorDistance(Color source, Color target) {
if (source.equals(target)) {
return 0.0d;
}
final double red = source.getRed() - target.getRed();
final double green = source.getGreen() - target.getGreen();
final double blue = source.getBlue() - target.getBlue();
return Math.sqrt(red * red + blue * blue + green * green);
}
}
emrerich (Kullanıcı)
Yeni Üye
Gönderiler: 1
graphgraph
Şu An Sitede Değil Kullanıcı bilgilerini görmek için tıklayın
Kayıt Tutuldu Kayıt Tutuldu  
 
Herkesin yazı yazması yönetici tarafından engellenmiştir.  
EN ÜST
amınıza koyayım amınıza koyayım amınıza koyayım amınıza koyayım amınıza koyayım amınıza koyayım