# How to modified maximum pixel value in logical array

1 visualización (últimos 30 días)
Stephen john el 12 de Ag. de 2022
Comentada: Stephen john el 13 de Ag. de 2022
Hello everyone i hope you are doing well.
I have the following image in which white pixel value exist 35,40,45,55
• I want to find the maximum pixel (index) for example in above 55 is the maximum pixel (index) then add 50 pixel in to to make new maximum value to 105
• Then i want to divided the each pixel value with the maximum value(105). Then map the value to 10000 e.g multiple new pixel value with 10000 so it will map between 1 to 10000
I have find the maximum and minimum pixel value as 35 and 55
row1 = min(idx);
row2 = max(idx);
How can i do it in matlab
##### 5 comentariosMostrar 3 comentarios más antiguosOcultar 3 comentarios más antiguos
Stephen john el 13 de Ag. de 2022
@DGM as you can see i have 1's in logical array in position 35,40,45,50,55
I want to shift the values by 50 for examples 33 to 88 and 55 to 105.
Then i will divided the index value by new maximum value which is 105.
for example 35/105=0.333 which then multiple by 10000 which gives the results 3333 Now the 1's start should be in the index 3333
same for remaining value
for example 55 is maximum value then 55/105=0.5238 which is multiple by 10000 which is 5238 is the maximum value where 1's exist.
Stephen john el 13 de Ag. de 2022

Iniciar sesión para comentar.

### Respuestas (1)

DGM el 13 de Ag. de 2022
Editada: DGM el 13 de Ag. de 2022
I'm going to post this as a tentative answer. I doubt my interpretation of your intent is wholly correct, but it's probably correct enough to demonstrate inroads to a satisfactory answer.
% get y-centers for each blob
CC = bwconncomp(mask,4); % picking 4-connectivity is important here
S = regionprops(CC,'centroid');
ycenters = vertcat(S.Centroid);
ycenters = ycenters(:,2); % y-center of each blob
% get input and output range
inrange = [min(ycenters) max(ycenters)+50]; % [35 105]
outrange = [1 10000];
% get rescaled values for each blob
blobvals = (outrange(2)-outrange(1))*(ycenters-inrange(1))/(inrange(2)-inrange(1))+outrange(1);
% recolor image according to calculated blob values
for b = 1:CC.NumObjects
outpict(CC.PixelIdxList{b}) = blobvals(b);
end
% [35 105] is scaled to [1 10000]
% but bear in mind that 55 is smaller than 105
pxrange = [min(nonzeros(outpict(:))) max(nonzeros(outpict(:)))]
pxrange = 1×2
1.0e+03 * 0.0010 2.8579
##### 1 comentarioMostrar -1 comentarios más antiguosOcultar -1 comentarios más antiguos
Stephen john el 13 de Ag. de 2022
@DGM I think I can not say it correctly.
as you can see i have 1's in logical array in position 35,40,45,50,55
I want to shift the values by 50 for examples 33 to 88 and 55 to 105.
Then i will divided the index value by new maximum value which is 105.
for example 35/105=0.333 which then multiple by 10000 which gives the results 3333 Now the 1's start should be in the index 3333
same for remaining value
for example 55 is maximum value then 55/105=0.5238 which is multiple by 10000 which is 5238 is the maximum value where 1's exist.

Iniciar sesión para comentar.

### Categorías

Más información sobre Convert Image Type en Help Center y File Exchange.

R2022a

### Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by