모든 디지털 이미지가 궁극적으로 0-255 사이의 픽셀 값이 아닙니까?


56

이미지에 대한 몇 가지 믿을 수 없을 정도로 기본적인 (멍청한?) 질문이 있습니다. 특히 이미지 형식과 픽셀 값입니다.

용서하세요, 저는 사진 작가가 아닙니다. 나는 이미지로 작업하는 사람 일 뿐이며, 숫자와 행만 있습니다.

내 질문은 :

코어에서 사진이 단지 3 채널의 픽셀 값 [0, 255] X RBG 인 경우, 두 이미지 형식간에 어떤 차이가있을 수 있습니까? RAW가 TIFF와 다른 점은 무엇입니까? 이것이 모두 0-255 사이의 값으로 제한되지 않습니까? 숫자는 숫자입니다. 가능한 한 가지 형식 만 설정하면 안됩니까? 또는 높이와 너비가 동일한 두 개의 이미지가 동일한 파일 크기를 갖도록 고정되어서는 안됩니까?

또한 숫자의 관점에서 16 비트 이미지와 같은 것이 32 비트 이미지와 다른 점은 무엇입니까? 다시 말하지만, 이미지는 0-255 사이의 정수 값을 가진 배열 일뿐입니다.

컴퓨터 파일 시스템의 이미지가 0에서 255 사이의 정수로 구성된 3 채널 배열이라는 점을 계속 고려하면 이미지를 압축하는 지점은 무엇입니까? 예를 들어 JPG와 같은 손실 형식은 무엇입니까? 압축 알고리즘이 일부 픽셀 값을 254에서 255로 변경한다고 가정 해보십시오. 그래서? 파일 크기를 줄이거 나 시각적 품질에 어떤 영향을 미칩니 까?

이미지 데이터를 저장하는 방법에는 여러 가지가 있다는 것을 알고 있습니다. 그러나 기본 3 채널 RBC 이미지 이외의 것은 묻지 않습니다. 내가 아는 것은 누군가 누군가 나에게 이것들 중 하나를 건네 주면, 나는 이제 일련의 숫자를 가지고 있다는 것입니다. 하나의 숫자 배열이 0에서 255까지의 다른 숫자 배열과 다른 이유를 알 필요가 없습니다. 이것이 의미가 있기를 바랍니다. 이 질문은 RAW 형식으로 제한되지 않습니다! 오히려 픽셀 값의 배열에 관한 것입니다.


32
이 오해가 더 높은 수준에서 일하면서 오는 것인지 궁금해지기 시작했습니다. matlab 또는 다른 도구로 파일을 읽고 있습니까? 날 믿어, 원시 파일 수준에서 TIFF, PNG 또는 JPG 파일을 열고 읽으면 멋지고 깨끗한 RGB 매트릭스로 끝나기 전에 많은 일을해야합니다.
파이프

2
OP가 좀 더 컨텍스트를 제공 할 수 있다면 도움이 될 것입니다. 예 : 이미지 처리 코드와 관련이 있습니까?
remco

1
편집에 관해서 : 숫자 배열이 주어지면 그와 함께하십시오. 다른 배열은 어디에 있습니까? 비교할 배열이 2 개인 경우 다른 이야기입니다. 그것들은 사람의 눈과 비슷하게 보일 정도로 충분히 가까운 값을 포함 할 수 있습니다. 그리고 배열을 지정해, 손실 인코딩 후, 배열을 디코딩하면 원래 배열,하지만 충분히 하나의 가까운주지 않을 것이다
phuclv

3
TIFF, FITS 및 기타 비 압축 이미지를 가져 오기 위해 사용되는 소프트웨어 패키지에주의하십시오. 기본 MATLAB 및 Python 도구를 포함한 많은 패키지는 소스 크기에 관계없이 데이터를 8 비트로 자동 트리밍합니다. 이를 피하려면 특수 기능 / 라이브러리를 찾거나 자신의 도구를 굴려야합니다.
Carl Witthoft

2
@Monica Heddneck : 이미 좋은 대답에 무리가 있습니다. 아니요, 이미지는 RGB255 값의 픽셀 배열이 아니라 단순하지만 그 이유를 이해하지 못하는 이유를 이해하지 못합니다. 압축 형식입니다. 스토리지 또는 전송 중 데이터를 저장하기 위해 존재합니다. 모든 사진이 RGB255 트리플렛 일지라도 압축이 유리합니다.
가보

답변:


72

죄송하지만 기본 전제는 잘못되었습니다. 이미지 값당 8 비트의 RBG 픽셀 배열로 인코딩 수 있지만 다른 많은 방법이 있습니다.

  • 하나의 비트 / 채널을 가진 하나의 채널 (순수한 흑백)
  • x 비트 / 채널이있는 하나의 채널 (회색조 형식, x 는 일반적으로 8 또는 16, 256 또는 65536 값 제공),
  • 다양한 팔레트 기반 형식 (cf. GIF)
  • 필요한 비트 깊이로 원하는만큼 많은 채널을 가진 풀 컬러 (적어도 이론적으로는)

그리고 그것은 편집 /보기 중에 컴퓨터의 RAM에 저장된 이미지를위한 것입니다. 나는 존재하는 다양한 RAW 이미지 형식을 무시하고 있습니다 (이 글의 나머지 부분).

사진의 경우 가장 일반적으로 8, 16 또는 32 비트 / 채널의 3 개 채널이 있습니다 (일반적으로 정수이지만 적어도 일부 프로그램은 32 비트 부동 소수점 숫자로 내부적으로 작동 함). 프로그램에서 레이어 사용을 허용 할 때 4 번째 채널 (알파)이있는 경우가 종종 있습니다. 그리고 어딘가에 이미지 배열의 크기를 저장해야합니다.

이러한 다른 형식에는 여러 가지 이유가 있습니다. 메모리 내 형식의 경우 데이터의 크기와 속도 (4 개의 32 비트 채널보다 하나의 8 비트 채널을 조작하는 것이 훨씬 빠름)로 중요한 고려 사항이있었습니다. 요즘에는 그다지 중요하지 않지만 다양한 색상 공간으로 전체 색상 관리가 가능합니다. 이들 중 일부 (예 : prophoto RGB)는 눈에 띄는 밴딩을 피할 수있을 정도로 인접 색상 간의 차이를 작게 유지하려면 최소한 16 비트 / 채널이 필요합니다. 처리가 더 복잡 해짐에 따라 32 비트 부동 소수점 숫자를 사용하면 이점이 있습니다 (색상은 0.0에서 1.0 사이의 값으로 인코딩되며이 범위를 벗어나는 중간 값을 허용합니다).

이미지를 파일에 저장하고 동일한 메모리 내 데이터로 다시로드하려면 채널당 최소 비트 수를 메모리 내 형식으로 사용해야하며 다음에 대한 정보를 저장해야합니다. 이미지 크기, 비트 심도 및 색 공간.

해당 이미지의 사용자는 이미지에 대한 추가 정보 (자막, 제목, 이미지를 촬영 한 사람 등)를 저장하는 것을 좋아합니다. 이 정보를 저장하는 다양한 방법들.

그런 다음 파일 저장을 위해 이미지 데이터를 압축하는 여러 가지 방법이 있습니다. 가장 간단한 것 중 하나는 RLE (Run Length Encoding)입니다. 여기서 반복 된 픽셀 값이 발생할 때마다 카운트와 픽셀 값을 저장합니다. jpeg와 같은 다른 것들은 훨씬 더 복잡하지만 더 많은 압축을 제공합니다. 예를 들어, jpeg는 코사인 변환을 사용하고 (보이지 않는) 고주파 정보를 버려서 정보 손실 비용으로 높은 압축률을 제공합니다 (더 많은 것이 있지만 너무 길어지고 있습니다).

이것은 이미 디스크에 정보를 저장하는 많은 방법을 제공하지만, 어떤 방법을 선택하더라도 이미지를로드 할 때 올바르게 해석 할 수 있도록 형식을 잘 지정해야합니다.

그런 다음 기존 형식이 항상 처리 할 수없는 무손실 압축 기술이 지속적으로 개발되고 있습니다.

따라서 저장된 정보의 충실도, 사용 된 디스크 공간 및 읽기 속도, 쓰기 및 전송 속도 (비 압축 TIFF의 크기 및 적절한 품질 jpg 비교)와의 다양한 균형을 유지하면서 다양한 파일 형식으로 끝납니다. .


수정 된 질문을 본 후 몇 가지 추가 측면 :

메모리 내 이미지를 처리하면 하나 이상의 배열 형태가됩니다. 이때 원래 파일 형식은 더 이상 역할을 하지 않아야합니다 . 8 비트 / 채널로 데이터를 처리한다고 가정합니다.

그러나 처리 된 이미지 또는 원시 이미지가 있는지 알아야합니다. 두 이미지 사이에는 두 가지 중요한 차이점이 있습니다.

  • 원본 이미지는 일반적으로 픽셀 당 1 개의 색상을 가지며 픽셀은 일반적 으로 4 픽셀의 제곱 당 2 개의 녹색, 1 개의 빨간색 및 1 개의 파란색 픽셀 로 Bayer 배열배열 됩니다. 값은 장면 강도에 비례합니다 (매우 낮고 매우 높은 값 제외).
  • 처리 된 이미지는 3 개의 숫자 값을 포함하는 2D 레코드 배열 또는 컬러 평면 (R, G, B 각각에 대해 3 개의 2D 배열)으로 배열 될 수 있습니다. 또한이 값은 일반적으로 장면 강도와 비례 하지 않습니다 . 더 나쁜 것은, 픽셀 값과 장면 강도 사이의 정확한 관계는 이미지의 처리에 달려 있습니다. 그리고 사람의 눈의 반응에 따라 색상 간의 균형이 조정되었습니다 (화이트 밸런스, 빨강 및 파랑이 녹색에 비해 증폭됩니다).

따라서 픽셀 당 3 개의 색상 값을 가진 원시 이미지를 얻는 경우 해당 원시 이미지는 이미 약간의 처리를 거쳤 습니다 (최소한의 데모 사이 싱 또는 4 개의 원시 픽셀에서 1 개의 이미지 픽셀로의 간단한 비닝). 허용 여부는 응용 프로그램에 따라 다릅니다.


이미지를 표현하는 다양한 방법에 약간 덜 관심이 있지만 대신 두 개의 3 채널 숫자 행렬이 주어지면 이들 중 하나를 다른 것과 다르게 만드는 것은 무엇입니까? TIFF와 RAW가 둘 다 3 차원 배열 인 경우 차이점은 무엇입니까?
Monica Heddneck

4
아마도 16 비트 이미지가 채널 당 16 비트라고 말했을 때 혼란 스럽습니다. 컴퓨터 그래픽 세계에서 16 비트 이미지는 총 3 개의 채널 (일반적으로 5 개의 빨간색, 6, 녹색, 5 개의 파란색)을 합한 16 비트입니다. 16 비트 색상을 보는 사람이 누가 그것을 사용하는지에 따라 그 용어에 대해 두 가지 의미가 있음을 알 수 있도록 주석으로 지적하고 싶었습니다.
Cort Ammon

