2010-03-07 4 views
2

를 제공, 나는 다음과 같은 오류 메시지가 있어요 :MATLAB 매트릭스 교체 할당은 내가 매트릭스의 일부를 업데이트하려고 오류

을 ??? 할당은 비 - 싱글 톤 (non-singleton) 크기보다 소수점 이하 자릿수가 작습니다.

내 코드는 이진 이미지를 나타내는 행렬의 일부 값을 업데이트하려고합니다.

outImage(3:5,2:4,1) = max(imBinary(3:5,2:4,1));

내가 지난 매개 변수를 삭제

(1), 이번에는 내가 같은 오류가 다음과 같이 내 코드입니다. 치수 사이에 불일치가있는 것 같지만 얻을 수 없습니다. outImage는 그때 생성 된 새로운 객체입니다 (이전에 만들려고했으나 아무 것도 변경되지 않았습니다). 무엇이 잘못되었을 수 있습니까?

+0

내가 무슨 짓을했는지 편집했습니다. 나는 바이너리 이미지를 둘러싼 다. 이번에는 구문 적으로는 괜찮은 것처럼 보이지만 작동하지 않습니다. MATLAB의 strel 기능에 대해 알고 있습니까? strel 객체를 직접 행렬로 사용할 수 없기 때문에 MATLAB이 화를냅니다. 나는 strel 객체의 getnhood 기능을 시도했지만, 출력 이미지에는 전혀 영향을 미치지 않았다. strel object에 대해 뭔가를 놓쳤습니까? – Gulcan

답변

3

당신은 자신의 팽창 알고리즘을 만들려는 또 다른 대답에 대한 귀하의 의견 중 하나에 언급되어 있으므로 3x3x1 부분 행렬에서 최대 값을 가져 와서 최대 값을 가진 서브 매트릭스. 함수 MAX은 기본적으로 하위 행렬의 열을 따라 작동합니다.이 행렬은 1x3 행렬 (즉, 3x3 행렬의 최대 열 값)을 제공합니다. MATLAB은 3x3 행렬에 1x3 행렬을 할당 할 수 없기 때문에 오류가 발생합니다.

하나의 솔루션은 다음 오류없이 3 별 3 별 1 행렬의 각 요소에 할당 할 수있는 스칼라 값을 얻을 수 있도록 한 별 3 매트릭스에 다시 MAX를 호출하는 것입니다 :

outImage(3:5,2:4,1) = max(max(imBinary(3:5,2:4,1))); 
+1

정확히. 그런데, 미래에 이것을 3D로 생각하면, 나는 하위 이미지를 임시 변수로 읽어 들이고 max (tmp (:))를 사용한다. 따라서 차원에 대해 걱정할 필요가 없습니다. – Jonas

1

rhs 표현식의 각 열에 대해 outImage의 모든 색인 된 요소를 최대 값으로 채우시겠습니까? 당신은 REPMAT 당신이 우 타고 행을 확장 할 수 있습니다 :

outImage(3:5,2:4,1) = repmat(max(imBinary(3:5,2:4,1)),3,1) 

outImage(3:5,2:4)뿐만 아니라 작동합니다.

+0

고마워요,하지만 그건 내가 원하는 것이 아닙니다. 이미지를 바이너리로 변환 한 후 max 연산을 사용하여 포기합니다 (그레이 스케일 이미지를 처리 ​​할 필요가 있습니다). 지금 논리적 OR 연산을 사용합니다. 어쨌든 고마워. – Gulcan

1

방정식의 rhs에서 1x3 벡터를 반환하는 3x3x1 부분 행렬의 최대 값을 취합니다. 그런 다음 이것을 3x3x1 부분 행렬에 할당하려고합니다. 싱글 윗 첨자는 값 1을 갖는 첨자입니다. 그래서 rhs는 1이 아닌 단일 첨자를 가지며 lhs는 2입니다. Matlab은 3x3x1 공간을 채우기 위해 1x3 행렬을 확장하는 방법을 알 수 없습니다.

나는 당신이하고 싶은 것이 확실하지 않으므로 해결책을 추측하지는 못할 것입니다. rhs의 복사본을 3 개 만들고 lhs의 하위 행렬의 각 행에 하나씩 넣으시겠습니까? 아니면 rhs에 3x3x1 행렬을 만들려고하십니까?

+0

내 확장 방법을 쓰려고합니다. 워밍업으로, 저는 행렬의 3x3 부분을 취해 그 부분의 최대 값을 그 부분의 전체 값에 할당하려고했습니다. 고맙습니다, 당신의 설명이 정말 도움이됩니다. MATLAB을 처음 접했을 때, 나는 기초를 혼란스러워했습니다. 나는 맥스 연산이 1x3 행렬을 줄 것이라고 생각하지 못했습니다. 나는 그것이 하나의 가치를 반환 할 것이라고 생각했지만, 다시는, 어떤 좋은 일도하지 않을 것입니다. 다시 생각해 봐야 겠어. – Gulcan

1

이전에 같은 오류가 발생했습니다. 이전에 왼쪽 행렬을 정의하는 것이 었습니다. 같은 케이스가 있는지 잘 모르겠지만 다음을 시도해 볼 수 있습니다.

outImage=Zeros(M,N,K); 

M, N 및 K는 가지고있는 크기입니다. 그럼 그냥 입력 :

outImage(3:5,2:4,1) = max(max(imBinary(3:5,2:4,1))); 
관련 문제