Image manipulation in Matplotlib
This is a bit of a naive question, but I'm new to data science, thus the question.
I'm following a course which reads a 2D image and performs the following operation,
image = mpimg.imread('test.jpg')
duplicate = np.copy(image)
red_threshold = green_threshold = blue_threshold = 0
rgb_threshold = [red_threshold, green_threshold, blue_threshold]
Specifically this line
thresholds = (image[:,:,0] < rgb_threshold[0]) | (image[:,:,1] < rgb_threshold[1]) | (image[:,:,2] < rgb_threshold[2])
duplicate[thresholds] = [0,0,0]
The explanation for this line of code is,
The result, duplicate, is an image in which pixels that were above the
threshold have been retained, and pixels below the threshold have been
blacked out.
I just don't understand how?
Can someone break this up a little and help me understand what's going on here?
python numpy matplotlib computer-vision
add a comment |
This is a bit of a naive question, but I'm new to data science, thus the question.
I'm following a course which reads a 2D image and performs the following operation,
image = mpimg.imread('test.jpg')
duplicate = np.copy(image)
red_threshold = green_threshold = blue_threshold = 0
rgb_threshold = [red_threshold, green_threshold, blue_threshold]
Specifically this line
thresholds = (image[:,:,0] < rgb_threshold[0]) | (image[:,:,1] < rgb_threshold[1]) | (image[:,:,2] < rgb_threshold[2])
duplicate[thresholds] = [0,0,0]
The explanation for this line of code is,
The result, duplicate, is an image in which pixels that were above the
threshold have been retained, and pixels below the threshold have been
blacked out.
I just don't understand how?
Can someone break this up a little and help me understand what's going on here?
python numpy matplotlib computer-vision
I would suggest using a minimal representative data and running the posted code and further study each part of|separately.
– Divakar
Nov 12 '18 at 16:41
1
This is not a 3D image, it is a 2D image with 3 channels. Some software represents such an image as a 3D matrix, but that doesn't make it a 3D image.
– Cris Luengo
Nov 12 '18 at 17:10
@CrisLuengo edited and corrected.
– Melissa Stewart
Nov 12 '18 at 17:21
Anyway the example seems to me a bit buggy, where did you copypaste it from?
– Geeocode
Nov 12 '18 at 17:29
add a comment |
This is a bit of a naive question, but I'm new to data science, thus the question.
I'm following a course which reads a 2D image and performs the following operation,
image = mpimg.imread('test.jpg')
duplicate = np.copy(image)
red_threshold = green_threshold = blue_threshold = 0
rgb_threshold = [red_threshold, green_threshold, blue_threshold]
Specifically this line
thresholds = (image[:,:,0] < rgb_threshold[0]) | (image[:,:,1] < rgb_threshold[1]) | (image[:,:,2] < rgb_threshold[2])
duplicate[thresholds] = [0,0,0]
The explanation for this line of code is,
The result, duplicate, is an image in which pixels that were above the
threshold have been retained, and pixels below the threshold have been
blacked out.
I just don't understand how?
Can someone break this up a little and help me understand what's going on here?
python numpy matplotlib computer-vision
This is a bit of a naive question, but I'm new to data science, thus the question.
I'm following a course which reads a 2D image and performs the following operation,
image = mpimg.imread('test.jpg')
duplicate = np.copy(image)
red_threshold = green_threshold = blue_threshold = 0
rgb_threshold = [red_threshold, green_threshold, blue_threshold]
Specifically this line
thresholds = (image[:,:,0] < rgb_threshold[0]) | (image[:,:,1] < rgb_threshold[1]) | (image[:,:,2] < rgb_threshold[2])
duplicate[thresholds] = [0,0,0]
The explanation for this line of code is,
The result, duplicate, is an image in which pixels that were above the
threshold have been retained, and pixels below the threshold have been
blacked out.
I just don't understand how?
Can someone break this up a little and help me understand what's going on here?
python numpy matplotlib computer-vision
python numpy matplotlib computer-vision
edited Nov 12 '18 at 17:22
Melissa Stewart
asked Nov 12 '18 at 16:39
Melissa StewartMelissa Stewart
857830
857830
I would suggest using a minimal representative data and running the posted code and further study each part of|separately.
– Divakar
Nov 12 '18 at 16:41
1
This is not a 3D image, it is a 2D image with 3 channels. Some software represents such an image as a 3D matrix, but that doesn't make it a 3D image.
– Cris Luengo
Nov 12 '18 at 17:10
@CrisLuengo edited and corrected.
– Melissa Stewart
Nov 12 '18 at 17:21
Anyway the example seems to me a bit buggy, where did you copypaste it from?
– Geeocode
Nov 12 '18 at 17:29
add a comment |
I would suggest using a minimal representative data and running the posted code and further study each part of|separately.
– Divakar
Nov 12 '18 at 16:41
1
This is not a 3D image, it is a 2D image with 3 channels. Some software represents such an image as a 3D matrix, but that doesn't make it a 3D image.
– Cris Luengo
Nov 12 '18 at 17:10
@CrisLuengo edited and corrected.
– Melissa Stewart
Nov 12 '18 at 17:21
Anyway the example seems to me a bit buggy, where did you copypaste it from?
– Geeocode
Nov 12 '18 at 17:29
I would suggest using a minimal representative data and running the posted code and further study each part of
| separately.– Divakar
Nov 12 '18 at 16:41
I would suggest using a minimal representative data and running the posted code and further study each part of
| separately.– Divakar
Nov 12 '18 at 16:41
1
1
This is not a 3D image, it is a 2D image with 3 channels. Some software represents such an image as a 3D matrix, but that doesn't make it a 3D image.
– Cris Luengo
Nov 12 '18 at 17:10
This is not a 3D image, it is a 2D image with 3 channels. Some software represents such an image as a 3D matrix, but that doesn't make it a 3D image.
– Cris Luengo
Nov 12 '18 at 17:10
@CrisLuengo edited and corrected.
– Melissa Stewart
Nov 12 '18 at 17:21
@CrisLuengo edited and corrected.
– Melissa Stewart
Nov 12 '18 at 17:21
Anyway the example seems to me a bit buggy, where did you copypaste it from?
– Geeocode
Nov 12 '18 at 17:29
Anyway the example seems to me a bit buggy, where did you copypaste it from?
– Geeocode
Nov 12 '18 at 17:29
add a comment |
1 Answer
1
active
oldest
votes
The above expression,
thresholds = (image[:,:,0] < rgb_threshold[0]) | (image[:,:,1] < rgb_threshold[1]) | (image[:,:,2] < rgb_threshold[2])
unfolded:
image[:,:,0]
here the 3rd index, 0 is the channel of the image from RGB, thus image[:,:,0], image[:,:,1], image[:,:,2] is RGB channels' pixels respectively.
image[:,:,0] < rgb_threshold[0])
means, that we only need pixels with are below the value of the actual channel's threshold value, here 0.
In this case we intend get the sum of numpy arrays of the thresholded color channels's values with bitwise or operator | like e.g:
import numpy as np
a = np.array([26,0,46,])
b = np.array([0,55,1,])
print(a | b)
Out:
[26 55 47]
add a comment |
Your Answer
StackExchange.ifUsing("editor", function ()
StackExchange.using("externalEditor", function ()
StackExchange.using("snippets", function ()
StackExchange.snippets.init();
);
);
, "code-snippets");
StackExchange.ready(function()
var channelOptions =
tags: "".split(" "),
id: "1"
;
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function()
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled)
StackExchange.using("snippets", function()
createEditor();
);
else
createEditor();
);
function createEditor()
StackExchange.prepareEditor(
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader:
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
,
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
);
);
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53266496%2fimage-manipulation-in-matplotlib%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
The above expression,
thresholds = (image[:,:,0] < rgb_threshold[0]) | (image[:,:,1] < rgb_threshold[1]) | (image[:,:,2] < rgb_threshold[2])
unfolded:
image[:,:,0]
here the 3rd index, 0 is the channel of the image from RGB, thus image[:,:,0], image[:,:,1], image[:,:,2] is RGB channels' pixels respectively.
image[:,:,0] < rgb_threshold[0])
means, that we only need pixels with are below the value of the actual channel's threshold value, here 0.
In this case we intend get the sum of numpy arrays of the thresholded color channels's values with bitwise or operator | like e.g:
import numpy as np
a = np.array([26,0,46,])
b = np.array([0,55,1,])
print(a | b)
Out:
[26 55 47]
add a comment |
The above expression,
thresholds = (image[:,:,0] < rgb_threshold[0]) | (image[:,:,1] < rgb_threshold[1]) | (image[:,:,2] < rgb_threshold[2])
unfolded:
image[:,:,0]
here the 3rd index, 0 is the channel of the image from RGB, thus image[:,:,0], image[:,:,1], image[:,:,2] is RGB channels' pixels respectively.
image[:,:,0] < rgb_threshold[0])
means, that we only need pixels with are below the value of the actual channel's threshold value, here 0.
In this case we intend get the sum of numpy arrays of the thresholded color channels's values with bitwise or operator | like e.g:
import numpy as np
a = np.array([26,0,46,])
b = np.array([0,55,1,])
print(a | b)
Out:
[26 55 47]
add a comment |
The above expression,
thresholds = (image[:,:,0] < rgb_threshold[0]) | (image[:,:,1] < rgb_threshold[1]) | (image[:,:,2] < rgb_threshold[2])
unfolded:
image[:,:,0]
here the 3rd index, 0 is the channel of the image from RGB, thus image[:,:,0], image[:,:,1], image[:,:,2] is RGB channels' pixels respectively.
image[:,:,0] < rgb_threshold[0])
means, that we only need pixels with are below the value of the actual channel's threshold value, here 0.
In this case we intend get the sum of numpy arrays of the thresholded color channels's values with bitwise or operator | like e.g:
import numpy as np
a = np.array([26,0,46,])
b = np.array([0,55,1,])
print(a | b)
Out:
[26 55 47]
The above expression,
thresholds = (image[:,:,0] < rgb_threshold[0]) | (image[:,:,1] < rgb_threshold[1]) | (image[:,:,2] < rgb_threshold[2])
unfolded:
image[:,:,0]
here the 3rd index, 0 is the channel of the image from RGB, thus image[:,:,0], image[:,:,1], image[:,:,2] is RGB channels' pixels respectively.
image[:,:,0] < rgb_threshold[0])
means, that we only need pixels with are below the value of the actual channel's threshold value, here 0.
In this case we intend get the sum of numpy arrays of the thresholded color channels's values with bitwise or operator | like e.g:
import numpy as np
a = np.array([26,0,46,])
b = np.array([0,55,1,])
print(a | b)
Out:
[26 55 47]
edited Nov 12 '18 at 17:32
answered Nov 12 '18 at 17:06
GeeocodeGeeocode
2,3801920
2,3801920
add a comment |
add a comment |
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53266496%2fimage-manipulation-in-matplotlib%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
I would suggest using a minimal representative data and running the posted code and further study each part of
|separately.– Divakar
Nov 12 '18 at 16:41
1
This is not a 3D image, it is a 2D image with 3 channels. Some software represents such an image as a 3D matrix, but that doesn't make it a 3D image.
– Cris Luengo
Nov 12 '18 at 17:10
@CrisLuengo edited and corrected.
– Melissa Stewart
Nov 12 '18 at 17:21
Anyway the example seems to me a bit buggy, where did you copypaste it from?
– Geeocode
Nov 12 '18 at 17:29