"4 개의 32 비트 채널보다 하나의 8 비트 채널을 조작하는 것이 훨씬 빠릅니다." "4 개의 8 비트 채널보다 하나의 32 비트 채널을 조작하는 것이 훨씬 빠르다는 것을 의미하지 않습니까?"
l0b0

1
@MonicaHeddneck 행렬 중 하나에 RGB 데이터가 포함되고 다른 하나에 HSV 데이터가 포함 된 경우 (예 : HSV 데이터) 두 어레이의 치수와 비트 깊이는 동일하며 디스플레이 장치로 렌더링 될 때 동일한 모양 ( + ) 그러나 두 배열에 저장된 데이터는 동일하지 않습니다. ( + ) 실제로는 888RGB와 888HSV가 각각의 색 영역에 2 ^ 24 "점"을 가지고 있지만 두 점 세트간에 일대일 매핑이 없기 때문에 실제로는 정확히 같지 않습니다. 그러나 실제로는 사람의 눈과의 차이를보기가 매우 어려울 것입니다.
dgnuff

실제로 hdr 32 부동 비트 색상의 포인트는 0에서 1로 인코딩되지 않지만 실제로는 0으로 인코딩하면 정수를 대신 사용합니다. 실제 조명과 마찬가지로 실제로 상한이 없습니다. 그러나 당신은 그것의 조각을 볼 수 있습니다. 이것은 여러 가지 이유로 유용하지만, 당신이 진정한 에너지가 여전히 하늘과 예를 들어 20 %의 선택도 같은 것들에 대한 많은 중요한있는 캡처 한 후 3D의 반사에 예를 들어 그들을 고소하는 경우
joojaa

48

코어에서 사진이 3 채널의 픽셀 값 [0, 255] X RBG 인 경우,

그러나 사진은 "핵심 에서조차도 단지 3 채널의 픽셀 값" 이 아닙니다 . 컴퓨터 화면은 일반적으로 RGB 픽셀 배열로 구성되므로 컴퓨터 화면에 이미지를 표시하려면 어느 시점에서든 모든 이미지 데이터를 RGB 픽셀 배열에 매핑해야하지만 해당 데이터는 이미지 데이터의 특정 렌더링. 이미지의 데이터는 픽셀 값 스트림으로 구성되지 않을 수 있습니다. 이미지에서 픽셀 값을 얻으려면 데이터 형식이 어떻게 지정되는지 알아야합니다.

그렇다면 두 이미지 형식간에 어떤 차이가있을 수 있습니까? RAW가 TIFF와 다른 점은 무엇입니까? 이것이 모두 0-255 사이의 값으로 제한되지 않습니까?

이러한 형식 중 어느 것도 RGB 값의 사각형 배열을 반드시 보유하지 않기 때문에 두 가지 좋은 예 입니다.

RAW는 전혀 단일 형식이 아니며 이미지 센서에서 직접 기록 된 데이터를 포함하는 파일의 일종입니다. 따라서 RAW 파일에는 다양한 센서 사이트에서 읽은 전압을 나타내는 일련의 값이 포함될 수 있습니다. 해당 사이트는 다음 과 같은 이미지 픽셀,하지만 그들은있어 하지 RGB 픽셀. RAW 파일에서 RGB 픽셀을 얻으려면 센서에 대한 정보, 당시의 카메라 설정 등의 컨텍스트에서 해당 데이터를 해석해야합니다. 즉, 16 진 편집기에서 RAW 파일을 열 수 있습니다 원하는 모든 것을 볼 수 있지만 단일 RGB 값을 찾을 수는 없습니다.

TIFF는 태그가 지정된 이미지 파일 형식을 나타내며 이미지의 다양한 표현을 포함 할 수 있기 때문에 매우 흥미로운 형식입니다. 단일 TIFF 파일에는 축소판 그림, 화면 해상도 이미지 및 인쇄 해상도 이미지와 같은 여러 크기의 "동일한"이미지가 포함될 수 있으며 컬러 및 회색조 버전도있을 수 있습니다. 팩스 기가 일반적으로 데이터를 TIFF 파일로 전송한다는 것을 알고 있습니까? TIFF 파일에서 RGB 픽셀을 가져 오려면 TIFF 형식뿐만 아니라 해당 파일 내의 특정 이미지 표현 형식도 이해해야합니다.

숫자는 숫자입니다. 가능한 한 가지 형식 만 설정하면 안됩니까?

아니요. 사람마다 요구 사항이 다르기 때문에 다양한 이미지 형식이 있습니다. JPEG의 손실 압축은 매우 작은 이미지 파일을 얻는 데 유용하지만 여러 번 편집해야하는 이미지에는 적합하지 않습니다. 일부 형식은 인터레이스 를 사용하므로 여러 해상도에서 이미지를 매우 빠르게 읽을 수 있습니다. 그리고 각 형식마다 고유 한 장단점이 있습니다.

또는 높이와 너비가 동일한 두 개의 이미지가 동일한 파일 크기를 갖도록 고정되어서는 안됩니까?

아뇨, 끔찍 해요 모든 이미지 파일의 크기가 기본적으로 width * height * 3(24 비트 색상으로 가정) 되어야 한다면 많은 저장 공간을 낭비하게 됩니다. 대부분의 사진에는 많은 중복성, 즉 같은 색상이 여러 번 반복되는 영역이 포함되어 있습니다. 저장 공간을 절약하기 위해 중복 정보를 제거하는 것이 좋습니다. 예를 들어이를 수행하는 한 가지 방법은 실행 길이 인코딩입니다.또는 RLE. 예를 들어, 모두 흰색 인 4195 개의 연속 픽셀 영역이있는 경우 단순히 다음에 많은 흰색 픽셀을 저장하는 대신 "다음 4195 픽셀은 모두 {255, 255, 255}"로 인코딩하는 것이 훨씬 효율적입니다. 파일. RLE는 실제로 일부 이미지 형식으로 사용되지만 많은 형식은 훨씬 더 많은 공간을 절약하는 훨씬 더 정교한 구성표를 가지고 있으므로 하드 드라이브 나 메모리 카드에 더 많은 이미지를 저장할 수 있습니다. 또한 이미지를 다른 사람에게 훨씬 빠르게 보낼 수 있습니다.

컴퓨터 파일 시스템의 이미지는 0에서 255 사이의 정수로 구성된 3 채널 배열이라는 점에서 계속해서 이미지를 압축하는 지점은 무엇입니까? 예를 들어 JPG와 같은 손실 형식은 무엇입니까?

요점은 파일을 훨씬 작게 만든다는 것입니다. JPEG 압축은 종종 파일 크기를 10 배 이상 줄입니다. 즉, 지정된 저장 장치에 더 많은 이미지를 넣을 수 있고, 더 빠르게 복사하고, 더 빠르게 열 수 있으며, 업로드하고 다운로드 할 수 있습니다. 훨씬 작은 공간에 동일한 이미지를 저장하면 자원을보다 효율적으로 사용하므로 비용이 절감됩니다. 인터넷에서 이용할 수있는 정보의 상당 부분이 이미지와 영화로 구성되어 있고 압축이 없으면 더 많은 데이터 센터가 필요하고 훨씬 더 많은 에너지를 소비 할 것입니다.

압축 알고리즘이 일부 픽셀 값을 254에서 255로 변경한다고 가정 해보십시오. 그래서? 파일 크기를 줄이거 나 시각적 품질에 어떤 영향을 미칩니 까?

위의 RLE 예를 고려하십시오. 큰 빈 벽을 포함하는 사진이 있다고 가정 해 봅시다. 이미지에서 약간 눈에 띄게 약간의 픽셀이 산란되는 경우를 제외하고 사진의 넓은 영역은 모두 같은 색상입니다. 이러한 픽셀은 압축 효과를 줄입니다. "다음 50 만 픽셀은 모두 {243, 251, 227}"이라고 말할 수있는 대신, 길이가 훨씬 더 작은 청크를 인코딩해야합니다. 압축 알고리즘이 1 % 또는 2 % 이하의 픽셀 만 변경하여 작은 변경을하도록 허용하면 이미지를 지각 적으로 변경하지 않고도 훨씬 높은 압축률을 얻을 수 있습니다. 그것은 절충입니다 : 당신은 파일 크기를 크게 줄인 대신 원본 이미지에 소량의 정보를 포기합니다. 정확히 그 선을 그리려는 위치가 변경 될 수 있으므로 JPEG와 같은 손실 형식을 사용하면 원하는 압축 수준을 선택할 수 있습니다.


1
복잡한 주제에 대한 매우 명확하고 포괄적 인 설명을 위해 찬성했습니다! 나는 그것으로부터 많은 것을 배웠다고 생각합니다. 무손실 압축을 관리하는 효과적인 방법 중 하나가 길이를 인코딩하는 것이 좋은지 궁금하지만, 나중에 픽셀 당 예외를 추가하기 위해 이미지를 다시 통과해야합니다. "23-400에서 검은 색"과 같은 다음 "302는 흰색"으로 해당 픽셀을 덮어 씁니다. 23-301 대신 검은 색, 302는 검은 색, 303-400은 검은 색입니다. 나는 이것이 실제로 적어도 하나의 압축 형식이 그것을 처리하는 방식이라고 생각합니다.
Ruadhan2300

1
@ Ruadhan2300-실제로 있습니다. 예를 들어 en.wikipedia.org/wiki/Lossless_JPEG 를 참조하십시오. 각 픽셀의 색상을 예측하는 방법 (런 길이 인코딩보다 다소 복잡함)을 사용하고 해당 예측과 실제 픽셀 값의 차이를 인코딩합니다.
Jules

18

@remco의 환상적인 답변 외에도 동일한 목적을 위해 다른 코덱이있는 이유를 추가하고 싶습니다.

코덱은 다음과 같이 설계되었습니다.

  • 무손실 수 손실
  • 빠른 인코딩 파일 크기 줄이기
  • 비대칭 vs. 대칭 인코딩 / 디코딩
  • 소프트웨어와 호환
  • 다른 압축 수준 / 상황에서 거의 무손실로 인식
  • 다음을 포함하여 다른 코덱이 제공하지 않는 기능이 있습니다.
    • 로열티가없는
    • 레이어 지원
    • 알파 채널 (예 : RGBA) / 투명도 지원
    • 빠른 웹보기 제공
    • 높은 비트 깊이 지원
    • 여러 색 공간 지원 (RGB / CMYK)
    • 메타 데이터 / 버전 관리 / ...

그 중 일부는 상호 배타적입니다. 그 때문에 많은 코덱이 남아 있습니다.


몇 가지 예

참고 : 코덱 목록이 완성되지 않았거나 모든 기능 (또는 부족)이 언급되지 않았습니다. 이 답변이 누군가에게 유용하다고 판명되면 더 많은 정보를 추가 할 수 있습니다 (그리고 조금 더 정확할 수 있습니다).

