Намиране на онези пиксели, които отговарят на определен критерий

Приложено е изображение на cameraman.tif, което идва с matlab, но след прилагане на [fuzzy c-means] 1

въведете описание на изображението тук

Също така, като изход от алгоритъма е u2 (степен на членство на пиксел). Вижте matlab.mat за тези данни.

Това, което искам да направя, е да избера пиксела(ите) от приложеното изображение, чиято u2 стойност е equal to 1.

Някакви идеи как може да се направи това в matlab?

Благодаря.


person Simplicity    schedule 20.02.2013    source източник


Отговори (2)


Вземете индексите на подходящите пиксели:

ind = find( u2 == 1 ); % return indices of all pixels with u2 eq to 1

Вземете самите пиксели

pixels = img( ind );
person Shai    schedule 20.02.2013
comment
Когато правя това за u2, получавам: ind = Empty matrix: 0-by-1 въпреки че има стойности, равни на 1. Защо така? Благодаря - person Simplicity; 20.02.2013
comment
Това може да се дължи на числени проблеми. Какво ще кажете за find( abs(u2-1) < 1e-6 )? - person Shai; 20.02.2013
comment
Когато проверих matlab.mat, когато погледнете стойността на клетката, тя казва 1.0000. Но когато щракна двукратно върху клетката, удивително получавам: 0.999999999259113! Изглежда затова получавам празна матрица като върната стойност... - person Simplicity; 20.02.2013
comment
Вашето решение дава резултатите от от u2. Но искам да съпоставя това с пикселите в оригиналното изображение. Как мога да получа пикселите от оригиналното изображение, чийто u2 -- 1? Благодаря - person Simplicity; 20.02.2013
comment
@Med-SWEng каква е формата (size) на u2? същата ли е като тази на изображението? ако е така - индексите са същите. Можете да получите местоположения на редове/колони с помощта на [rows cols] = find( abs(u2-1)<1e-6 ); - person Shai; 20.02.2013
comment
@shai.Да, u2 има същия размер като изображението - person Simplicity; 20.02.2013
comment
Съжалявам, какво имате предвид под abs(u2-1)<1e-6 ? Благодаря - person Simplicity; 20.02.2013
comment
Да, когато използвам [rows cols] = find(u2 == 1) например и получавам местоположенията на тези пиксели от u2 равно на 1. В моя изход, как бих върнал тези местоположения от оригиналното изображение? - person Simplicity; 20.02.2013
comment

Като алтернатива можете да избегнете използването на find и да преминете направо към логическо индексиране.

Дадено изображение като:

>> image = [1 3 5; 2 3 1; 3 2 2]

image =

     1     3     5
     2     3     1
     3     2     2

можете да намерите пикселите със стойност 2, като използвате условието iamge == 2:

K>> image == 2

ans =

     0     0     0
     1     0     0
     0     1     1

Ако например искате да манипулирате тези пиксели, като ги зададете на 7, можете лесно да направите това с един ред:

image(image == 2) = 7

image =

     1     3     5
     7     3     1
     3     7     7
person fuyas    schedule 20.02.2013