The image calculation found that they are all black or all white.
2 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
bozheng
am 26 Okt. 2023
Beantwortet: Image Analyst
am 28 Apr. 2024
The image calculation found that they are all black or all white.
my coding
img1= imread('SCM Data111.jpg');
img = (-0.18 / (-0.28 / (45.39 /img1 - 1))+1) * 5.3;
imwrite(img, 'n_.jpg');
Can you tell me the reason why the subsequent pictures are all black and how to solve it?
0 Kommentare
Akzeptierte Antwort
Walter Roberson
am 26 Okt. 2023
img = (-0.18 / (-0.28 / (45.39 /double(img1) - 1))+1) * 5.3;
When you do calculations with integer datatypes, the results of the calculations are converted to the integer data type.
3 Kommentare
Walter Roberson
am 26 Okt. 2023
Your formula divides by the input, but parts of the input can be 0 (especially where there is black.) That leads to large output values in places -- but also leads to small output values for a lot of the image because the division by the large-valued components comes out small.
filename = 'https://www.mathworks.com/matlabcentral/answers/uploaded_files/1521731/image.jpeg';
img1 = imread(filename);
min(img1(:)), max(img1(:))
img = (-0.18 / (-0.28 / (45.39 /double(img1) - 1))+1) * 5.3;
min(img(:)), max(img(:))
syms x
Q = @(v) sym(v);
imgs = (-Q(0.18) / (-Q(0.28) / (Q(45.39) /x - 1))+1) * Q(5.3)
fplot(imgs, [0 255])
ir = uint8(rescale(img, 0, 255, 'InputMin', 2.5, 'InputMax', 50));
imshow(ir); colorbar
Weitere Antworten (1)
Image Analyst
am 28 Apr. 2024
img1 is an array so you need to use dot division
img = (-0.18 ./ (-0.28 ./ (45.39 ./ img1 - 1)) + 1) * 5.3;
And double check your parentheses to make sure they're correct. For example is
(45.39 ./ img1 - 1)
supposed to be
((45.39 ./ img1) - 1)
or
(45.39 ./ (img1 - 1))
0 Kommentare
Siehe auch
Kategorien
Mehr zu Dates and Time finden Sie in Help Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!