가장 일반적으로 알려진 형식은 JPEG 입니다. 매우 광범위하게 지원되지만 오래된 형식입니다. DCT (Discrete Cosine Transformation)를 사용하므로 최고 품질 설정에서 매우 우수한 품질을 제공하지만 낮은 값으로 차단이 나타납니다.

그리고 JPEG 2000 JPEG를 대체하기 위해 함께 온 : 그것은 낮은 품질 설정에서 더 나은 품질을 제공는 높은 품질의 설정에서 JPEG로 거의 같은 품질을 제공하면서 그래서는 웨이블릿 변환을 기반으로합니다 (블록은 약간 모호한 ). 또한 JPEG 2000은 관심있는 영역 (그림의 한 영역에서 고품질, 다른 곳에서는 낮은 품질) 및 16 비트 지원을 제공합니다. 불행히도 (?) JPEG보다 계산 비용이 높고 라이센스 문제로 인해 JPEG 2000은 JPEG만큼 광범위하게 지원되지 않습니다.

PNG 는 널리 알려진 또 다른 형식입니다. 손실이없고 알파 채널을 지원하지만 RGB가 아닌 색상 공간 (CMYK 등)은 지원하지 않습니다. 따라서 "온라인 전용"형식입니다.

그런 다음 OpenEXR 과 같은 VFX 형식이 있습니다 . OpenEXR은 무손실이며 최대 64 비트를 지원하며 빠르게 인코딩 / 디코딩합니다. 주로 VFX 산업에서 중간 형식으로 사용됩니다.

TIFF 는 사진가들에게 매우 인기있는 또 다른 무손실 형식입니다. 압축의 경우 none / ZIP / RLE / LZW / JPEG를 제공합니다. 최대 32 비트를 지원합니다. 압축을 선택할 수 있기 때문에 적응성이 뛰어나지 만 무손실로 인해 오프라인 형식에 가깝습니다.

HEIF 는 최신 이미지 코덱 중 하나입니다. HEVC / h.265와 동일한 압축을 사용하므로 JPEG보다 압축률이 더 좋습니다. 그러나 이것은 새롭고 특허를 받기 때문에위의 어느 것보다광범위하게 지원되지 않습니다.

RAW 이미지 실제 사진 도 참조하십시오. 실제 : 센서는 원시 (따라서 이름) 센서 판독 데이터를위한 컨테이너입니다. 데이터를 해석하는 방법을 알고있는 소프트웨어에서만 사진을 얻을 수 있습니다. 이것이 Lightroom / Capture One / DarkTable / ...과 같은 RAW 변환기가 Canon에 대해 * .CR2와 같이 이미 지정된 컨테이너를 사용하는 새 카메라를 지원하도록 업데이트해야하는 이유입니다. 14 비트 RAW가 동일한 RAW에서 내 보낸 32 비트 TIFF보다 더 많은 편집 옵션을 제공하는 이유이기도합니다.


이해 : 무손실 대 무손실

나는 아직도 당신이 정말로 무엇을 요구하는지 확신하지 못하므로, 무손실 대 무손실에 대한 작은 설명을 추가하는 것이 아프지 않을 것이라고 생각했습니다.

무손실 압축 은 데이터를 압축하기 위해 RLE (run-length encoding) / Huffman coding / ... 을 수행하여 작동합니다. 데이터 자체는 변경되지 않지만 더 작은 패키지로 저장됩니다. 예를 들어 RLE을 사용하십시오. 예를 들어 RLE의 R 채널 비트 스트림 (픽셀 0,0에서 픽셀로 0,11)은 255,255,255,255,255,215,215,235,100,000,000,000이것을 인코딩합니다. 이것은 52552215123511003000훨씬 작으며 4 자리 그룹으로 저장되고 첫 번째 숫자는 카운터이고 마지막 세 숫자는 값이며 full을 재구성 할 수 있습니다 255,255,255,255,255,215,215,235,100,000,000,000.

반면에 손실 압축 은 무손실 압축보다 훨씬 더 압축하려고합니다. 이를 위해 손실 코덱은 일반적으로 인식하지 못하는 것을 제거하려고 시도합니다. 예를 들어 YUV( YCbCr, 실제) 모델 JPEG (및 거의 모든 비디오 코덱) Y = Luminance에서 Cb = Chrominance Blue,,을 사용 Cr = Chrominance Red합니다. 인간은 4:2:0(모든 픽셀은 휘도 값을 갖지만 색상은 2x2 블록 단위로 교대로 저장 됨)과 4:4:4(모든 픽셀은 휘도 및 두 컬러 채널을 가짐 ) 인코딩 된 화상 사이의 차이를 만들 수 없습니다 . 이것은 생리학 때문 입니다. 색상의 차이를 볼 수없고 휘도의 차이도 볼 수 있습니다.

대부분의 경우 잘 작동하지만 MP3 파일과 비교하면 거의 192kbps와 320kbps의 차이를 만들 수있는 사람은 거의 없지만 64kbps 이하로 떨어지면 상황이 매우 빠릅니다. 또한 재 인코딩은 원치 않는 아티팩트가 나타날 수 있으므로 품질을 더욱 떨어 뜨립니다 (예 : JPEG의 경우 고품질 인코딩의 작은 블록이 추가 인코딩에서 그림의 세부 사항으로 간주 됨).


결론

이미지 형식이나 그 기능에 신경 쓰지 않으면 어느 쪽이든 괜찮습니다. 충분히 높은 품질 설정을 사용하면 설정간에 차이를 보지 못할 수 있습니다.

그러나 특정 기능이 필요한 경우 해당 기능을 갖춘 코덱이있을 수 있습니다.


코덱 속성 목록에 다음 두 가지 사항을 추가하겠습니다. 1. 점진적 렌더링 (현재는 많이 사용되지 않지만 PNG에서 큰 기능이었습니다) 2. 애니메이션 (애니메이션 PNG, JPEG, GIF 등이 있습니다.)
Sulthan

@Sulthan 저는 프로그레시브를 추가하는 것에 대해 생각할 것입니다. 여러분이 말하는 것처럼 오늘날 중요한 것은 아니며 애니메이션은 사진과 관련된 기능이 아닙니다. 어쨌든 : 입력 주셔서 감사합니다!
flolilo

2
"이미지를 해석하는 방법을 알고있는 소프트웨어에서만 이미지를 얻을 수 있습니다". 소프트웨어가 JPEG 데이터를 해석하는 방법을 모르면 이미지로 표시하거나 처리 할 수 ​​없습니다. 원시 파일은 이미지를 재구성 할 수있는 데이터를 저장하며 특정 방식으로 구성됩니다 (아마도 카메라 모델에 따라 다름). 이미지 형식입니다. 단지 하나의 형식이 아니라 "카메라 X의 원시 형식"입니다.
n0rd

1
@ n0rd 물론입니다. 그러나 5D Mk III의 JPEG는 Nikon P7000 또는 EOS M6의 사양과 동일한 사양을 충족합니다. .CR2"저만 봐요, 캐논 카메라의 RAW 파일입니다! 감히 나에게 읽어주세요!" -당신이 훨씬 더 명확한 언어로 말했지만, 그것은 내 요점이었습니다.
flolilo

LAB 및 XYZ 공간은 일부 이미지 형식으로 존재합니다.
joojaa

10

코어에서 사진이 3 채널의 픽셀 값인 경우 [0, 255] X RBG

그것은 심각하게 깨어진 가정이며 나머지 질문은 그것을 벗어나지 않고는 대답 할 수 없습니다.

RAW가 TIFF와 다른 점은 무엇입니까? 이것이 모두 0-255 사이의 값으로 제한되지 않습니까?

"원시"라는 용어는 "카메라 미가공"이미지 또는 헤더가없는 미가공 이미지 데이터를 포함하는 파일의 두 가지를 의미 할 수 있습니다.

"카메라 원시"이미지는 센서에서 나오는 원시 데이터를 저장합니다. 대부분의 최신 카메라 센서에는 8 비트 이상의 ADC가 있지만 각 위치에서 하나의 색상 구성 요소에 대한 강도 데이터 만 수집합니다. 렌즈에 의해 지오메트리가 왜곡 될 수 있으며, ADC의 강도 값은 사람의 강도 인식을 잘 반영하지 못할 수 있으며, 색상 구성 요소는 모니터에서 사용하는 것과 정확하게 일치하지 않을 수 있습니다.

원시 센서 데이터를 좋은 품질의 RGB 이미지로 변환하기 위해서는 보간과 관련된 복잡한 매핑 프로세스가 필요하며이를 수행하는 올바른 방법은 없습니다. 또한 색상 구성 요소를 보간해야하기 때문에 RGB 이미지가 원시 데이터보다 더 커질 수 있습니다.

변환은 카메라에서 수행 될 수 있지만 종종 사진 작가가 원시 데이터를 저장하여 사실 이후 처리를 조정할 수 있습니다.

Tiff는 다양한 메타 데이터를 사용하여 이미지를 다양한 형식으로 저장할 수있는 복잡한 파일 형식입니다. 실제로는 압축되지 않거나 손실없이 압축 된 RGB 또는 CMYK 이미지를 저장하는 데 일반적으로 사용됩니다.

헤더가없는 원시 이미지 데이터가 포함 된 파일은 읽기 전에 형식과 크기를 알아야하기 때문에 거의 사용되지 않습니다. 일부 이미지 처리 도구는이를 지원합니다.

또한 숫자의 관점에서 16 비트 이미지와 같은 것이 32 비트 이미지와 다른 점은 무엇입니까?

불행히도 "n 비트"는 두 가지 다른 것을 의미 할 수 있습니다. 모든 색상 구성 요소가 비트 수 (예 : 빨강의 경우 5 비트, 파랑의 경우 5 비트, 16 비트 또는 8 비트의 빨강, 8 비트의 녹색, 8 비트의 파란색 및 8 비트의 경우 6 비트)로 채워져 있음을 의미 할 수 있습니다. 또는 32 비트의 경우 알파)는 또는 각 색 성분이 각 픽셀 위치에서 n 비트의 정보를 갖는 것을 의미 할 수있다.

컴퓨터 파일 시스템의 이미지는 0에서 255 사이의 정수로 구성된 3 채널 배열이라는 관점에서 계속

다시이 관점은 명백한 잘못이다.

파일은 일련의 바이트이지만 그 바이트는 "0-255 사이의 정수로 구성된 3 채널 배열"이 아닙니다.

그런 이미지를 저장할 수 있습니다. 일부 도구는 이러한 파일 읽기 및 쓰기를 지원하지만 문제는 파일을 읽기 전에 파일에 대해 알아야한다는 것입니다. 3000 바이트 크기의 파일이 있다고 가정하면 1000 24 비트 RGB 픽셀이 있습니까? 3000 8 비트 그레이 스케일 픽셀? 팔레트에서 3000 8 비트 픽셀? 색상 구성 요소는 어떤 순서입니까? 이미지는 어떤 모양입니까? RGB 또는 BGR 순서의 색상 구성 요소입니까? 이러한 질문에 대한 답을 모르면 그러한 파일을 의미있게 읽을 수 없습니다.

