B
BLee
Gast
hallo,
folgendes:wenn eine matrix mit werten gegeben ist z.B. 12*12 und wie diese mit einer 3*3 maske durchlaufen wollen.
wieso nimmt dieser code nur ungerade werte an?kann mir jemand das kurz erklären?
[Java]private int getVektorMaske(ImageProcessor ip, int nCol,
int nRow, int hotSpotX, int hotSpotY, int maskeGroesseX,
int maskeGroesseY, short[] VektMaske) {
int VektMaskeLaenge = 0;
int row, col;
int sCol, sRow, eCol, eRow;
//----Erste und letzte Spalte bestimmen---//
if ((hotSpotX - maskeGroesseX) > 0) {
sCol = (hotSpotX - maskeGroesseX);
} else {
sCol = 1;
}
if ((hotSpotX + maskeGroesseX) <= nCol) {
eCol = (hotSpotX + maskeGroesseX);
} else {
eCol = nCol;
}
//----Erste und letzte Zeile bestimmen---//
if ((hotSpotY - maskeGroesseY) > 0) {
sRow = (hotSpotY - maskeGroesseY);
} else {
sRow = 1;
}
if ((hotSpotY + maskeGroesseY) <= nRow) {
eRow = (hotSpotY + maskeGroesseY);
} else {
eRow = nRow;
}
//------Zwei for-Schleifen über die gesamte Maske und eintragen der Pixelwerte in die Vektormaske------//
for (row = sRow; row <= eRow; row++) {
for (col = sCol; col <= eCol; col++) {
VektMaske[VektMaskeLaenge++] = (short) ip.getPixel(row, col);
}
}
return VektMaskeLaenge;
}
private void Schleife(ShortProcessor ip, short[] pixelMittelwert,
short[] pixelMedian, short[] VektMaske, int nCol, int nRow,
int aktLaenge, int aktEintrag, double MaskeX, double MaskeY) {
Mittel- und Medianwerte--//
for (int col = 1; col <= nCol; col++) {
for (int row = 1; row <= nRow; row++) {
aktLaenge = getVektorMaske(ip, nCol, nRow, col,
row, (short) (MaskeX / 2.0), (short) (MaskeY / 2.0),
VektMaske);
pixelMittelwert[aktEintrag] = (short) mittelwert(VektMaske,
aktLaenge);
pixelMedian[aktEintrag++] = median(VektMaske, aktLaenge);
}
}
}
}[/Java]
folgendes:wenn eine matrix mit werten gegeben ist z.B. 12*12 und wie diese mit einer 3*3 maske durchlaufen wollen.
wieso nimmt dieser code nur ungerade werte an?kann mir jemand das kurz erklären?
[Java]private int getVektorMaske(ImageProcessor ip, int nCol,
int nRow, int hotSpotX, int hotSpotY, int maskeGroesseX,
int maskeGroesseY, short[] VektMaske) {
int VektMaskeLaenge = 0;
int row, col;
int sCol, sRow, eCol, eRow;
//----Erste und letzte Spalte bestimmen---//
if ((hotSpotX - maskeGroesseX) > 0) {
sCol = (hotSpotX - maskeGroesseX);
} else {
sCol = 1;
}
if ((hotSpotX + maskeGroesseX) <= nCol) {
eCol = (hotSpotX + maskeGroesseX);
} else {
eCol = nCol;
}
//----Erste und letzte Zeile bestimmen---//
if ((hotSpotY - maskeGroesseY) > 0) {
sRow = (hotSpotY - maskeGroesseY);
} else {
sRow = 1;
}
if ((hotSpotY + maskeGroesseY) <= nRow) {
eRow = (hotSpotY + maskeGroesseY);
} else {
eRow = nRow;
}
//------Zwei for-Schleifen über die gesamte Maske und eintragen der Pixelwerte in die Vektormaske------//
for (row = sRow; row <= eRow; row++) {
for (col = sCol; col <= eCol; col++) {
VektMaske[VektMaskeLaenge++] = (short) ip.getPixel(row, col);
}
}
return VektMaskeLaenge;
}
private void Schleife(ShortProcessor ip, short[] pixelMittelwert,
short[] pixelMedian, short[] VektMaske, int nCol, int nRow,
int aktLaenge, int aktEintrag, double MaskeX, double MaskeY) {
Mittel- und Medianwerte--//
for (int col = 1; col <= nCol; col++) {
for (int row = 1; row <= nRow; row++) {
aktLaenge = getVektorMaske(ip, nCol, nRow, col,
row, (short) (MaskeX / 2.0), (short) (MaskeY / 2.0),
VektMaske);
pixelMittelwert[aktEintrag] = (short) mittelwert(VektMaske,
aktLaenge);
pixelMedian[aktEintrag++] = median(VektMaske, aktLaenge);
}
}
}
}[/Java]