Мне было интересно, будет ли при вызове color.HSBtoRGB значение оттенка вводиться как диапазон 0-255, 0-1, 0-360? Я спрашиваю, потому что я пытаюсь преобразовать угол кромки в цвет, но он дает мне только синий или фиолетовый? кто-нибудь может объяснить, что я делаю?
public void sobelGrey(){
this.greyScale();
double edgex;
double edgey;
Picture pi = new Picture(this.getWidth(), this.getHeight());
Picture tou = new Picture(this.getWidth(), this.getHeight());
Pixel[][] Y = pi.getPixels2D();
Pixel[][] X = tou.getPixels2D();
Pixel[][] h = this.getPixels2D();
for (int y = 1; y< X.length-1; y++){
for(int x= 1; x<X[1].length-1; x++){
edgex =
h[y-1][x-1].getRed() * -1 +
h[y][x-1].getRed() * -2+
h[y+1][x-1].getRed() * -1+
h[y-1][x+1].getRed() * 1 +
h[y][x+1].getRed() * 2+
h[y+1][x+1].getRed() * 1;
Y[y][x].setRed((int)Math.abs(edgex/2));
Y[y][x].setGreen((int)Math.abs(edgex/2));
Y[y][x].setBlue((int)Math.abs(edgex/2));
}
}
for (int y = 1; y< X.length-1; y++){
for(int x= 1; x<X[1].length-1; x++){
edgex =
h[y-1][x-1].getRed() * -1 +
h[y-1][x].getRed() * -2+
h[y-1][x+1].getRed() * -1+
h[y+1][x-1].getRed() * 1 +
h[y+1][x].getRed() * 2+
h[y+1][x+1].getRed() * 1;
X[y][x].setRed((int)Math.abs(edgex/2));
X[y][x].setGreen((int)Math.abs(edgex/2));
X[y][x].setBlue((int)Math.abs(edgex/2));
}
}
for (int y = 1; y< X.length-1; y++){
for(int x= 1; x<X[1].length-1; x++){
int x1 = (int) Math.sqrt(Math.pow(X[y][x].getRed(), 2) + Math.pow(X[y][x].getGreen(), 2) + Math.pow(X[y][x].getBlue(), 2));
int y1 = (int) Math.sqrt(Math.pow(Y[y][x].getRed(), 2) + Math.pow(Y[y][x].getGreen(), 2) + Math.pow(Y[y][x].getBlue(), 2));
int hr = (int) (200/(2*Math.PI)*(Math.tanh(y1/ (x1+.000000000000001))));
int rgb = Color.HSBtoRGB(hr/255, hr, (int) Math.sqrt(Math.pow(x1, 2) + Math.pow(y1, 2)));
Color fixed = new Color(rgb&0xFF*7/10, (rgb>>8)&0xFF*80/255/10, (rgb>>16)&0xFF*4/10);
if ( !(Math.sqrt(Math.pow(x1, 2) + Math.pow(y1, 2))< 40))
h[y][x].setColor(fixed);
else
h[y][x].setColor(Color.black);
}
}
pi.explore();
tou.explore();
explore();
}
Я использую компьютерную программу обработки изображений AP от Eimacs и использую лебедь




Вы объявили hr (и другие переменные) как int. Затем в Color.HSBtoRGB(hr/255, ... вы делите int на int. Для всех значений hr ниже 255 результатом будет 0.
Вероятно, достаточно разделить на 255.0, чтобы заставить деление с плавающей запятой.
так оттенок находится в диапазоне 0-1?
Все аргументы равны 0..1 :, оттенок 0-1 = 0-360deg (быстрый Google показал это: docs.oracle.com/javase/7/docs/api/java/awt/Color.html)
Хорошо спасибо. Вы случайно не знаете, как сделать края более тонкими, чтобы они были толщиной в один пиксель, а не в четыре?
Извини, нет. Я давно не работал с такими вещами.
Может быть, если вы покажете нам свой код, мы сможем сказать вам, что с ним не так.