시연 영상(유튜브) : https://youtu.be/FBeLOG2fROM
<원본 이미지 스트레칭 처리하기>
function stretchImage(){
outH=inH;
outW=inW;
outImage = new Array(outH);
for(let i=0;i<outH;i++)
outImage[i] = new Array(outW);
//공식 out= (in-LOW)/(HIGH-LOW)*255.0
let LOW = inImage[0][0],HIGH=inImage[0][0];
for(let i=0;i<inH;i++)
for(let k=0;k<inW;k++){
if(LOW>inImage[i][k])
LOW = inImage[i][k];
if(HIGH<inImage[i][k])
HIGH = inImage[i][k];
}
for(let i=0;i<inH;i++){
for(let k=0;k<inW;k++){
let out = (inImage[i][k]-LOW)/(HIGH-LOW)*255.0;
if(out<0.0)
out =0;
else if(out>255.0)
out = 255;
else
out = parseInt(out);
outImage[i][k] = out;
}
}
displayImage();
}
<원본 이미지 엔드인 처리하기>
function endInImage(){//엔드-인 탐색 알고리즘
//(중요!) 출력이미지의 크기가 결정--> 알고리즘에 의존
outH=inH;
outW=inW;
//출력 영상의 2차원 메모리 할당
outImage = new Array(outH);
for (let i = 0; i < outH; i++)
outImage[i] = new Array(outW);
//***진짜 영상처리 알고리즘 ***
//공식 out =(in-LOW)/(HIGH-LOW)*255.0
let LOW = inImage[0][0], HIGH=inImage[0][0];
for(let i=0;i<inH;i++)
for(let k=0;k<inW;k++){
if(LOW>inImage[i][k])
LOW = inImage[i][k];
if(HIGH < inImage[i][k])
HIGH = inImage[i][k];
}
LOW+=50;
HIGH-=50;
for(let i=0;i<inH;i++){
for(let k=0;k<inW;k++){
let out = (inImage[i][k]-LOW)/(HIGH-LOW)*255.0;
if(out <0.0)
out =0;
else if(out>255.0)
out =255;
else
out = parseInt(out);
outImage[i][k] = out;
}
}
//***********************
displayImage();
}
<원본 이미지 평활화 처리하기>
function equalizeImage(){//히스토그램 평활화 알고리즘
//(중요!) 출력이미지의 크기가 결정--> 알고리즘에 의존
outH=inH;
outW=inW;
//출력 영상의 2차원 메모리 할당
outImage = new Array(outH);
for (let i = 0; i < outH; i++)
outImage[i] = new Array(outW);
//***진짜 영상처리 알고리즘 ***
//1단계 : 히스토그램 생성
let histo = new Array(256);
//초기화
for(let i=0;i<256;i++)
histo[i]=0;
//카운트
for(let i=0;i<inH;i++)
for(let k=0;k<inW;k++)
histo[inImage[i][k]]++;
//2단계 : 누적히스토그램 생성
let sumHisto = new Array(256);
//초기화
for(let i=0;i<256;i++)
sumHisto[i]=0;
//계산
let sumValue =0;
for(let i=0;i<256;i++){
sumValue +=histo[i];
sumHisto[i] = sumValue;
}
//3단계 : 정규화된 누적 히스토그램 생성
//공식: normal = sum*(1/(inH*inW))*255
let normalHisto = new Array(256);
//초기화
for(let i=0;i<256;i++)
normalHisto[i]=0.0;
//계산
for(let i=0;i<256;i++){
let normal = sumHisto[i]*(1.0/(inH*inW))*255.0;
normalHisto[i]=normal;
}
for(let i=0;i<inH;i++){
for(let k=0;k<inW;k++){
outImage[i][k] = parseInt(normalHisto[inImage[i][k]]);
}
}
//***********************
displayImage();
}
'OpenCV없는 영상처리' 카테고리의 다른 글
영상처리의 전처리부 (0) | 2022.09.12 |
---|---|
화소영역처리 (0) | 2022.09.11 |
기하학처리 (0) | 2022.09.11 |
화소 점 처리 (0) | 2022.09.11 |
인공지능과 영상처리 (0) | 2022.09.11 |