File created using imwrite does not appear - image

New to Matlab, so sorry if this is a silly question. I'm filtering a series images for my research. I'm not having a problem with the actual image processing, it's when I go to save the modified images that I run into trouble. For some reason, I can only save the modified images using imwrite as .gif files. If I try to save them as .jpg, .bmp, etc., the file does not appear in the working folder. The corresponding generic file appears, but the actual .jpg does not. Additionally, when I use imread to reopen the midified files (that actually saved as .gifs), the image is just black. But, if I open the .gif file outside Matlab, it appears as expected. Code below.
close all
N=90;
IMAGES=cell(1,N); %creates a cell to store image data
FNAMEFMT='20110805115033(1)_%d.jpg';
for i=1:N
IMAGES{i}=imread(sprintf(FNAMEFMT,i)); %reads original images into IMAGES
end
RESULT=cell(1,N); %to store modified/filtered images
for i=1:N
gray=rgb2gray(IMAGES{i}); %converts to grayscale
binary=im2bw(gray,.5); %converts to bw
filter=bwareaopen(binary,35); %removes small features
RESULT{i}=filter; %saves modified image in RESULTS
end
for i=1:N
WRITEFMT='filter_%d';
imwrite(RESULT{i},sprintf(WRITEFMT,i),'gif'); %writes RESULTS as .gif
end

If I try to save them as .jpg, .bmp, etc., the file does not appear in the working folder.
You need to change
WRITEFMT='filter_%d';
to
WRITEFMT='filter_%d.jpg';
The files you are outputting are jpeg files (as per the imwrite argument 'jpg' instead of 'gif'), but they don't have a file extension. If you manually add the extension, they open as jpgs.
For the black gif, see if this helps.
Once you export as jpg, viewing them works
imshow(imread('filter_1.jpg'))

Related

Create small high quality PDF embedding optimized PNG?