따라서 실제 이미지 형식은 일반적으로 파일 형식, 이미지 크기 및 실제 이미지 데이터 저장 방법을 식별하는 하나 이상의 헤더로 시작합니다. 또한 선택적 메타 데이터가 포함될 수 있습니다.

예를 들어 JPG와 같이 손실이 많은 형식으로 이미지를 압축하는 요점은 무엇입니까? 압축 알고리즘이 일부 픽셀 값을 254에서 255로 변경한다고 가정 해보십시오. 그래서? 파일 크기를 줄이거 나 시각적 품질에 어떤 영향을 미칩니 까?

압축 알고리즘은 단순히 "값 변경"이 아니라 정보를 완전히 다른 방식으로 인코딩합니다. 예를 들어 JPEG는 대략 다음과 같이 설명 할 수 있습니다.

  • RGB에서 YUV로 데이터 변환
  • (선택 사항) 하나 또는 두 차원에서 크로마 채널의 해상도를 2 배 줄입니다.
  • 각 채널의 데이터를 8x8 블록으로 분할하십시오.
  • 이산 코사인 변환을 사용하여 블록을 주파수 영역으로 변환
  • 고주파 정보의 정밀도를 줄이면서 저주파 정보를 유지하면서 결과를 정량화합니다.
  • 가변 길이 인코딩 체계 (허프만 코딩 또는 산술 코딩)를 사용하여 결과 숫자를 바이트 시퀀스로 인코딩
  • 해당 바이트를 적절한 헤더와 함께 파일에 저장하십시오.

반면에 무손실 압축 형식은 종종 범용 데이터 압축 알고리즘을 기반으로하지만 때로는 PNG와 같은 이미지 별 사전 처리를 보완하는 경우가 있습니다.

  • 데이터를 지원되는 형식 중 하나로 변환하십시오 (예 : 순서대로 빨강, 녹색 및 파랑 각각에 대한 비트)
  • 이미지의 각 라인에 대해 "필터링"프로세스를 수행하는 경우 서버 필터링 옵션 (필터링이 전혀 포함되지 않음)이 있지만 일반적인 목표는 픽셀이 인접 픽셀과 유사 할 가능성이있는 이미지 특정 정보를 가져 와서 인코딩하는 것입니다. "delate"가 다룰 수있는 방식으로
  • "deflate"범용 압축 알고리즘을 사용하여 필터링 된 데이터를 압축하십시오.
  • 해당 바이트를 적절한 헤더와 함께 파일에 저장하십시오.

1
이것은 아마도 가장 좋은 대답 일 것입니다. 이미지를 저장하고 압축하기위한 서로 다른 파일 형식과 이미지가 0-255의 숫자로 가정한다는 결함에 대해
이야기합니다.

구성 요소 순서를 언급하는 데 좋습니다. 나는 OpenGL 2 ish와 같은 것들이 RGB 순서의 다른 순열을 읽는 함수를 가질만한 이유가 있다고 가정합니다. 솔직히 표준이나 메타 데이터가 없으면 선의 길이는 물론 이미지의 원점이나 방향을 알 수 없습니다. 팔레트를 처리 한 후에도 파편 스프라이트를로드 한 경우 왼쪽 하단에서 시작해야하는 색상이 있고 열로 올라간 다음 오른쪽으로 행으로
올라갑니다

구성 요소 순서가 엔디안과 비슷하다는 함축을 얻습니다. 일부 시스템 공급 업체는 RGB를 선택하고 다른 시스템 공급 업체는 (아직 창) BGR을 선택했습니다.
피터 그린

9

이 가정이 잘못된 여러 가지 이유가 있으며 모두 한 가지로 귀결됩니다.

실제로 어떤 규모를 사용하고 있습니까?

그리고 그것은 조금 더 세분화 될 수 있습니다 :

255 란 무엇입니까?

"색상"은 물리적 우주의 속성이 아닙니다. 마음에서 일어나는 느낌입니다. 그리고 여기에는 "파란색", "녹색"및 "빨간색"과 같은 것들이 포함됩니다. "파란색 없음"을 의미하는 0에서 "모두 파란색"을 의미하는 255까지의 스케일. 실제로 255는 blue의 플라토닉 이상을 나타낼 수 없습니다 . 왜냐하면 실제 세계에는 그러한 완벽한 것이 없기 때문입니다. 따라서 다음을 의미합니까?

  • 당신 앞에있는 기기로 만들 수있는 가장 푸른 것?
  • 대부분의 화면과 프린터 / 잉크 / 종이 조합으로 표현할 수 없더라도 휴먼 비전 시스템 관점에서 순수한 파란색과 이상적으로 일치합니까?
  • 다양한 기기에서 합리적으로 표현 될 수있는 꽤 좋은 파란색?
  • 인간의 시야 범위를 벗어난 파란색이지만 RGB 삼중 범위 내에있는 대부분의 색상을 커버 할 수 있습니까?

생각 나는 소리? 아니! 이들은 실제로 실제 예입니다. 각 선택의 표현을 확인하십시오. 곡선 영역은 인간 비전 색 공간의 2D 슬라이스이며, 삼각형은 빨강, 녹색 또는 파랑에 대한 특정 선택이 주어지면 표현 될 수있는 영역을 나타냅니다.

먼저, 다음은 현재 중급 장치를 대표하는 랩톱 화면의 프로필입니다.

ThinkPad X260

이제 여기 Adobe RGB 공간이 있습니다. 내 화면에서 볼 수있는 것보다 이것이 더 큰지 확인하십시오!

AdobeRGB

따라서 여기에 sRGB가 있습니다. 사실상 아무것도 지정하지 않을 때 가정되는 사실상의 표준 및 기본 공간입니다. 대부분의 상황에서 "충분히"충분해야합니다.

sRGB

마지막으로, 거의 모든 인간의 시각에 맞도록 삼각형을 크게 만들기 위해 가상의 색상 을 기본으로 사용하는 ProPhoto RGB .

ProPhoto RGB

이제 빛 자체와 색채 적응 ( 인간 비전 시스템의 환경에 대한 인식 조정 기능)을 사용하십시오. 실제로, 능력뿐만 아니라, 원하는지 아닌지에 발생하는 일 . "순청색" 은이 백열등 아래있을 수있는 것처럼 파란색으로 보이는 것을 의미 합니까? 햇빛 대신 사진을 찍는다면 그 가치는 무엇입니까?

"255"는 많은 다른 것을 의미 할 수 있습니다.

0은 무엇입니까?

이것은 매우 간단합니다. 0이 되려면 어떻게 검정이 필요합니까? 그것은인가 vantablack 검은 색? 그것이 사실이지만 장면의 모든 실제 음영이 훨씬 덜 극단적 인 경우 장면에없는 동적 범위에 대한 많은 잠재적 인 값을 "폐기"하고 색상과 같이 액세스 권한이있는 장치 나 프린터로 대표되지 않습니까?

당신의 곡선은 무엇입니까?

엔드 포인트가 생기면 어떻게 서로간에 접근 할 수 있습니까? 밝기에 대한 인간의 인식은 결정적으로 비선형 입니다. 0-255 스케일에서 100은 50의 두 배가되어야합니까, 아니면 더 큰 요소 여야합니까? 예를 들어 3과 4 사이의 지각 적 차이가 203과 204 사이의 차이와 같아야합니까?

로그 스토리지 시스템을 사용하기로 결정한 경우, 사람의 시각, 데이터 최적화 또는 다른 것에 맞게 곡선을 최적화해야합니까?

많은 다른 요구에 대한 많은 가능성이 있습니다.

압축시

물어.

압축 알고리즘이 일부 픽셀 값을 254에서 255로 변경한다고 가정 해보십시오. 그래서? 파일 크기를 줄이거 나 시각적 품질에 어떤 영향을 미칩니 까?

최신 압축 알고리즘은 이보다 더 복잡하지만 좋은 예를 제공합니다. 16 진수를 사용 FF하여 255 FE를 나타내고 254를 나타내 겠습니다 . 압축 형식으로 런 길이 인코딩 을 사용한다고 가정하겠습니다 . 간단하게하기 위해 색상 대신 흑백으로 가정하겠습니다. 이를 통해 다음과 같은 데이터 행이있는 경우 :

FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 

아주 간단하게 압축 할 수 있습니다

16×FF 

... 이것은 꽤 명백한 저축입니다. 기본적으로 16 바이트는 2 개 (카운트는 1 개, 데이터는 2 개)로 저장할 수 있습니다. 그러나 우리가 가지고 있다고합시다.

FF FF FE FF FE FF FF FF FF FF FE FE FE FF FE FE

이제 런 렝스 인코딩은 다음을 제공합니다.

2×FF 1×FE 1×FF 1×FE 5×FF 3×FE 1×FF 2×FE

... 절약되지 않으며 실제로 파일 크기 가 커질 수 있습니다 . 그러나 모든 FE값을로 반올림하면 FF크기가 크게 줄어든 파일 크기에 영향을 거의주지 않는 첫 번째 사례로 돌아갑니다.

물론 이것은 사소하고 고안된 예이지만 모든 손실 압축 알고리즘은이 기본 특성을 공유합니다. 데이터 손실로 인해 너무 작은 인식 형식으로보다 컴팩트 한 스토리지 형식을보다 쉽게 ​​사용할 수 있습니다.

비트 심도

또한 숫자의 관점에서 16 비트 이미지와 같은 것이 32 비트 이미지와 다른 점은 무엇입니까? 다시 말하지만 이미지는 0에서 255 사이의 정수 값을 가진 배열 일뿐입니다.

0에서 255 사이의 정수 값 배열은 8 비트 배열입니다. (2⁸ = 256.) 세 개의 채널에서 24 비트 이미지입니다. 일부 형식의 경우 32 비트에 대한 투명도 ( "알파") 채널도 있습니다. 채널당 더 높은 값을 사용할 수도 있는데, 이는 일반적으로 "16 비트 깊이"라고 할 때의 의미입니다. 이는 배열이 0-255가 아니라 0-65535 (2¹⁶ = 65536)에서 시작됨을 의미합니다. 일반적으로 이러한 방식에서, 이것은 기본적으로 가장 높은 값이 각 스케일에서 동일한 것을 나타내는 승수이지만 비트 깊이가 높을수록 더 많은 뉘앙스를 제공합니다. ( 이 답변에 대한 자세한 내용은 이 답변 을 참조하십시오 .) 사용 사례에 따라 값 또는 다른 데이터 유형에 정수 대신 64 비트 부동 소수점 (!)을 사용하는 특수 파일 형식도 있지만 기본 개념은 동일합니다 .


s / 0-65536 / 0-65535 /
Ruslan

1
@Ruslan 잘 잡아라. 버퍼 오버플로로 죄송합니다. :)
mattdm

왜 드레스가 그렇게 극화했는지에 대한 좋은 설명, FWIW
Wayne Werner

8

