이미지(jpg) 파일을 열고 분석을 수행하고 다음 이미지로 이동저는 JMP를 사용하여 자동 이미지 처리 및 분석을 수행하는 데 매우 관심이 있으며 스크립트(John Pontes 추가 기능을 주로 기반으로 함)와 그의 훌륭한 블로그에서 수집한 정보가 있습니다. JMP 블로그의 저자 John Ponte ) 이미지에서 한 번에 하나의 이미지에서 실행할 수 있지만 다음에 실제로 하고 싶은 것은 다음을 수행하는 '루핑' 스크립트를 만드는 것입니다.
- 디렉토리에 있는 .jpg 파일의 수를 계산합니다.
- 하나씩 이미지를 열고 사용 가능한 정보를 데이터 테이블에 넣습니다(John Pontes Image Analyzer 추가 기능 및 스크립트를 사용하고 있습니다).
- 기본 분석을 수행합니다(열 및 행의 평균 등).
- 이것을 jpg 파일 이름으로 저장합니다.
- 파일을 닫고 다음 이미지로 이동합니다.
나는 이것에 몇 가지 작은 문제가 있지만 주요 문제는 다음을 사용할 때
을 위한 ( 나 = 1 , 나 <= N 항목 ( 파일 ) , 나 ++,
만약에 ( 로 끝나다 ( 파일 [ 나 ] , ".jpg" ) ,
열려 있는 ( 파일 [ 나 ] ) ;
);
열린( 파일 ); 다른 프로그램(변경하고 싶지 않은 기본 프로그램)에서 jpg 파일을 엽니다. 다음(또는 더 나은 경우 다른 것)을 사용하여 JMP에서 열리도록 어떻게 얻습니까?
이미지 = 새 이미지 ( ".jpg 파일 이름" ) ;
승 = 새창 ( "영상" , 이미지) ;
그런 다음 분석을 수행하고 이 모든 것을 닫고 모든 이미지가 분석될 때까지 다시 순환할 수 있습니다.
[*Seligman 직원이 원본 게시물을 수정했습니다. 사용자 질문의 두 번째 부분이 원래 게시물에 여기에 추가되었습니다.]
많은 사과, 내 원래 게시물에서 충분히 명확하지 않았습니다. 내가하고 싶은 것은 픽셀 정보를 원본 이미지 자체가 아닌 데이터 테이블에 넣는 것입니다.
이것은 사실상 자동화 ImageToDatatable JSL 이미 작성되었지만 폴더 내의 각 이미지를 살펴보고 동일한 폴더에 있는 픽셀의 결과 분석과 함께 결과 데이터 테이블을 저장합니다.
RGB, I 및 HSL과 함께 x 및 y 좌표는 내가 필요한 분석을 수행하기에 충분합니다. 분석을 수행할 수 있는 예제 데이터 테이블을 첨부했습니다. 이 데이터를 가져온 원본 이미지도 첨부했습니다. 이 중 수천 개를 처리해야 하므로 한 번에 하나씩 수행하면 됩니다. 거의 불가능합니다.
원래 게시물의 잘못된 표현과 명확성 부족에 대해 다시 한 번 사과드립니다.
문안 인사
데이비드
Re: 이미지(jpg) 파일을 열고 분석을 수행하고 다음 이미지로 이동이 게시물에 대한 두 개의 답변을 솔루션으로 통합합니다.
직원의 파트 1 @Craige_Hales :
path = "$desktop/temp/";
files = Files In Directory( path );
For( ifile = 1, ifile <= N Items( files ), ifile++,
filename = files[ifile];
If( Right( filename, 4 ) == ".jpg",
pic = Open( path || filename, "jpg" );
jslcolor = pic << getpixels();
{red, green, blue} = Color To RGB( jslcolor );
{hue, lightness, saturation} = Color To HLS( jslcolor );
nr = N Rows( jslcolor );
nc = N Cols( jslcolor );
dt = New Table( Substr( filename, 1, Length( filename ) - 4 ),
addrows( nr * nc ),
New Column( "x" ),
New Column( "y" ),
New Column( "red", setvalues( red ) ),
New Column( "green", setvalues( green ) ),
New Column( "blue", setvalues( blue ) ),
New Column( "hue", setvalues( hue ) ),
New Column( "lightness", setvalues( lightness ) ),
New Column( "saturation", setvalues( saturation ) ),
);
irow = 0;
For( iy = 1, iy <= nr, iy++,
For( ix = 1, ix <= nc, ix++,
irow++;
dt:y[irow] = iy;
dt:x[irow] = ix;
)
);
// do something with dt
Wait( 1 );
Close( dt, "nosave" );
);
);
직원의 파트 2 @JohnPonte :
내가 제안할 한 가지는 이미지 파일에 Open() 대신 NewImage()를 사용할 수 있다는 것입니다. Open()은 무엇을 여는지 파악해야 하는 보다 일반적인 함수입니다. 그 과정에서 다른 프로그램에서 이미지를 여는 것과 같은 OS 기능을 사용합니다. img = NewImage("파일명.jpg"); 이미지 파일을 열고 JSL 이미지를 생성하여 핸들을 반환합니다.
다른 제안은 파일 교환에서 내가 했던 다른 스크립트(이미지 분석기 이전)를 사용할 수 있다는 것입니다. ImageToDatatable . 이미지 분석기와 유사하게 이미지를 데이터 테이블로 변환하지만 이미지 분석기의 나머지 부분을 모두 얻을 수는 없습니다.
루프에서 다음과 같이 래핑하십시오. @Craige_Hales (위)가 표시되고 이동하는 것이 좋습니다.
Re: 이미지(jpg) 파일을 열고 분석을 수행하고 다음 이미지로 이동<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />방금 이 게시물을 보고 여전히 도움이 되는 경우에 대비하여 몇 가지 요점을 추가할 것이라고 생각했습니다.
내가 제안할 한 가지는 이미지 파일에 Open() 대신 NewImage()를 사용할 수 있다는 것입니다. Open()은 무엇을 여는지 파악해야 하는 보다 일반적인 함수입니다. 그 과정에서 다른 프로그램에서 이미지를 여는 것과 같은 OS 기능을 사용합니다. img = NewImage("파일명.jpg"); 이미지 파일을 열고 JSL 이미지를 생성하여 핸들을 반환합니다.
다른 제안은 파일 교환에서 내가 했던 다른 스크립트(이미지 분석기 이전)를 사용할 수 있다는 것입니다. ImageToDatatable . 이미지 분석기와 유사하게 이미지를 데이터 테이블로 변환하지만 이미지 분석기의 나머지 부분을 모두 얻을 수는 없습니다.
루프에서 다음과 같이 래핑하십시오. 크레이지@JMP (위)가 표시되고 이동하는 것이 좋습니다.
Re: 이미지(jpg) 파일을 열고 분석을 수행하고 다음 이미지로 이동path = "$desktop/temp/";files = Files In Directory( path );For( ifile = 1, ifile <= N Items( files ), ifile++, filename = files[ifile]; If( Right( filename, 4 ) == ".jpg", pic = Open( path || filename, "jpg" ); jslcolor = pic << getpixels(); {red, green, blue} = Color To RGB( jslcolor ); {hue, lightness, saturation} = Color To HLS( jslcolor ); nr = N Rows( jslcolor ); nc = N Cols( jslcolor ); dt = New Table( Substr( filename, 1, Length( filename ) - 4 ), addrows( nr * nc ), New Column( "x" ), New Column( "y" ), New Column( "red", setvalues( red ) ), New Column( "green", setvalues( green ) ), New Column( "blue", setvalues( blue ) ), New Column( "hue", setvalues( hue ) ), New Column( "lightness", setvalues( lightness ) ), New Column( "saturation", setvalues( saturation ) ), ); irow = 0; For( iy = 1, iy <= nr, iy++, For( ix = 1, ix <= nc, ix++, irow++; dt:y[irow] = iy; dt:x[irow] = ix; ) ); // do something with dt Wait( 1 ); Close( dt, "nosave" ); ););Re: 이미지(jpg) 파일을 열고 분석을 수행하고 다음 이미지로 이동많은 사과, 내 원래 게시물에서 충분히 명확하지 않았습니다. 내가하고 싶은 것은 픽셀 정보를 원본 이미지 자체가 아닌 데이터 테이블에 넣는 것입니다.
이것은 사실상 자동화 ImageToDatatable JSL 이미 작성되었지만 폴더 내의 각 이미지를 살펴보고 동일한 폴더에 있는 픽셀의 결과 분석과 함께 결과 데이터 테이블을 저장합니다.
RGB, I 및 HSL과 함께 x 및 y 좌표는 내가 필요한 분석을 수행하기에 충분합니다. 분석을 수행할 수 있는 예제 데이터 테이블을 첨부했습니다. 이 데이터를 가져온 원본 이미지도 첨부했습니다. 이 중 수천 개를 처리해야 하므로 한 번에 하나씩 수행하면 됩니다. 거의 불가능합니다.
원래 게시물의 잘못된 표현과 명확성 부족에 대해 다시 한 번 사과드립니다.
데이비드.
Re: 이미지(jpg) 파일을 열고 분석을 수행하고 다음 이미지로 이동파일 유형 매개변수를 추가하십시오.그러면 반환된 값은 그림 개체가 됩니다.PNG, JPG, GIF를 혼합하여 사용하더라도 작동할 것입니다. 확장에 대한 OS 기본 프로그램으로 대체하지 않고 그림을 반환하도록 JMP에 지시합니다.
open("$desktop/setFont.PNG","PNG")
새 이미지(
Char to Blob(
"640745eJxkugdUU0v3PgyCIFKiotKDCsL10ovUEFBQRJodKQJKlyF0gpSIKIjSpEgnCgoqVVrooRk6obcACUaaG...
또는 newimage를 사용하여 그림 개체를 가져옵니다.
newimage("$desktop/setFont.PNG")
새 이미지(
Char to Blob(
"640745eJxkugdUU0v3PgyCIFKiotKDCsL10ovUEFBQRJodKQJKlyF0gpSIKIjSpEgnCgoqVVrooRk6obcACUaaG...
newimage는 더 간단합니다. 이미지가 URL 또는 Blob인 경우 open이 필요할 수 있습니다.
Re: 이미지(jpg) 파일을 열고 분석을 수행하고 다음 이미지로 이동이렇게 하면 폴더의 이미지 파일이 JMP 테이블에 저장됩니다.
// // ian.cox@jmp.com :2014년 6월 23일
이름 기본값은 여기 ( 1 ) ;
디렉토리 = 디렉토리 선택 ( "이미지 파일이 포함된 디렉토리 선택:" ) ;
fList = FilesInDirectory ( 디렉토리 ) ;
만약에 ( NItems ( fList ) < 1 , 인쇄 ( "폴더에 파일이 없습니다" || 디렉토리 || "." ) ; 삑 하는 소리 () ; 던지다 ()) ;
dt = 새 테이블 ( "의 이미지" || 디렉토리 ,
새 열 ( "파일 경로" , 성격 , 명사 같은 ) ,
새 열 ( "영상" , 표현 ) , 행 추가 ( NItems ( fList ))
) ;
~을 위한 ( 에프 = 1 , 에프 <= 니트템 ( fList ) , 에프 ++,
FP = 디렉토리 || "/" || fList [ 에프 ] ;
열 ( dt , "파일 경로" )[ 에프 ] = FP ;
노력하다 ( 열 ( dt , "영상" )[ 에프 ] = 새로운 이미지 ( FP )) ; // 이미지 파일이 아닌 경우 'Try()' 사용
) ;