그림 연산 (4) - 나눗셈 (Division)
3164 단어 #ImageProcessing-Base
OR O(i,j) = I(i,j) / C (C is a constant)
Code :
/**
*Applies the image Div operator on the specified image arrays, with the
*specified offset and scale value
*@param src1_1d The first source image as a pixel array
*@param src2_1d The second source image as a pixel array
*@param width width of the destination image in pixels
*@param height height of the destination image in pixels
*@param oset The offset value
*@param scale The scale value
*@param reverse Reverse the order of the division
*@return A pixel array containing one image divided by the other
*/
public int [] doDiv(int [] src1_1d, int [] src2_1d, int width, int height,
float oset, float scale, boolean reverse) {
int place1 = -1;
int place2 = -1;
int src1rgb = 0;
int src2rgb = 0;
int result = 0;
//Get size of image and make 1d_arrays
d_w = width;
d_h = height;
dest_1d = new int[d_w*d_h];
boolean firstwider = false;
boolean secondwider = false;
int wrap;
if (i1_w > d_w){
wrap = ((i1_w + 1) - d_w);
firstwider = true;
} else if (i2_w > d_w){
wrap = ((i2_w + 1) - d_w);
secondwider = true;
} else {
wrap = 0;
}
//if you know there is no wrap around, you can save yourself some time
if (wrap == 0) {
for (int i=0; i< dest_1d. length ; i++){
src2rgb = src2_1d[i] & 0x000000ff;
src1rgb = src1_1d[i] & 0x000000ff;
if( !reverse ) {
result = (int) ((scale * ((float) src2rgb / (float) src1rgb ))+oset);
} else {
result = (int) ((scale * ((float) src1rgb / (float) src2rgb ))+oset);
}
if (result < 0){
result = 0;
} else if (result > 255){
result = 255;
}
//create an int value for dest_1d
dest_1d[i ] = 0xff000000 | (result + (result << 16) + (result << 8));
}
return dest_1d;
} else { // wrap != 0
for (int i=0; i< dest_1d. length ; i++){
//we might need to skip out some pixels which aren't in the overlap area
if ((i %d_w ) == 0 ) {
if ( i == 0 ){
place1 = 0;
place2 = 0;
} else if (secondwider) {
place2 = place2 + wrap;
place1 ++;
} else {
place1 = place1 + wrap;
place2 ++;
}
} else{
place2 ++;
place1 ++;
}
src2rgb = src2_1d[place2] & 0x000000ff;
src1rgb = src1_1d[place1] & 0x000000ff;
if( !reverse ) {
if (src1rgb == 0) src1rgb = 1;
result = (int) ((scale * ((float) src2rgb / (float) src1rgb ))+oset);
} else {
if (src2rgb == 0) src2rgb = 1;
result = (int) ((scale * ((float) src1rgb / (float) src2rgb ))+oset);
}
if (result < 0){
result = 0;
} else if (result > 255){
result = 255;
}
//create an int value for dest_1d
dest_1d[i ] = 0xff000000 | (result + (result << 16) + (result << 8));
}
return dest_1d;
}
}
Input Image :
Output Image:
요약: 나눗셈 연산 은 두 그림 간 의 대비 로 이해 할 수 있 고 두 그림 간 의 대비 도 라 고 할 수 있다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Rails Turbolinks를 페이지 단위로 비활성화하는 방법원래 Turobolinks란? Turbolinks는 링크를 생성하는 요소인 a 요소의 클릭을 후크로 하고, 이동한 페이지를 Ajax에서 가져옵니다. 그 후, 취득 페이지의 데이터가 천이 전의 페이지와 동일한 것이 있...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.