아니요, 이미지는 0-255 범위의 RGB 값만이 아닙니다. 저장 형식을 무시하더라도 색상을 설명하는 여러 가지 방법이 있습니다. 여기 몇 가지 예가 있어요.

  • 빨강, 녹색 및 파랑 구성 요소 (RGB)
  • 시안, 마젠타, 노랑 및 검정 구성 요소 (CMYK)
  • 색조, 채도 및 밝기 / 값 (HSL / HSV)
  • 카메라의 센서 그룹에 닿는 빛의 양
  • 센서에 닿을 때의 빛의 양과 방향 ( 광장 카메라에서 )

처음 두 가지는 모니터에 표시하고 인쇄하는 데 가장 일반적으로 사용됩니다.

또한 이미지는 픽셀뿐만 아니라 메타 데이터이기도합니다. 픽셀 수의 너비, 인쇄 할 경우 실제 너비, 썸네일 이미지 또는 이미지를 촬영할 때 카메라의 지리적 위치 와 같은 것일 수 있습니다 .


6
RGB와 같이 "간단한"것으로도 색상 공간이 다릅니다. 예를 들어 간단한 24 비트 RGB 비트 맵은 감마 보정 될 수 있습니다. 보정을 되 돌리지 않으면 너무 어둡게 나타납니다. 강도 분포는 선형이거나 그 밖의 것이 될 수 있습니다. Adobe RGB와 sRGB는 모두 24 비트 RGB 비트 맵이지만 "동일한"색상의 표현은 매우 다릅니다. "일반 텍스트 파일은 없습니다"와 마찬가지로 "일반 이미지"형식도 없습니다. 얻을 수있는 최선의 방법은 "이 특정 시스템 / 응용 프로그램의 기본 이미지 형식"입니다.
루안

1
hsv / hsl 데이터를 보유한 형식은 보지 못했지만 LAB 또는 XYZ 데이터를 저장하는 형식을 보았습니다
joojaa

2
@Luaan 답변으로 확장해야합니다. 감마의 차이는 그 누구도 그들의 대답에 손대지 않은 것처럼 보입니다.
Tim Seguine

5

당신의 전제는 잘못이 아닙니다 : 유한 이미지의 N 차원 배열을 사용하여 이미지를 표현할 수 있습니다. 개인적으로 저는 매트릭스 대신 이산 지오메트리를 사용하는 것이 일반적이지만 본질은 동일합니다. 그러나 그것은 파일이 아닌 내용입니다.

그러나 파일 형식이 다릅니다. 기본적으로 bmp, png, jpg 등 사람들이 언급 한 것과 같은 동일한 이미지를 나타내는 여러 가지 방법이 있습니다. 물론 일단 디코딩하면 동일한 이미지의 무손실 인코딩 버전이 동일한 행렬로 이어집니다.
zip으로 압축 한 .txt 파일로 생각하십시오. 무손실 인코딩이 원본과 동일하지는 않지만 텍스트의 멍청한 버전과 거의 비슷한 텍스트를 반환한다는 이상한 점이 추가되었습니다.

텍스트 비유를 유지하면서 .txt, .docx, .pdf 등으로 저장된 동일한 텍스트를 가지고 있다고 가정 해 봅시다. 내용이 동일한 경우 왜 모든 파일이 동일하지 않습니까? (Ok, txt는 형식이 없지만 다른 형식은 있습니다).

그런데 Netpbm 인코딩JPEG와 실제로 어떻게 다른지 확인하십시오 .


3

RAW 및 TIFF 형식의 경우 내가 알 수있는 한 대답은 (다른 사람들이 말했듯이) 실제로 동일한 색상 공간을 사용하지는 않는다는 것입니다 (예 : RAW 파일은 픽셀 당 더 많은 비트를 사용할 수 있으므로 미세한 색상 정보를 저장할 수 있음) .

그러나 귀하의 질문의 요점에 도달하기 위해-때로는 다른 형식으로 저장된 이미지가 있지만 각각은 정확히 동일한 숫자 배열을 나타냅니다.

이에 대한 좋은 예는 PNG 파일과 TIFF 파일의 압축 차이입니다.

PNG 파일은 하나의 특정 압축 알고리즘을 사용합니다. 즉, 이미지는 각 픽셀의 큰 숫자 목록으로 저장되지 않습니다. 단순화 된 예 : "이 10x10 픽셀 블록에서 모든 픽셀은 XYZ입니다"라는 문구를 저장할 수 있습니다. 그런 다음 해당 정보를 100 번 이상 저장하는 대신 정보가 적용되는 영역에 대한 정보와 함께 한 번 저장합니다.

문제는 원래 숫자 배열 (컬러를 나타냄)을 다시 가져 와서 표시하거나 편집 할 수 있습니다. 압축 된 정보를 해석하는 방법을 알고있는 소프트웨어가 필요합니다.

PNG 파일은 항상 동일한 압축 알고리즘을 사용하므로 소프트웨어가 모든 유효한 PNG 파일을 쉽게 지원할 수 있습니다. 반면에 일부 이미지는 PNG의 압축 알고리즘에 적합하지 않은 구조를 가지므로 일부 PNG 파일은 상당히 클 수 있습니다.

반면 TIFF 파일은 다양한 압축 알고리즘을 지원합니다. 실제로 이미지의 다른 부분을 다르게 압축하여 저장할 수도 있습니다. 그리고 그것은 '확장'을 지원하므로 독자적인 방법을 사용하여 이미지를 압축 할 수 있습니다. 이미지의 상반부는 PNG와 비슷한 방법을 사용하여 압축되지만 하단은 잘 압축되지 않으므로 아래쪽은 다른 방법으로 압축됩니다.

따라서 TIFF 파일은 더 유연합니다. 적은 바이트를 사용하여 정확히 동일한 숫자 배열을 저장할 수 있습니다. 그러나 이미지를 디코딩하는 데 필요한 소프트웨어는 더 복잡해지며, TIFF 파일을 하나의 소프트웨어에 저장하고 다른 소프트웨어를 사용하여 열 수는 없습니다. 여전히 원본에서 작동합니다.

그래서 당신은 물어

그러나 기본 3 채널 RBC 이미지 이외의 것은 묻지 않습니다. 내가 아는 것은 누군가 누군가 나에게 이것들 중 하나를 건네 주면, 나는 이제 일련의 숫자를 가지고 있다는 것입니다. 하나의 숫자 배열이 0에서 255 사이의 다른 숫자 배열과 다른 이유를 알 이유가 없습니다.

그것을 당신에게 전달하기 위해 누군가는 이미지가 어떻게 저장되어 있는지와 그것을 일련의 숫자로 변환하는 방법을 알아야했습니다. (또는 아마도 일부 소프트웨어가 당신에게 알려지지 않은 번역을하고있을 것입니다).

이미지를 PNG로 저장하고 TIFF 또는 GIF로 다시 저장 한 다음 16 진수 뷰어 에서 이미지 를보고 동일한 숫자 배열이 어떻게 다른지 확인할 수 있습니다. 또는 PNG 파일TIFF 파일 이 내부적 으로 어떻게 표현되는지 자세히 읽어보고 동일한 숫자 배열을 다르게 읽을 수 있도록 소프트웨어에 무엇을 내장해야하는지 알 수 있습니다.


1
But to get to the crux of your question - sometimes there are images which are stored in different formats, but each ultimately represents exactly the same array of numbers.무손실 이미지의 경우에는 해당 될 수 있지만 비트 전송률이 낮은 HEIF 이미지를 비트 전송률이 낮은 JPEG와 비교하는 경우에는 완전히 잘못됩니다 .
flolilo

1
@flolilolilo yep, 그것이 내가 "때때로"말한 이유입니다. 질문에 대한 나의 해석은 "내가 정확히 동일한 색상의 격자로 끝났다면 파일의 차이점은 무엇입니까?"라는 질문이었습니다. 그래서 다른 압축 방법을 사용하여 다른 파일 형식의 동일한 숫자 그리드를 사용할 수있는 단순화 된 사례로 무손실 압축에 대해 이야기했습니다.
LangeHaare

Raw는 거의 "픽셀"당 더 많은 비트를 사용하지 않지만 RAW는 픽셀을 설명하지 않고 포토 사이트를 설명합니다. RAW 이미지는 센서의 원시 센서 데이터이며 각 특정 포토 사이트에는 3이 아닌 1 개의 채널 만 있습니다. RGB 채널은 다른 색상의 인접한 포토 사이트를보고 결정됩니다. RAW 파일은 일반적으로 RAW 처리 결과 압축되지 않은 이미지보다 작습니다.
AJ Henderson

1
예를 들어 16 비트 raw는 "픽셀"당 16 비트 만 사용하지만 압축되지 않은 8 비트 컬러 BMP는 빨강, 녹색 및 파랑에 대한 8 비트 정보를 저장해야하므로 픽셀 당 24 비트를 사용합니다. RAW를 더 조정할 수있는 이유는 색상 정보가 아직 결합되지 않았기 때문입니다. 화이트 밸런스와 같은 항목을 변경할 수 있습니다 (결과 픽셀 각각의 색상 정보를 결정할 때 각 특정 색상 포토 사이트의 영향을 변경 함).
AJ Henderson

3

비트 맵

비트 맵 (BMP)은 본질적으로 픽셀 색상을 나타내는 숫자의 배열입니다. 예를 들어

1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1

무손실 압축

이제 압축 구성표를 정의하겠습니다. 압축 체계에는 숫자 쌍 배열이 있습니다. 예 :

3, 1, 1, 0, 7, 1

이제 제가 지적하고자하는 첫 번째 것은이 압축 체계가 첫 번째 배열과 동일한 픽셀을 나타냅니다. 첫 번째 배열에는 3 개의 1과 단일 0, 그리고 7 개의 1이 있습니다. 그리고 그것이 우리가 여기서 대표하는 것입니다. 이 형식은 두 개의 숫자가있는 여러 픽셀을 나타내므로 더 짧습니다. 비트 맵 형식은 각 픽셀마다 하나의 숫자를 사용해야합니다.

분명히 이것은 이미지 (예를 들어 단 하나의 행)와 압축 방식의 다소 단순화 된보기입니다. 그러나 이것이 압축 체계가 이미지의 형식을 어떻게 바꾸는 지 알 수 있기를 바랍니다. GIF가 BMP와 관련되는 방식입니다. GIF는 이 단순한 방법 대신 Lempel-Ziv-Welch 라는 압축 구성표를 사용합니다 .

여기에 설명 된 것은 무손실 압축 방식입니다. 무손실 압축 방식의 문제점은 일부 입력의 경우 인코딩 된 형식이 원본보다 길 수 있다는 것입니다. 예를 들어

1, 0, 1, 0, 1

인코딩은

1, 1, 1, 0, 1, 1, 1, 0, 1, 1

글쎄, 그건 쓸모가 없었습니다. 입력을 두 배로 늘 렸습니다.

또 다른 무손실 압축

이제 다른 압축 체계를 생각해 봅시다. 이 이미지에서는 이미지를 중첩 원으로 표시합니다. 각 원에 대해 중심, 반경 및 색상을 정의합니다.

첫 번째 비트 맵은

5, 5, 1, 3, 0, 0

이것은 첫 번째 압축 방법과 길이가 같습니다.

