Linux에서 파일, 특히 이미지 파일을 분석할 수 있는 프로그램이 있습니까? 이 프로그램은 16진수 편집기처럼 작동하고 이미지의 특정 영역을 그린 후 어떤 바이트가 변경되었는지 보여줍니다.
답변1
어떤 픽셀(및 어떤 채널)이 변경되었는지 확인하기 위해 처리된 이미지를 비교하는 방법을 찾고 있다면 ImageMagick의 compare
도구를 사용할 수 있습니다. ImageMagick 웹사이트는 이에 대해 광범위하게 다루고 있습니다:http://www.imagemagick.org/script/compare.php.
다음은 해당 페이지의 예입니다. 하지만 저는장미 사진은 이 웹사이트에서 가져왔습니다.. 이미지가 있고 rose.jpg
여기에 선명 기능을 실행하고 결과를 에 저장한다고 가정합니다 reconstruct.jpg
.
$ convert rose.jpg -sharpen 0x1 reconstruct.jpg
compare
그런 다음 도구를 사용하여 다음과 같이 위의 2개 이미지에서 이미지를 빌드할 수 있습니다 .difference1.png
$ compare rose.jpg reconstruct.jpg difference1.png
원본 이미지에서 힌트를 제거하려면 difference1.png
이 -compose src
옵션을 사용하여 차이 이미지에서 원본 이미지를 추가로 제거할 수 있습니다. 결과는 에서 볼 수 있습니다 difference2.png
.
$ compare -compose src rose.jpg reconstruct.jpg difference2.png
compare
이는 우리가 할 수 있는 일의 표면적인 부분일 뿐입니다. 또한 각 색상 채널의 차이점 등을 보여줄 수도 있습니다.
이게 뭐하는 거야 -compose src
?
관심이 있으시면 여기에서 자세히 설명합니다.
발췌-http://www.imagemagick.org/script/command-line-options.php#compose- 작성 연산자
이미지 구성 유형을 설정합니다. 바라보다알파 합성알파 합성에 대한 자세한 논의.
이 설정은 어떤 방식으로든 두 개 이상의 이미지를 병합하는 이미지 처리 연산자에 영향을 줍니다. 여기에는 운영자, -비교하다,-인조,-레이어 수인조,-단조롭게 하다,-모자이크,-레이어 수병합,-경계,-액자, 그리고-도.
이는 "composite" 명령의 주요 옵션 중 하나이기도 합니다.
답변2
명령줄 모드
파일의 16진수 내용을 터미널에 출력하는 xxd
또는 와 같은 다양한 명령줄 프로그램이 있습니다 . hexdump
이를 사용하여 vim
16진수 파일을 편집할 수 있습니다. 바라보다이 답변.
정말 이게 당신이 하고 싶은 일인가요? 특별히 이미지 파일을 분석하고 싶다고 하셨습니다. 이를 위해서는 프로그래밍 언어를 사용하는 것이 좋습니다.
프로그래밍 언어를 사용하다
이미지는 단지 숫자의 행렬일 뿐입니다. 예를 들어 RGB 이미지는 0부터 255까지의 값을 포함하는 3개의 행렬로 표현될 수 있습니다. 5x5픽셀의 빨간색 단색 이미지는 다음과 같습니다.
매트릭스 1(빨간색 평면):
255 255 255 255 255
255 255 255 255 255
255 255 255 255 255
255 255 255 255 255
255 255 255 255 255
매트릭스 2(녹색 평면):
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
매트릭스 3(파란색 평면):
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
이런 방식으로 이미지를 분석하기 위해 다양한 도구가 만들어졌습니다. 이러한 도구는 이미지 처리 세계에서 상당히 표준적입니다.
- MATLAB(Matrix Labs)은 원래 이러한 목적으로 만들어졌습니다. GNU Octave는 기본적으로 MATLAB과 호환되며 이를 대신하여 사용할 수 있습니다.
- Python은 해당 기능을 사용하여 이미지를 조작할 수 있는 훌륭한 오픈 소스 대안입니다.scikit 이미지팩.
그들은 모두 대화형이며 사용하기 매우 쉽습니다. >>
예를 들어, MATLAB은 명령을 입력할 때 메시지를 표시합니다. 컴파일할 필요가 없습니다.
MATLAB/옥타브 예
이미지를 읽으려면:
>> im = imread('Penguins.jpg');
이미지에서 빨간색 평면을 추출하려면:
>> red = im(:,:,1);
이는 :
연산자를 사용하여 이미지의 첫 번째 z 평면(빨간색 평면)에서 모든 x 좌표와 모든 y 좌표를 추출합니다.
빨간색 평면의 첫 번째 5x5 픽셀을 살펴보세요.
>> red(1:5, 1:5)
ans =
116 118 118 120 118
116 116 117 118 116
118 117 117 118 118
117 117 118 118 118
119 118 117 118 118
Python 예제를 게시하지는 않지만 똑같이 쉽습니다.
답변3
파일이 압축 또는 기타 인코딩 형식이 아니고 변경이 제한된 경우 cmp -l
.
단일 렌즈 테이프 카트리지에 이미지를 전달할 수 있는 최초의 TargaVista 그래픽 보드를 얻었을 때 간단한 명령줄(DOS) 업로드 유틸리티와 그리기 패키지가 함께 제공되었지만 문서는 없었습니다.
압축되지 않은 이미지의 크기가 18 * 3 * (너비 * 높이) 픽셀이라는 것을 쉽게 계산할 수 있습니다. 그런 다음 완전히 검은색 이미지를 만들고 각 파일의 한쪽 모서리에 기본 색상 픽셀이 하나만 있는 여러 파일을 내보냈습니다. 이러한 파일을 비교함으로써(SunOS로 전송한 후) 행 및 열 바이트 순서와 색상 순서를 쉽게 분석하고 렌더링된 이미지를 .² 로 압축 해제 cmp -
하는 프로그램을 작성할 수 있습니다..gif
.tga
1 이는 1990년이었고 / 를 지원하는 오픈 소스 라이브러리가.tga
.vst
없었습니다 . 2 우리에게 카드를 판매한 딜러는 미국에서 보낸 파일 형식 정보가 포함된 거의 읽을 수 없는 n번째 팩스를 우리에게 제공하는 데 몇 주가 걸렸습니다. 이를 기반으로 파일의 RunLengthEncoded 버전을 구현하고 프레임당 업로드 시간을 몇 초 단축할 수 있습니다.