I'm trying to create a small PDF file, embedding one optimized PNG image displayed as a header and footer on a 3 page PDF (same image must appear 6x in the PDF)
My optimized PNG image is only 2.3KB. It looks very sharp.
Failed with libreoffice
When I insert just one instance of the 2.3KB PNG image into a Libreoffice Writer doc containing only text, then export as PDF I can see that the image gets re-compressed to JPG and the resulting PDF file grows by about 40KB after adding the image. It also loses quality, the PNG also gets JPG fuzzy edges.
If I right click the image and select compression, there is no way to disable recompressing the image (it's already optimized better than libreoffice could do it) I've tried setting a compression level of 0,1,9 etc. Choosing JPG, no resize, lossless, etc but there was no improvement.
Failed with wkhtmltopdf
I also tried making a test page and used wkhtml2pdf but it did the same thing. Adding the low quality flag made no difference.
PDF Spec suggests PNG is supported?
From skimming the PDF spec, it looks like PNG images are supported.
Even plain text PDF files are surprisingly large
The disappointing thing is also when I take a 7KB HTML file which is basically just <html><body><p>foo...</p><p>bar...</p> (only about 15 paragraphs) with no CSS. The resulting 2 page PDF file is 30KB. Why should a 7kb (almost plain text) file become 30kb as a PDF?
Suggestions?
Can someone please suggest how to make a small PDF file in Linux?
I need to include 7KB of text and repeat one PNG image 6 times.
Manually or programatically. I'll take whatever I can get at this point.
PDF Spec suggests PNG is supported?
PNG isn't supported per se; PDF allows embedding JPEG images as-is, but not PNG images. PDF does borrow a set of features of the PNG format, however.
rinohtype (full disclosure: I'm the author) tries to embed as much as possible from PNG images as-is into the PDF. This does involve some bit-juggling to separate the alpha channel from the color data for example, but no reencoding of the image is performed. It does not (yet) support interlaced PNGs.
rinohtype should be able to do what you want to achieve. But please note that it currently is in a beta stage, so you might encounter some bugs.
Even plain text PDF files are surprisingly large
To keep the PDF size as small as possible, make sure not to embed/subset any of the fonts. Use only the fonts from the base 14 PDF fonts which are provided by PDF readers.
What you want is certainly achievable. Regarding the image quality, I would recommend making your image twice the size that you want it to actually display at in the PDF to keep it looking sharp.
As to the size, I've just modified a test in my PDF writer module (WIP..) to include a 7.2K png, 200px x 70px, in a PDF twice and the PDF came out at 6.8K 8). There's not much text included, but more text will only add what it's worth + a small percentage.
You can see the module and original test here.. https://github.com/DoccaPDF/docca-pdf-writer/blob/master/src/tests/writer.js#L40
That test adds ~112K of images to the PDF and results in a 103K PDF.
Of course not all images are created equal so you milage may vary..
*the images are only actually added to the PDF once, but are displayed multiple time.

Matlab image conversion jp2 to jpg

I have a weird problem in matlab. I have code that takes in a directory of jp2 files and converts all of them to either tiff, png, or a jpg file. Then it puts these files in a new directory. The user can specify how big they want the file to be in terms of how many pixels are used (EX: 1:3:end is every three pixels). This code works perfectly for the png and tiff conversions.
With the jpg conversion there is no error whatsoever but when I go to click on the jpeg file in the new folder (which it does go to at least) It says "Windows Photo Viewer can't open this picture because the file appears to be damaged, corrupted, or is too large" I tried opening the pictures in other viewers but it said the same thing. All of the png and tiff pictures opened fine.
Some help would be greatly appreciated, thanks!
Edit: I noticed when I call imshow on the location of the jpeg file it actually does show up in matlab. It still does not show up in any image viewers though

Inkscape - Not fully converting png into svg

I opened one PNG file in Inkscape and exported it as SVG. When I opened that file with notepad I came to know that the PNG file is embedded within it. If the conversion happened then the resulting file should have only SVG related tags. It shouldn't embed the image within it. Or Am I doing anything wrong.
Note: Save as option also producing the same kind of file. I am using Inkscape version 0.48 in Windows 7 - 64 bit.
This is a bit of an old thread, but it comes up early in Google so I thought I'd contribute something.
In Inkscape, you must do a trace to change the image into SVG. Look at the Path | Trace bitmap menu item and play with the options on that screen.
After creating the trace, you can remove your source image and have a pure svg in your saved file.
I've found it helpful to create layers in Inkscape and move the source image to one layer and put the trace on another layer to let me make quick comparisons using the 'hide layer' buttons.
BTW, your source image can be anything - bmp, jpg, png, etc.
A .png file is a raster image file. In order to convert it to a vector graphic based format like .svg and have it be "native" svg rather than an included image you are going to either have to use a program that can rasterize it or in Inkscape trace the bitmap and turn it into paths. Inkscape provides information on tracing: http://inkscape.org/doc/tracing/tutorial-tracing.html

Is it possible to turn a png into a layered PSD file?

I have a PNG image that I would like to turn into a layered PSD image. The image itself is mostly white space with several areas of text.
I tried to convert this PNG to a PSD but I ended up with a flat image.
I am not too versed in image processing. Is there any service that can recognize areas of white space and turn the various components of an image into layers?
Sorry png or jpeg files cannot be converted into layers . For this, you need to break the image into layers and then convert the file as .psd
Yes .PNG can be layered (from Macromedia Fireworks back in the day)
I still have about 100,000 layered files in .PNG
If I remember right Corel Draw can convert these files.
Yes, but in Adobe Fireworks CS6 .PNG format.
Save your document with the Photoshop layers in .PSD format in a folder
Open saved .PSD with Adobe Fireworks CS6
In Fireworks CS6, click 'File' then 'Save As' and select the first 'Fireworks .PNG' format option. You will notice that the name of your file will have the following extensions: [name.fw.png].
Save
PS. Never Save to "PNG level.PNG" because the layers will be unified. Just like it should not be exported to any .PNG. That is, just save the .PSD document to .FW.PNG.

Image shows properly with .show() but saves with artifacts

I have unpickled an image, and utilizing PIL when I use img.show() I can see the image in external viewer properly but when I try to save it using img.save() it is plagued by horizontal color artifacts. As img.show() is using bmp to temporarily save and show the file, I tried using img.save(filepath, "bmp") as well as other file formats. Other formats, such as jpg and png, totally corrupt the image, while bmp creates color artifacts. I checked the documentation for PIL but it was not helpful. What method can I use to save the image I see properly?
After many tries, it turns out instead of:
with open("img.bmp", 'w') as f:
image.save(f)
opening the file with the binary attribute "b" added solves the issue. Like this:
with open("img.bmp", 'wb') as f:
image.save(f)

Resources