그리고 우리의 두 번째는

2, 2, 1, 2, 1, 0, 2, 0, 1

이것은 중간 요소를 중심으로 한 3 개의 원입니다 (컴퓨터는 0부터 계산을 시작하므로 컴퓨터 계산은 2 번입니다). 하나의 원은 반지름 2와 색 1을가집니다. 그런 다음 우리는 원 0과 반지름 1의 원을 추가합니다. 마지막으로, 우리는 원의 색 1과 반지름 0을가집니다.

1, 1, 1, 1, 11
, 0, 0, 0,
11, 0, 1, 0, 1

또는

2, 2, 1, 1, 0, 0, 3, 0, 0

이것은 동일한 초기 원이지만 두 개의 점 원으로 덮여 있습니다. 단계적으로는

1, 1, 1, 1, 11
, 0, 1, 1,
11, 0, 1, 0, 1

둘 다 첫 번째 인코딩 된 버전보다 짧지 만 여전히 원본보다 깁니다.

내가 왜 범위가 아닌 서클에 대해 이야기하는지 궁금 할 것입니다. 주된 이유는 원이 실제 2 차원 이미지가 사용하는 것에 더 가깝기 때문입니다.

손실 압축

또한 손실 압축 방식이라는 개념이 있습니다. 이러한 무손실 압축 방식은 원래 비트 맵 배열로 다시 전환 할 수 있습니다. 손실 압축 체계는 되돌릴 수 없습니다.

서클 방식의 손실 버전을 고려해 보겠습니다. 여기에서는 간단한 규칙을 사용합니다. 반지름이 1보다 작은 원은 저장하지 않습니다. 따라서 마지막 두 인코딩에서는

2, 2, 1, 2, 1, 0

2, 2, 1

다시 픽셀로 변환 된

1, 0, 0, 0, 1

1, 1, 1, 1, 1

첫 번째 버전은 원본보다 한 요소 만 더 깁니다. 두 번째 버전은 더 짧습니다. 둘 다 유효하므로 알고리즘은 자유롭게 개발하고 더 짧은 것을 선택할 수 있습니다.

규칙이 더 엄격한 이미지는 품질이 낮은 것으로 설명합니다.

이미지를 겹쳐진 원형 도형 모음으로 표현하는 것은 Joint Photographic Experts Group 또는 JPEG 형식의 작동 방식과 유사 합니다. 모양은 원이 아닌 타원이지만 아이디어는 비슷합니다. 단순한 방법 대신 이산 코사인 변환 을 사용하여 이미지를 인코딩합니다.

GIF와 달리 JPEG는 실제로 이미지를 나타내는 다른 방법입니다. GIF는 여전히 픽셀입니다. 그들은 다른 방식으로 저장됩니다. JPEG는 도형입니다. JPEG를 보려면 화면이 작동하는 방식이므로 셰이프를 픽셀로 변환합니다. 이론적으로는 이런 방식으로 작동하지 않는 화면을 개발할 수있었습니다. 픽셀 대신 JPEG 형식에 더 잘 맞도록 모양을 만들 수 있습니다. 물론이 화면에는 비트 맵이 표시되지 않습니다. BMP 또는 GIF를 표시하려면 JPEG로 변환해야합니다.

300x300 픽셀과 같은 표준 GIF를 변환하고 JPEG로 변환 한 다음 품질을 떨어 뜨리면 사용하는 기본 모양이 표시되어야합니다. 많은 JPEG는 훨씬 높은 해상도 이미지로 시작하여 이러한 아티팩트를 피합니다.

JPEG는 픽셀이 아닌 모양이기 때문에 잘 확장됩니다. 따라서 8000x8000 이미지로 시작하여 JPEG로 변환 한 다음 300x300 이미지로 표시하면 손실 된 세부 정보가 대부분 손실됩니다. 8000x8000 비트 맵을 먼저 300x300 비트 맵으로 변환 한 다음 JPEG로 변환하면 결과 품질이 떨어질 수 있습니다.

MPEG

우리는 스틸 이미지에 대해 이야기하고 있습니다. 동화상 전문가 그룹 또는 MPEG 형식은 JPEG로 압축 같은 종류를 사용하지만, 그것은 또한 다른 작업을 수행. 비디오를 수행하는 간단한 방법은 스틸 이미지 시퀀스를 전송하는 것이지만 MPEG는 실제로 프레임을 전송 한 다음 변경 사항을 나열하고 끝 프레임으로 마무리하는 몇 개의 프레임을 전송합니다. 대부분의 프레임은 이전 프레임과 유사하기 때문에 변경 목록이 종종 두 번째 이미지보다 작습니다.

시퀀스는 일반적으로 그리 길지 않습니다 (5 프레임). 그러나 스트림을 다른 것보다 작게 만듭니다.

단순화

나는 많은 것을 무시했다. 내 이미지에는 8 비트 이미지의 256 개가 아닌 32 비트 이미지의 4,294,967,296이 아닌 두 가지 색상 (1 비트) 만 있습니다. 8 비트 이미지의 경우에도 이미지에 대해 다른 팔레트를 선택할 수 있습니다. 따라서 동일한 시퀀스를 가진 두 개의 8 비트 비트 맵은 모양이 같지만 색상이 다른 이미지를 나타낼 수 있습니다.

내 이미지는 2 차원이 아닌 단일 행입니다. 대부분의 이미지에는 특정 행 크기가 저장되어 배열을 2 차원으로 만듭니다.

실제 인코딩을 전혀 나타내지 않았습니다. 그것들은 내가 사용한 단순한 것보다 훨씬 더 복잡합니다. 이 게시물의 인코딩을 설명하고 싶기 때문에이 작업을 수행했습니다. 나는 단일 답변으로 Lempel-Ziv가 더 복잡한 Lempel-Ziv-Welch 개선을 훨씬 덜 설명 할 수 있다고 확신하지 않습니다. 그리고 나는 푸리에 변환이 길이를 설명 할만큼 충분히 이해하지 못한다.

이것은 실제 이미지 처리의 단순화 된 버전입니다. 그러나 나는 교훈적인 목적을 위해 여전히 필수 포인트에 부딪히면서 더 복잡한 현실보다 이해하기 쉽다고 생각합니다.


3

모든 픽셀이 0-255 범위의 3 개 숫자 (빨강, 녹색 및 파랑)에 불과하다는 것이 사실이라고 가정 해 봅시다. 다른 답변자들은 그 가정에 (올바르게) 도전하는 것으로 시작했지만, 단순성을 위해 사실이라고 말합시다.

나는 언어학 교과서의 만화를 기억하지만 슬프게도 온라인에서 찾을 수는 없다. 한 사람은 다른 사람에게 다음과 같이 말합니다. " '파라오에는 10 만 명의 군인이 있었습니까?'라고 더 쉽게 쓸 수있는 방법이 있어야합니다." 그 생각을 명심하십시오.

이제 이미지의 첫 번째 행에 1800 개의 검은 픽셀이 있다고 가정 해 봅시다. 어떻게 표현 될까요?

0 0 0    0 0 0     0 0 0   ....

그렇다면 얼마나 많은 저장 공간이 필요합니까? 각 값은 바이트입니다. 픽셀 당 3 바이트, 1800 픽셀, 따라서 이미 5400 바이트입니다. 따라서 크기가 1800 x 1200 인 이미지는 1200 배 (6MB 이상)를 차지해야합니다. 이제 Google 이미지 검색을 수행하고 1800x1200 이미지 몇 개 ( .png이미지 하나와 .jpg이미지 하나)를 다운로드 해 보겠습니다 . 파일 크기를보십시오 : 6 MB입니까? 안 돼요, 보통 그것 보다 훨씬 작습니다 물론 이것은 모든 공간이 절약되고 다운로드 시간이 단축되는 바람직한 일입니다 ....

무슨 일이야? 열쇠는 저장해야 할 숫자가 많더라도 다른 방법으로 표현할 수 있다는 것입니다파일에서 그 숫자. 두 문단 전의 대답에서 더 효율적인 표현의 예가 있습니다. 나는 "1800 개의 검은 픽셀"이라는 단어를 썼습니다. 이는 17 자이므로 17 바이트 이상을 차지할 필요는 없지만 5400 바이트가 필요하다고 생각한 것과 정확히 동일한 정보를 완벽하게 설명합니다. 이 정보를 인코딩하는 데 영어를 사용하지 않고보다 특수한 언어를 사용하는 경우 17 바이트보다 더 잘 수행 할 수 있으며 인코딩 / 디코딩 구현에 많은 노력을 절약 할 수 있습니다. 이제 우리는 이미 두 가지 이상의 이미지 압축 형식 (영어 단어를 사용하는 형식과 그보다 효율적인 형식)을 지정했습니다. 어디로 가는지 봅니까?

예, 인접 픽셀 전체가 동일한 색상을 가지면 작동합니다. 그러나 그렇지 않은 경우 어떻게해야합니까? 글쎄, 그것은 특정 이미지의 내용에 달려 있습니다. 중복성 이 많을수록 정보 를 압축 하는 것이 더 쉽습니다 . 중복성은 이미 다른 부분을 알고 있다면 이미지의 부분을 잘 예측할 수 있음을 의미합니다. 압축이란 정보를 재구성하는 데 필요한 최소한의 정보 만 기록하는 것을 의미합니다. 가능한 모든 이미지가 중복성을 갖는 것은 아니지만, 순수한 검정 예제보다 더 복잡하지만 인간의 눈과 뇌에 의미가있는 실제 이미지는 여전히 많은 중복성을 갖는 경향이 있습니다. 그리고 압축하는 방법에는 여러 가지가 있습니다. 일부 압축 방법은 무손실즉, 검은 픽셀 행 예제에서와 같이 정보가 수학적으로 원본과 동일하게 재구성 될 수 있음을 의미합니다. 대부분의 .png파일은 무손실 압축 방법을 사용합니다. 일부 방법은 손실이 있습니다 . 재구성이 완벽하지는 않지만 오류는 사람의 눈과 뇌가 거의 알아 채지 못하는 방식으로 숨겨져 있습니다. 대부분의 .jpg파일이 손실되었습니다.

복잡한 중복 패턴을 인식하는 방법과 효율적인 압축 설명을 작성하는 방법에 대한 자세한 내용은 매우 수학적이며 사소하지 않기 때문에 다양한 압축 전략에 따라 다양한 형식을 사용할 수있는 공간이 있습니다. 그러나 당신이 원칙을 얻길 바랍니다.

위의 두 의견자는 당신의 오해가 어디에서 발생했는지에 대해 합리적인 추측을했습니다. 귀하의 질문에 따르면 압축은 정보 레이아웃을 변경하지 않고 픽셀 값을 조금만 변경한다고 생각합니다 (그리고 손실 압축 방법은 장소에서 수행하지만 원치 않는 부작용으로 만 수행됨). 파일을 열고 이미지 내용 (예 : Matlab의 숫자 배열 또는 Photoshop의 화면 이미지)을 보면 압축 된 파일 내용이 아니라 재구성이있는 것입니다.원본과 동일한 레이아웃을 갖습니다 (레이아웃을 올바르게 다시 만들지 않은 경우 재구성이 많지 않음). 파일 열기 프로시 저는 파일의 정보를 메모리의 전체 압축되지 않은 표현으로 압축 해제했습니다. 두 개의 압축되지 않은 재구성 을 비교하면 실제로 두 가지 다른 이미지 형식을 구별 할 수있는 것이 없습니다 (재구성 오류가있는 경우 제외).


