How to use convolutional neural network on binary image using Keras?
up vote
0
down vote
favorite
I am trying to train a cnn model for ocr using keras. I preprocessed the images by converting to grayscale, removing noise and then converting it to binary, as binary images work better in ocr. But the problem I am getting is that binary image has 2 dimensions and no channel dimension and conv2d in keras(well any conv layer in general) require 3 dimensions. So what should I do to add a dimension but keep image binary? I am using cv2 for image processing so please tell solutions using that preferably. Also tell me whether I am right that using binary image dataset is better for ocr.
python opencv image-processing keras conv-neural-network
|
show 3 more comments
up vote
0
down vote
favorite
I am trying to train a cnn model for ocr using keras. I preprocessed the images by converting to grayscale, removing noise and then converting it to binary, as binary images work better in ocr. But the problem I am getting is that binary image has 2 dimensions and no channel dimension and conv2d in keras(well any conv layer in general) require 3 dimensions. So what should I do to add a dimension but keep image binary? I am using cv2 for image processing so please tell solutions using that preferably. Also tell me whether I am right that using binary image dataset is better for ocr.
python opencv image-processing keras conv-neural-network
change the dnn architecture to only use one channel. Or add redudant channels, but this will make your model unnecessarily complex.
– Micka
Nov 9 at 10:04
@Micka but the conv2d layer of keras requires 3 input dimensions. How can I change that? As for adding redundant channel how to add that?
– Shantanu Shinde
Nov 9 at 10:10
according to the docs:"When using this layer as the first layer in a model, provide the keyword argument input_shape (tuple of integers, does not include the batch axis), e.g. input_shape=(128, 128, 3) for 128x128 RGB pictures in data_format="channels_last"."
So I think you could useinput_shape=(height,width,1)
for your grayscale or binary data? Sorry, from my side it is only theoretical. And I don't know how to duplicate channels or sth. in python.
– Micka
Nov 9 at 10:24
@Micka I am using binary, not grayscale
– Shantanu Shinde
Nov 9 at 10:54
yes, but it will be used as grayscale. The important thing is, that it is only 1 channel. That's the 1 ininput_shape=(height,width,1)
– Micka
Nov 9 at 11:01
|
show 3 more comments
up vote
0
down vote
favorite
up vote
0
down vote
favorite
I am trying to train a cnn model for ocr using keras. I preprocessed the images by converting to grayscale, removing noise and then converting it to binary, as binary images work better in ocr. But the problem I am getting is that binary image has 2 dimensions and no channel dimension and conv2d in keras(well any conv layer in general) require 3 dimensions. So what should I do to add a dimension but keep image binary? I am using cv2 for image processing so please tell solutions using that preferably. Also tell me whether I am right that using binary image dataset is better for ocr.
python opencv image-processing keras conv-neural-network
I am trying to train a cnn model for ocr using keras. I preprocessed the images by converting to grayscale, removing noise and then converting it to binary, as binary images work better in ocr. But the problem I am getting is that binary image has 2 dimensions and no channel dimension and conv2d in keras(well any conv layer in general) require 3 dimensions. So what should I do to add a dimension but keep image binary? I am using cv2 for image processing so please tell solutions using that preferably. Also tell me whether I am right that using binary image dataset is better for ocr.
python opencv image-processing keras conv-neural-network
python opencv image-processing keras conv-neural-network
asked Nov 9 at 9:51
Shantanu Shinde
57
57
change the dnn architecture to only use one channel. Or add redudant channels, but this will make your model unnecessarily complex.
– Micka
Nov 9 at 10:04
@Micka but the conv2d layer of keras requires 3 input dimensions. How can I change that? As for adding redundant channel how to add that?
– Shantanu Shinde
Nov 9 at 10:10
according to the docs:"When using this layer as the first layer in a model, provide the keyword argument input_shape (tuple of integers, does not include the batch axis), e.g. input_shape=(128, 128, 3) for 128x128 RGB pictures in data_format="channels_last"."
So I think you could useinput_shape=(height,width,1)
for your grayscale or binary data? Sorry, from my side it is only theoretical. And I don't know how to duplicate channels or sth. in python.
– Micka
Nov 9 at 10:24
@Micka I am using binary, not grayscale
– Shantanu Shinde
Nov 9 at 10:54
yes, but it will be used as grayscale. The important thing is, that it is only 1 channel. That's the 1 ininput_shape=(height,width,1)
– Micka
Nov 9 at 11:01
|
show 3 more comments
change the dnn architecture to only use one channel. Or add redudant channels, but this will make your model unnecessarily complex.
– Micka
Nov 9 at 10:04
@Micka but the conv2d layer of keras requires 3 input dimensions. How can I change that? As for adding redundant channel how to add that?
– Shantanu Shinde
Nov 9 at 10:10
according to the docs:"When using this layer as the first layer in a model, provide the keyword argument input_shape (tuple of integers, does not include the batch axis), e.g. input_shape=(128, 128, 3) for 128x128 RGB pictures in data_format="channels_last"."
So I think you could useinput_shape=(height,width,1)
for your grayscale or binary data? Sorry, from my side it is only theoretical. And I don't know how to duplicate channels or sth. in python.
– Micka
Nov 9 at 10:24
@Micka I am using binary, not grayscale
– Shantanu Shinde
Nov 9 at 10:54
yes, but it will be used as grayscale. The important thing is, that it is only 1 channel. That's the 1 ininput_shape=(height,width,1)
– Micka
Nov 9 at 11:01
change the dnn architecture to only use one channel. Or add redudant channels, but this will make your model unnecessarily complex.
– Micka
Nov 9 at 10:04
change the dnn architecture to only use one channel. Or add redudant channels, but this will make your model unnecessarily complex.
– Micka
Nov 9 at 10:04
@Micka but the conv2d layer of keras requires 3 input dimensions. How can I change that? As for adding redundant channel how to add that?
– Shantanu Shinde
Nov 9 at 10:10
@Micka but the conv2d layer of keras requires 3 input dimensions. How can I change that? As for adding redundant channel how to add that?
– Shantanu Shinde
Nov 9 at 10:10
according to the docs:
"When using this layer as the first layer in a model, provide the keyword argument input_shape (tuple of integers, does not include the batch axis), e.g. input_shape=(128, 128, 3) for 128x128 RGB pictures in data_format="channels_last"."
So I think you could use input_shape=(height,width,1)
for your grayscale or binary data? Sorry, from my side it is only theoretical. And I don't know how to duplicate channels or sth. in python.– Micka
Nov 9 at 10:24
according to the docs:
"When using this layer as the first layer in a model, provide the keyword argument input_shape (tuple of integers, does not include the batch axis), e.g. input_shape=(128, 128, 3) for 128x128 RGB pictures in data_format="channels_last"."
So I think you could use input_shape=(height,width,1)
for your grayscale or binary data? Sorry, from my side it is only theoretical. And I don't know how to duplicate channels or sth. in python.– Micka
Nov 9 at 10:24
@Micka I am using binary, not grayscale
– Shantanu Shinde
Nov 9 at 10:54
@Micka I am using binary, not grayscale
– Shantanu Shinde
Nov 9 at 10:54
yes, but it will be used as grayscale. The important thing is, that it is only 1 channel. That's the 1 in
input_shape=(height,width,1)
– Micka
Nov 9 at 11:01
yes, but it will be used as grayscale. The important thing is, that it is only 1 channel. That's the 1 in
input_shape=(height,width,1)
– Micka
Nov 9 at 11:01
|
show 3 more comments
1 Answer
1
active
oldest
votes
up vote
0
down vote
accepted
I got my solution. I used numpy function numpy.expand_dims() to add empty dimension. so it became (width,height,1). Here is what I did:-
img = np.expand_dims(img,axis=2)
add a comment |
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
up vote
0
down vote
accepted
I got my solution. I used numpy function numpy.expand_dims() to add empty dimension. so it became (width,height,1). Here is what I did:-
img = np.expand_dims(img,axis=2)
add a comment |
up vote
0
down vote
accepted
I got my solution. I used numpy function numpy.expand_dims() to add empty dimension. so it became (width,height,1). Here is what I did:-
img = np.expand_dims(img,axis=2)
add a comment |
up vote
0
down vote
accepted
up vote
0
down vote
accepted
I got my solution. I used numpy function numpy.expand_dims() to add empty dimension. so it became (width,height,1). Here is what I did:-
img = np.expand_dims(img,axis=2)
I got my solution. I used numpy function numpy.expand_dims() to add empty dimension. so it became (width,height,1). Here is what I did:-
img = np.expand_dims(img,axis=2)
answered Nov 9 at 14:45
Shantanu Shinde
57
57
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.
Some of your past answers have not been well-received, and you're in danger of being blocked from answering.
Please pay close attention to the following guidance:
- 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%2f53223398%2fhow-to-use-convolutional-neural-network-on-binary-image-using-keras%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
change the dnn architecture to only use one channel. Or add redudant channels, but this will make your model unnecessarily complex.
– Micka
Nov 9 at 10:04
@Micka but the conv2d layer of keras requires 3 input dimensions. How can I change that? As for adding redundant channel how to add that?
– Shantanu Shinde
Nov 9 at 10:10
according to the docs:
"When using this layer as the first layer in a model, provide the keyword argument input_shape (tuple of integers, does not include the batch axis), e.g. input_shape=(128, 128, 3) for 128x128 RGB pictures in data_format="channels_last"."
So I think you could useinput_shape=(height,width,1)
for your grayscale or binary data? Sorry, from my side it is only theoretical. And I don't know how to duplicate channels or sth. in python.– Micka
Nov 9 at 10:24
@Micka I am using binary, not grayscale
– Shantanu Shinde
Nov 9 at 10:54
yes, but it will be used as grayscale. The important thing is, that it is only 1 channel. That's the 1 in
input_shape=(height,width,1)
– Micka
Nov 9 at 11:01