몇 달 전에 JMP 고객이 JMP 기술 지원부에 연락하여 이미지 기능에 대해 문의했습니다. JMP 9 . 특히 고객은 두 개의 이미지를 결합하는 기능이 있는지 질문했습니다. 기술 지원팀이 그 질문을 저에게 전달했습니다.
단일 이미지를 조작하는 많은 기능을 포함하여 JMP 9에 일부 이미지 기능을 추가했습니다. 그러나 여러 이미지에 함께 작용 한 기능을 추가하지 않았습니다. 이 요청에 대해 생각해 봤는데, JSL (JMP Scripting Language)에서 기존 기능을 사용하는 것이 매우 쉽다는 것을 깨달았습니다.

나는 두 개의 이미지를 결합하기 위해 간단한 JSL 스크립트를 빠르게 조합했다. GUI를 사용하면 두 개의 이미지를 지정하고 Image1과 Image2의 비율을 제어 할 수 있습니다. 또한 결과 혼합 이미지를 사용자에게 표시합니다.
Image1 및 Image2라고 표시된 버튼은 파일 선택기를 팝업하고 사용자가 블렌딩 할 이미지를 탐색 할 수있게합니다. 이미지가 선택되면 사용자는 이미지를 작게 볼 수 있습니다. 슬라이더는 Image1과 Image2의 비율을 정의합니다. 슬라이더의 왼쪽에있는 엄지 손가락으로 결과는 100 % Image1입니다. 슬라이더의 중앙에있는 엄지 손가락은 50 %의 이미지 1과 50 %의 이미지 2를 생성합니다.
맨 위의 큰보기 영역은 두 개의 혼합 된 이미지의 결과를 표시합니다. 혼합 된 이미지는 원본 이미지와 동일한 크기가되고보기 영역은 그에 따라 크기가 조정됩니다. 현재 블렌드 할 두 이미지가 같은 크기라고 가정합니다. 궁극적으로, 내가 다른 경우를 처리 할 논리를 추가 할 것입니다. 아니면 그냥 그걸 당신을위한 운동으로 남겨 둘 것입니다!
원래이 기능을 원했던 동기는 토네이도 전후에 찍은 사진을 비교하는 것이 었습니다. 치명적인 EF5 토네이도가 미주리 주 조플린을 강타했으며 JMP 사용자는 이러한 이미지를 혼합 방식으로 비교하려고했습니다. 나는 인터넷을 인터넷으로 봤고 토네이도 전후에 조플린 주위에서 찍은 이미지를 발견했다. 사진은 정확히 정렬되지 않았지만 작업 할 수있을만큼 가까이에있었습니다. JMP 외부의 이미지를 조작하여 더 잘 정렬되도록했으며, 같은 크기로 잘라 냈습니다. 다음은 50 % 블렌드가있는 이전 이미지와 이후 이미지의 한 세트의 예입니다.

전체 JSL 스크립트는 다음 위치에서 다운로드 할 수 있습니다. JMP 파일 교환 . 스크립트가 호출됩니다. ImageBlend.jsl . 그러나 스크립트에서 가장 흥미로운 코드는 실제 블렌딩 함수입니다.
doBlend = expr (
{mat1R, mat1G, mat1B} = img1 << getPixels ( "rgb" );
{mat2R, mat2G, mat2B} = img2 << getPixels ( "rgb" );
매트 3R = mat2R * 당 + mat1R * ( 1.0 - 당);
mat3G = 매트 2G * 당 + 매트 1G * ( 1.0 - 당);
매트 3B = 매트 2B * 당 + 매트 1B * ( 1.0 - 당);
img3 << setPixels ( "rgb" , {mat3R, mat3G, mat3B});
imgBlendBox << reshow;
);
getPixels ( "rgb") 명령은 각 이미지를 빨강, 녹색 및 파랑의 각 색상 구성 요소에 대해 하나씩 3 개의 행렬의 모음으로 반환합니다. 이미지를 혼합하려면 Image2에 백분율을 곱한 다음 Image1에 1을 뺀 값을 백분율로 더합니다. 그런 다음 결과 이미지 인 Image3으로 설정합니다. 그게 전부입니다. getPixels () 및 다른 이미지 기능에 대한 자세한 설명은 내 블로그 게시물을 확인하십시오. JMP 9로 이미지 향상 .
JMP에 참석했다면 디스커버리 서밋 2011 , 이것은 모두 당신에게 친숙하게 보일지도 모릅니다. 나는 그것을 프리젠 테이션의 일부로 시연했다. 이미지가 모든 것이 아니라 JMP 9에 있는지 확인하십시오. , 인터페이스를 약간 변경하기로 결정했음을 알았지 만.
언제나처럼, 당신이 생각하는 것을 알려주십시오.