1

예, 그러나 1과 0에 도달하는 방법은 매우 다릅니다.

나는 예를 제시 할 것이지만, 그것은 가짜이며 정확한 것 이상을 설명한다고 가정합니다. 모든 디지털 이미지는 특정 수준에서 이진수로 표시됩니다.

문제를 복잡하게하기 위해 다른 채널이 있습니다. CMYK, RGB, B & W 등이 있습니다. 우리는 그것에 들어 가지 않을 것입니다. 캡처, 저장 및 표시와 같은 다른 단계도 있습니다. 다시 한 번 예제가 정확하지 않다는 것을 보여 주어야합니다. 정확한 예제를 원하면 많은 기술 문서를 찾아야합니다.

샘플에서 우리는 흑백 이미지를 볼 것입니다.

00067000
00067000
00567800
04056090
40056009

숫자는 "검정색"의 강도를 나타냅니다. 카메라가 이미지를 캡처 한 방식입니다. 괜찮은 카메라이므로 이미지를 저장하는 방법이기도합니다.

이제 이미지를 컴퓨터에 저장하지만 많은 공간을 차지하므로 압축 할 것입니다. 우리는 그것을 매시하는 것 외에도 대부분의 사람들이 1 블랙 레벨의 차이를 감지 할 수 없으므로 일부를 매끄럽게 할 것임을 알고 있습니다.

302730
302730
204820
*04056090
1420262019

이제 디스크에 이미지를 저장하는 방법입니다. 공간을 덜 차지하고 원본 이미지를 많이 만들 수 있습니다.

이제 프린터로 인쇄한다고 가정하겠습니다. 프린터는 한 수준의 검은 색 만 인쇄하므로 컴퓨터는 저장된 압축 이미지를 프린터 토크로 변환합니다.

00011000
00011000
00111100
01011010
10011001

이것은 합리적으로 보이는 이미지를 인쇄하지만, 예를 들어 극도로 품질이 떨어지는 것을 볼 수 있습니다. 하지만 프린터 오류입니다.

마지막으로 10 단계의 검은 색으로 좋은 프린터에 이미지를 인쇄합니다. 카메라와 동일합니다. 따라서 저장되고 압축 된 이미지를 사용합니다.

00077000
00077000
00888800
04056090
40066009

보시다시피 이미지가 "더 나은"것이지만 원본에서 약간 변경되었습니다.

주어진 시간에 채널의 장점 일뿐입니다. 그리고 압축 해제 된 압축 이미지는 압축을 풀어야합니다.

그러나 압축 된 형식은 많은 "정보"를 잃습니다. 그 정보가 중요합니까? 글쎄, 그것은 예술가와 청중에게 달려있다. 공간 절약, 처리 시간, 최종 / 저장된 이미지의 품질 및 요구 사이에는 몇 가지 상충 관계가 있습니다. 필요한 모든 것이기 때문에 대부분의 문서를 단색 검정으로 스캔합니다. 그러나 결혼 사진은 거대 RAW 형식으로되어 있기 때문에 언제 다시 인쇄할지 모릅니다. 즉, 사진 (사진)을 디지털 사진 프레임으로 전송할 때 공간을 절약하기 위해 JPEG로 변환합니다. 다른 채널, 다른 필터 및 다른 압축 방법은 모두 일련의 절충점입니다. 디지털 버전의 프린터 삼각형과 같습니다.


두 번째 코드 블록 (압축)에 RLE가 표시됩니다. RLE를 기대하지 않는다면 사람들이 어떤 종류의 압축을 알 수 있도록 샘플을 반복 횟수 + 샘플 값으로 교체한다고 말할 수 있습니다.
Peter Cordes

1

이미지 감지 및 인코딩 / 압축 작업은 주로 움직이는 이미지 임에도 불구하고 약간의 추가 정보를 제공합니다.

기본 형식에서 특정 화면에 표시되는 이미지 (ANY 이미지)는 실제로 동일한 숫자 배열입니다. 이 숫자는 모두 0-255 또는 0-65535 또는 0-32 비트 -is-I-forgot-go-google-it 일 수 있습니다.

그러나 정보를 저장하고 전송하는 방법은 매우 많으며, 그 중 많은 시간이 단순히 기술의 산물 인 것입니다.

또한, 내가 언급 한 다른 선수들 중 누구도 보지 못한 한 가지 세부 사항은 디지털 카메라의 RAW 이미지 센서 데이터가 베이어 패턴의 RGrGbB 일 수도 있고 적어도 약간 처리 해야하는 것입니다. Mk.1 인간 안구에 대한 모든 의미. DSLR에 의해 저장된 RAW 형식 일지라도 8, 16, 32 또는 eleventy-squillion 비트 깊이의 RGB 또는 YUV 픽셀의 멋진 그리드로 변환 할 때까지는 쓸모가 없기 때문에 결코 얻을 수 없습니다.

내가 연구 한 것들은 어떤 이유로 든 내부적으로 YUV를 사용합니다. 인간은 색상보다 훨씬 더 감도가 높은 밝기를 인간이 인식하기 때문에 코덱에서 더 쉽게 처리한다고 가정합니다.

가벼운 취침 시간 읽기에 대해서는 "프레임 이미지 형식"섹션을 참조하십시오. http://focus.ti.com/lit/ug/sprufg8b/sprufg8b.pdf

어쨌든 ... TIFF / RAW / IFF / PNG와 같은 압축되지 않은 이미지 파일의 차이점에 대한 원래의 질문으로 돌아가십시오.

일반적으로 이것이 존재하는 이유는 많은 달 전에 각 컴퓨터 / OS / 프린터 제조업체가 이미지 저장 / 전송 방법에 대해 약간 다른 요구 사항을 제시했기 때문입니다.

따라서이 스레드에서 다른 사람들이 논의한 RAW는 카메라 제조업체가 중요하다고 생각한 모든 데이터를 카메라가 가지고 있거나 향후 가지고있을 수있는 기능에 따라 다른 디지털 카메라로 저장 한 여러 가지 다른 것들에 대한 일반적인 용어입니다. 따라서 기본 사진 데이터 비트는 매우 유사 할 수 있지만 이미지와 모든 카메라 설정 등을 설명하는 "패키지"주위는 다른 제조업체에서 하나의 파일을 이해할 수 없습니다.

전통적으로 이것은 (또는 전문 사진가가) 독점적이며 때로는 비싼 소프트웨어를 사용하여 이러한 고품질 이미지를 처리 ​​할 수 ​​있도록합니다. 그렇지 않으면 다른 사람의 비싼 소프트웨어를 사용할 수 있습니다. 또한 어도비 포토샵은 포맷을 지원하기를 원할 수 있으므로 더 많은 전문 사진 작가가 PS를 구매하고 PS가 그것을 지원하기 때문에 카메라를 구입할 수 있도록 해당 정보에 대해 Adobe $$$를 청구 할 수 있습니다. 기분 좋은!

RAW는 또한 특정 데이터 묶음을 사람이 볼 수있는 그림으로 다시 변환하는 방법에 대한 정보를 저장합니다. 데이터에 필요한 모든 비틀기만으로 이미지가 "올바르게"보이도록 할 수 있습니다.

TIFF는 무엇보다도 그래픽 데이터를 프린터로 전송하는 데 사용되는 초기 이미지 형식이었습니다 (그래픽 가능 프린터가 저렴 해지기 시작했을 때). 프린터 내부의 작고 저렴한 마이크로 프로세서에서 처리하기가 매우 기본적이었습니다.

