을 다른 답변은 올바른 해결책을 지적합니다 (더 짧은 벡터를 0으로 채우거나 더 긴 벡터에 하위 색인을 사용하여 더하기를 수행함). 그러나 두 개의 회색 명암 이미지를 추가하려는 궁극적 인 의견을 언급 한 이후로 저는 여러분에게 행렬에 대한보다 일반적인 2D 솔루션을 보여줄 것이라고 생각했습니다.
첫째, 일부 MATLAB의 샘플 이미지에 내장 얻을 자신의 크기를로드 할 것이다 : 나는 rgb2gray
를 사용하여 첫 번째 그레이 스케일하기 위해 RGB 이미지를 변환
image1 = rgb2gray(imread('peppers.png'));
image2 = imread('cameraman.tif');
[r1, c1] = size(image1);
[r2, c2] = size(image2);
공지 사항. 당신이 제로의 행렬을 원하기 때문에 내가 zeros
호출에 'uint8'
을 포함
newImage = zeros(max(r1, r2), max(c1, c2), 'uint8');
주의 사항 : 다음으로, 제로 사이즈 두 이미지의 크기의 최대 값의 새로운 매트릭스를 만들거야 자신의 이미지와 동일한 유형이어서 후속 작업이 올바르게 작동 할 수 있습니다. 행렬 newImage
은 이제 두 이미지 중 하나를 포함 할만큼 충분히 큽니다.
newImage(1:r1, 1:c1) = image1; % Insert image 1
newImage(1:r2, 1:c2) = newImage(1:r2, 1:c2)+image2; % Add image 2
그리고 다음으로 그들을 볼 수 있습니다 : 마지막으로, 영상과 같이 새 이미지에 추가 할 수 있습니다
imagesc(newImage);
colormap(gray);
참고 : 하나 개 중요한 것은에 이미지에 사용하는 유형을 고려하십시오. 일반적으로 MATLAB에로드되는 이미지 데이터는 uint8
입니다. 그러나 위에서 설명한 것처럼 두 개의 8 비트 부호없는 정수 이미지를 추가하면 픽셀이 255 (부호없는 8 비트 정수의 최대 값)를 초과하는 채도가 발생할 수 있습니다. 결과적으로 이미지의 일부가 흰색으로 밝아지고 세부 사항을 잃게됩니다 (위의 작은 이미지와 겹치는 일부 고추를 확인하십시오). 이미지를 추가하기 전에 값을 스케일링하거나 이미지를 double
으로 변환하여 작업을 수행 한 다음 이미지를 다시 저장하기 전에 크기를 조정하여이 문제를 방지 할 수 있습니다.그것이 AA는 BB보다 큰 주어진 경우
쿨. 실제로 2 개의 행렬을 가지고 있기 때문에 실제로 추가하려는 회색조 그림입니다. 이제 여러분의 해를 행렬 =) – Louise
-1로 일반화하고 싶습니다. 어떤 경우 수학적으로도 의미가 있습니다. –
예 : 신호를 벡터로 처리 할 때 (예 : z- 변환을 의미) –