IFF (예, 그런 것입니다)는 Amiga 컴퓨터에서 사용되는 것과 유사한 형식이었습니다. 나는 그들 또는 인기있는 페인트 패키지 중 하나에 의해 발명되었다고 생각합니다. 그러나 다른 예제와 같이 비트 맵 그림 데이터를 저장하지만 압축되지 않은 또는 RLE 데이터, 1 비트 모노에서 8 비트 256 색까지의 가변 비트 깊이 (그러나 Halftone 및 Hold-and-Modify와 같은 특수 모드뿐만 아니라 각 색상에 대해 선택할 수있는 3x8 비트 RGB 팔레트와 같은 시대의 다른 시스템이 관리 할 수있는 것보다 더 많은 색상을 허용합니다. 아, 그리고 GIF와 같은 애니메이션도 지원했기 때문에 IFF 파일은 프레임간에 가변 지연으로 프레임을 여러 개 저장할 수 있으며 각 프레임에는 자체 팔레트가 있습니다. 따라서 IFF는 TIFF 파일과 비교하여이 모든 것을 처리 할 추가 데이터를 포함합니다.

PNG는 또 다른 무손실 이미지 형식으로, 비트 맵 데이터를 다시 저장하지만 이미지 전체에서 변수 투명성을위한 8 비트 알파 채널 (웹 페이지에서 유용함)과 같은 펑키 한 기능을 지원하므로 그림 데이터 "페이로드"는 매우 유사하게 보일 수 있습니다. 그러나 그 주위의 래퍼는 다르며 페이로드에는 픽셀 당 RGB 데이터가 아닌 RGBA가 포함될 수 있습니다.

따라서 설명 된 4 가지 이미지 파일 형식입니다. 4 가지 중 하나에 고양이의 샘플 풀 컬러 HD 사진을 저장할 수 있으며 동일하게 보입니다. 화면의 모든 픽셀은 정확히 같은 값을 가지며 NO가됩니다. 4 개 사이의 품질 차이는 있지만 4 개 파일의 크기, 레이아웃이 다를 수 있으며 소프트웨어를로드 및 처리하기가 더 어렵거나 더 어려울 수 있습니다.

희망이 도움이됩니다!


0

이 질문에 대한 첫 번째 답변이되어야했던 정보와 함께 여기에 들려 줄 것이라고 생각했습니다.

이미지의 단색은 흑백이 아닌 한 이미지의 픽셀은 바이트로 저장되지 않습니다.

트루 컬러 이미지가있는 경우 각 픽셀은 하나의 값으로 16 비트 또는 2 바이트로 표시됩니다. 32 비트 이미지가있는 경우 각 픽셀에는 다시 단일 값으로 32 비트 또는 4 바이트가 필요합니다.

흥미롭게도 컴퓨터의 이미지 및 사운드 파일과 다른 모든 데이터 유형은 1과 0의 비트로 요약됩니다. 올바른 크기의 청크로 해석하여 의미를 추출합니다.

예를 들어, 이미지와 단어 문서 및 mp3 파일은 모두 기본 데이터 내용 (바이트 수)이 동일하며 다른 유형 중 하나로 해석 될 수 있습니다. 단어 doc를 소리로 해석 할 수 있습니다. 파일을 들으면 무언가를들을 수 있지만 음악은 아닙니다. 사운드 파일을 이미지로 해석하면 무언가를 표시 할 수 있지만 응집력있는 이미지는 아닙니다.

요약하자면, 컴퓨터는 비트에 대해서만 알고 있습니다. 비트는 1 또는 0입니다. 모든 이미지, 사운드, 문서, 영화, 비디오, 녹음, 게임, 전화 통화, 문자 메시지 및 디지털로 표시된 모든 항목은 정확히 동일합니다. 내용-1과 0의 무리. 1과 0은 이미지, 사운드 및 문서 및 기타 모든 것이됩니다. 코드를 읽는 코드는 해당 비트를 그룹으로 읽고 그에 따라 처리하는 것으로 알고 있기 때문입니다.

이것이 16 비트 및 32 비트 이미지, 16 비트 및 24 비트 오디오 파일과 같은 이유입니다. 픽셀 또는 사운드 샘플에 사용하는 비트 수가 많을수록 표현력이 향상됩니다. 16 비트는 64k 고유 색상 만 정의 할 수 있지만 32 비트는 4 백만 고유 색상을 정의 할 수 있습니다. 흑백 이미지는 픽셀 당 1 비트를 사용합니다 (켜지거나 꺼져 있음).

오디오 파일을 사용하면 샘플 당 더 많은 비트를 사용할수록 더 자세하고 미묘한 레코딩이 가능합니다.


0

나는 전체 스레드를 읽지 못했지만 많은 사람들이 벡터화 된 이미지 형식을 잊어 버린 것 같습니다. 픽셀의 개념은 이러한 형식으로 존재하지 않기 때문에 픽셀 배열이 아닙니다. 화면이나 다른 매체에서 이미지를 생성하는 방법을 알아내는 것은 렌더러에게 달려 있습니다.

컬러 도메인, 압축, 비트 크기 및 채널 형식을 언급하지 않아도 픽셀 맵과 완전히 다른 파일 형식 세트가 있습니다. 그러나 벡터 형식은 일반적으로 카메라가 아닌 컴퓨터에 의해 생성되는 특정 유형의 이미지를 표현하는 데 훨씬 "더 좋습니다".


1
이것은 사진 사이트이며 디지털 카메라는 벡터가 아닌 픽셀 배열을 기록하기 때문에이 문맥에서 평소와 같이 "잊어 버린 것"이라고 말하지 않습니다.
mattdm

0

이 질문은 전에 매우 상세하게 답변되었습니다. 그러나 답변에 많은 이론이 제시되었지만, 나는 더 명확한 설명이 필요한 컴퓨터 프로그래밍과 관련된 몇 가지 기본 주제가 있다고 생각합니다. 소프트웨어 엔지니어라고 진술해야합니다. 질문을 읽은 후에이 질문을 생성하는 기본 프로그래밍 데이터 유형에 대한 오해가 있음을 깨달았습니다.

첫 번째 질문은 다음과 같습니다.

또한 숫자의 관점에서 16 비트 이미지와 같은 것이 32 비트 이미지와 다른 점은 무엇입니까? 다시 말하지만, 이미지는 0-255 사이의 정수 값을 가진 배열 일뿐입니다.

이전에 제시 한 바와 같이 : 아니다. 이미지는 0-255 사이의 정수 값의 배열이 아닙니다. 실제로는 0 ~ 65535 값의 단일 또는 다차원 배열, 0 ~ 4294967295의 배열 또는 심지어 비트 배열 (비트는 0 또는 1 값을 보유 할 수 있음) 일 수 있습니다. 다양한 인코딩 규칙에 따라 이미지 파일을 정수로 읽습니다.

이전에 언급했듯이 이것을 더 이해하려면 기본 프로그래밍 데이터 유형에 대한 논의가 필요하다고 생각합니다. 컴퓨터 파일에 정수 값을 저장하는 것과 관련된 문제를 누구나 이해할 수 있도록 가능한 한 간단하게 설명하려고합니다.

컴퓨터 프로그래밍에서 우리는 몇 가지 기본 프리미티브 데이터 유형을 사용하여 파일에 값을 쓰고, 파일에서 컴퓨터 메모리로 값을 읽고, 다양한 특정 프로그래밍 언어 데이터 유형을 사용하여 해당 값을 조작하고 결국 파일에 다시 저장합니다. 컴퓨터 프로그래밍의 정수는 정수가 아닙니다. 사용하는 프로그래밍 언어와 각 메모리에 필요한 메모리 양에 따라 모든 종류의 정수가 있습니다. 일반적으로 대부분의 프로그래밍 언어에는 다음과 같은 데이터 형식 (및 조작 방법)이 있습니다.

  • BIT-홀딩 0 또는 1
  • UINT8-8 비트 부호없는 정수-[0 ~ 255] 간격의 값을 보유 할 수 있습니다.
  • INT8-8 비트 부호있는 정수-[-126 ~ 127] 간격 사이의 값을 보유 할 수 있습니다.
  • 16 비트 부호없는 정수-UINT16-[0 ~ 65535] 간격 사이의 값을 보유 할 수 있습니다.
  • INT16-16 비트 부호없는 정수-[-32768 ~ 32767] 간격 사이의 값을 보유 할 수 있습니다.
  • UINT32-32 비트 부호없는 정수-[0 ~ 4294967295] 간격 사이의 값을 보유 할 수 있습니다.
  • INT32-부호없는 32 비트 정수-[-2147483648 ~ 2147483647] 간격 사이의 값을 보유 할 수 있습니다.
  • 또는 더 복잡한 형식의 모든 데이터 유형의 조합. 예를 들어, 3 개의 서로 다른 값을 보유한 UINT16 (16 비트), 0에서 127 사이의 값을 보유하는 처음 4 BIT, 0 또는 1을 보유하는 다음 BIT 등.

또한 파일에서 정수 데이터 유형을 읽거나 쓸 때 프로그래머가 처리해야 할 것이 있습니다. 엔디안.엔디안은 메모리 (또는 파일)에 저장 될 때 바이트 (테이블에서 UINT8)가 더 큰 숫자 값으로 배열되는 순서를 나타냅니다. 엔디안은 두 가지 상충되고 호환되지 않는 형식이 공통적으로 사용되기 때문에 컴퓨터 과학에 관심이 있습니다. 비트) 또는 작은 끝 (최하위 비트). 간단히 말하면 0000000011011111 또는 ... 1101111100000000과 같은 값이나 선택한 엔디안 순서를 저장할 수 있습니다. 그리고 목적에 맞는 주문을 자유롭게 선택할 수 있습니다. 이미지 파일 형식을 디자인 할 때 만드는 규칙은 없습니다.

컴퓨터 프로그래밍에서 정수는 더 많거나 적은 공간을 사용하고 있으며 값에 따라 다릅니다. 255255255를 쓰려면 더 많은 용지가 필요 하듯이 더 큰 값을 쓰려면 더 많은 비트가 필요합니다. 그런 다음 나중에 값을 읽으려면 작성할 때 작성한 규칙을 정확히 알아야합니다. 그렇지 않으면 0에서 255 사이의 정수 값을 가진 배열 을 읽는 방법을 알아내는 것은 불가능합니다. 왜냐하면 그 숫자가 어디에 저장되어 있고 그 숫자가 어떻게 저장되어 있는지 알지 못하기 때문에 (BIT, UINT8 , UINT16, UINT32 또는 모든 컴퓨터 데이터 유형의 조합). 잊지 마세요, 엔디안 빅 엔디안 또는 리틀 엔디안 순서를 사용하여 데이터를 기록했는지 모르는 경우 올바른 값을 읽을 수 없습니다.

이 이미지로 인해 0-255 사이의 정수 값을 갖는 배열 만있는 것은 아닙니다. 이들 중 일부는 UINT16 (16 비트 이미지)의 배열이고 다른 일부는 UINT32 (32 비트 이미지)의 배열이거나 다른 것은 UINT8 (8 비트 이미지)의 배열입니다. 일부 매우 창의적인 컴퓨터 프로그래머는 INT8 배열과 함께 사용되는 서명 된 유형을 사용할 수도 있습니다. 즉, -126과 127 사이의 값 배열을 의미합니다.

실제로 이미지 파일을 읽을 때 가장 먼저 발생하는 데이터 중 하나는 일반적으로 이미지 너비와 높이를 나타내는 BIT입니다. 그리고 그것들은 단지 0-255 값이 아닙니다. 이들은 또한 프로그래머가 선택한 일부 데이터 유형입니다. 일부 프로그래머는 16 비트가 65535 픽셀의 최대 이미지 너비를 저장하는 데 적합하다고 생각할 것입니다. 작은 버튼 이미지를 유지하기 위해 게임에서 사용되는 이미지 형식을 설계하고 있기 때문입니다. 일부 다른 프로그래머는 여기에서 32 비트 값을 사용하여 최대 4294967295의 이미지를 저장할 수 있습니다. 일부 미친 NASA 프로그래머는 최대 18446744073709551615 픽셀의 은하계의 거대한 사진을 저장하기 위해 64 비트를 사용할 수도 있습니다.규칙을 모르면 호출 할 때 해당 "값"을 읽을 수 없습니다. 이미지 파일의 시작 위치와 종료 위치를 모르기 때문입니다. 그래서 당신은 당신이 전혀 이해하지 못하는 많은 비트로 끝납니다.

그렇기 때문에 우주에는 수많은 이미지 형식이 가득합니다. 정수 값 을 파일 에 쓰는 표준 솔루션이 없기 때문입니다 . 작업중 인 머신의 Endianess, 원본 파일 형식 구현을 디자인하는 데 사용하는 프로그래밍 언어 및 이미지 형식의 목적과 같은 많은 다른 요소 (이전에 명시되어 있음)와 같은 많은 요소를 기반으로 프로그래머가 선택합니다. 다른 답변).

4x2 픽셀 이미지를 나타 내기 위해 하나의 단일 값 166 만 보유하는 흑백 이미지의 실용적인 간단한 파일 형식입니다.

이미지 (1-검은 픽셀, 0-흰색 픽셀) :

1010 
0110

이 파일 형식은 단일 8 비트 정수 값 166 (10100110)으로 저장된 PIXEL 당 1 비트를 사용합니다. 그게 다야. 0-255 값의 배열은 사용되지 않지만 8 개의 다른 0 또는 1 값이 값 166으로 저장됩니다.

RGB에 대해 각 픽셀에 대해 0-255 값의 배열을 * 3 회 사용한 경우 24 배 더 큰 이미지가 나타납니다. 이 파일 형식은 예를 들어 고성능 3D 게임 엔진에서이 이미지를 사용할 때이 이미지를 사용하여이 이미지를 읽고 컴퓨터 RAM에 보관하는 데 필요한 컴퓨터 메모리를 24 배나 적게 저장하는 데 필요한 디스크 공간의 24 배를 절약합니다. 화면에 무언가를 그리십시오 (수천 개의 먼지 입자가 날아 다니는 것이 좋은 후보가 될 수 있습니다).

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.