Check for pixel spacing between two folder images
Clash Royale CLAN TAG#URR8PPP
.everyoneloves__top-leaderboard:empty,.everyoneloves__mid-leaderboard:empty margin-bottom:0;
up vote
5
down vote
favorite
Im trying to match the pixel spacing between two folders, here matches has 994 keys and it shows that i may take more than a day to compute this. Is there any way i can speed up this operation.
the load series function looks like this
import SimpleITK as sitk
def load_series(path):
reader = sitk.ImageSeriesReader()
dicom_names = reader.GetGDCMSeriesFileNames(path)
reader.SetFileNames(dicom_names)
return reader.Execute()
import csv
bar = ProgressBar()
file = open('BenignTest.csv', 'w')
writer = csv.writer(file)
for item in bar(matches.keys()):
for case in matches[item]:
load_case = load_series(case)
if load_case.GetSpacing() == load_series(item).GetSpacing():
writer.writerow((item , case))
break
The matches dictionary looks like this,
'/mnt/sdd1/DSB2017/stage1/0030a160d58723ff36d73f41b170ec21': ['/mnt/sde1/Cancer/128443/01-02-1999-LSS-59120/2-0OPAGELSPLUSD3602.512060.00.11.5-98506',
'/mnt/sde1/Cancer/213485/01-02-1999-ACRIN-13247/3-0OPAGELSPLUSLUNG3502.51204026.71.5-85097',
'/mnt/sde1/Cancer/206342/01-02-1999-ACRIN-68321/3-0OPAGELSPLUSLUNG3702.51205033.31.5-72233',
'/mnt/sde1/Cancer/200209/01-02-2000-CRIN-10216/3-1OPAGELSPLUSLUNG4002.51204026.71.5-42354']...........
Thanks in advance
python performance
add a comment |Â
up vote
5
down vote
favorite
Im trying to match the pixel spacing between two folders, here matches has 994 keys and it shows that i may take more than a day to compute this. Is there any way i can speed up this operation.
the load series function looks like this
import SimpleITK as sitk
def load_series(path):
reader = sitk.ImageSeriesReader()
dicom_names = reader.GetGDCMSeriesFileNames(path)
reader.SetFileNames(dicom_names)
return reader.Execute()
import csv
bar = ProgressBar()
file = open('BenignTest.csv', 'w')
writer = csv.writer(file)
for item in bar(matches.keys()):
for case in matches[item]:
load_case = load_series(case)
if load_case.GetSpacing() == load_series(item).GetSpacing():
writer.writerow((item , case))
break
The matches dictionary looks like this,
'/mnt/sdd1/DSB2017/stage1/0030a160d58723ff36d73f41b170ec21': ['/mnt/sde1/Cancer/128443/01-02-1999-LSS-59120/2-0OPAGELSPLUSD3602.512060.00.11.5-98506',
'/mnt/sde1/Cancer/213485/01-02-1999-ACRIN-13247/3-0OPAGELSPLUSLUNG3502.51204026.71.5-85097',
'/mnt/sde1/Cancer/206342/01-02-1999-ACRIN-68321/3-0OPAGELSPLUSLUNG3702.51205033.31.5-72233',
'/mnt/sde1/Cancer/200209/01-02-2000-CRIN-10216/3-1OPAGELSPLUSLUNG4002.51204026.71.5-42354']...........
Thanks in advance
python performance
1
Cross-posted from Stack Overflow
â Mathias Ettinger
Aug 14 at 8:02
add a comment |Â
up vote
5
down vote
favorite
up vote
5
down vote
favorite
Im trying to match the pixel spacing between two folders, here matches has 994 keys and it shows that i may take more than a day to compute this. Is there any way i can speed up this operation.
the load series function looks like this
import SimpleITK as sitk
def load_series(path):
reader = sitk.ImageSeriesReader()
dicom_names = reader.GetGDCMSeriesFileNames(path)
reader.SetFileNames(dicom_names)
return reader.Execute()
import csv
bar = ProgressBar()
file = open('BenignTest.csv', 'w')
writer = csv.writer(file)
for item in bar(matches.keys()):
for case in matches[item]:
load_case = load_series(case)
if load_case.GetSpacing() == load_series(item).GetSpacing():
writer.writerow((item , case))
break
The matches dictionary looks like this,
'/mnt/sdd1/DSB2017/stage1/0030a160d58723ff36d73f41b170ec21': ['/mnt/sde1/Cancer/128443/01-02-1999-LSS-59120/2-0OPAGELSPLUSD3602.512060.00.11.5-98506',
'/mnt/sde1/Cancer/213485/01-02-1999-ACRIN-13247/3-0OPAGELSPLUSLUNG3502.51204026.71.5-85097',
'/mnt/sde1/Cancer/206342/01-02-1999-ACRIN-68321/3-0OPAGELSPLUSLUNG3702.51205033.31.5-72233',
'/mnt/sde1/Cancer/200209/01-02-2000-CRIN-10216/3-1OPAGELSPLUSLUNG4002.51204026.71.5-42354']...........
Thanks in advance
python performance
Im trying to match the pixel spacing between two folders, here matches has 994 keys and it shows that i may take more than a day to compute this. Is there any way i can speed up this operation.
the load series function looks like this
import SimpleITK as sitk
def load_series(path):
reader = sitk.ImageSeriesReader()
dicom_names = reader.GetGDCMSeriesFileNames(path)
reader.SetFileNames(dicom_names)
return reader.Execute()
import csv
bar = ProgressBar()
file = open('BenignTest.csv', 'w')
writer = csv.writer(file)
for item in bar(matches.keys()):
for case in matches[item]:
load_case = load_series(case)
if load_case.GetSpacing() == load_series(item).GetSpacing():
writer.writerow((item , case))
break
The matches dictionary looks like this,
'/mnt/sdd1/DSB2017/stage1/0030a160d58723ff36d73f41b170ec21': ['/mnt/sde1/Cancer/128443/01-02-1999-LSS-59120/2-0OPAGELSPLUSD3602.512060.00.11.5-98506',
'/mnt/sde1/Cancer/213485/01-02-1999-ACRIN-13247/3-0OPAGELSPLUSLUNG3502.51204026.71.5-85097',
'/mnt/sde1/Cancer/206342/01-02-1999-ACRIN-68321/3-0OPAGELSPLUSLUNG3702.51205033.31.5-72233',
'/mnt/sde1/Cancer/200209/01-02-2000-CRIN-10216/3-1OPAGELSPLUSLUNG4002.51204026.71.5-42354']...........
Thanks in advance
python performance
edited Aug 14 at 8:37
asked Aug 14 at 7:38
Ryan
1284
1284
1
Cross-posted from Stack Overflow
â Mathias Ettinger
Aug 14 at 8:02
add a comment |Â
1
Cross-posted from Stack Overflow
â Mathias Ettinger
Aug 14 at 8:02
1
1
Cross-posted from Stack Overflow
â Mathias Ettinger
Aug 14 at 8:02
Cross-posted from Stack Overflow
â Mathias Ettinger
Aug 14 at 8:02
add a comment |Â
2 Answers
2
active
oldest
votes
up vote
4
down vote
accepted
The simplest improvement that you can do right now is to avoid recomputing the same reference image over and over for each case
of an item
: just store load_series(item).GetSpacing()
before looping over each case
.
You can also use writer.writerows
and feed it a list or a generator instead of writer.writerow
. This should optimize disk writes a bit, even though reading images should be the task that take up the most resources here.
Proposed improvements:
import csv
import SimpleITK as sitk
def load_series(path):
reader = sitk.ImageSeriesReader()
dicom_names = reader.GetGDCMSeriesFileNames(path)
reader.SetFileNames(dicom_names)
return reader.Execute()
def generate_equal_spacing(matches, progress_bar=None):
items = matches.keys()
if progress_bar is not None:
items = progress_bar(items)
for item in items:
reference_spacing = load_series(item).GetSpacing()
for case in matches[item]:
if load_series(case).GetSpacing() == reference_spacing:
yield (item, case)
break
def main(matches, output_filename='BenignTest.csv'):
with open(output_filename, 'w') as f:
writer = csv.writer(f)
writer.writerows(generate_equal_spacing(matches, ProgressBar()))
if __name__ == '__main__':
main(
'/mnt/sdd1/DSB2017/stage1/0030a160d58723ff36d73f41b170ec21': [
'/mnt/sde1/Cancer/128443/01-02-1999-LSS-59120/2-0OPAGELSPLUSD3602.512060.00.11.5-98506',
'/mnt/sde1/Cancer/213485/01-02-1999-ACRIN-13247/3-0OPAGELSPLUSLUNG3502.51204026.71.5-85097',
'/mnt/sde1/Cancer/206342/01-02-1999-ACRIN-68321/3-0OPAGELSPLUSLUNG3702.51205033.31.5-72233',
'/mnt/sde1/Cancer/200209/01-02-2000-CRIN-10216/3-1OPAGELSPLUSLUNG4002.51204026.71.5-42354',
],
...
)
2
In addition:functools.lru_cache
may increase performance further if a lot of the files are the same.
â Peilonrayz
Aug 14 at 8:51
add a comment |Â
up vote
2
down vote
If you just want each image's spacing information, you don't actually need to read the images, just the header info.
Here is a SimpleITK example showing how to read an image's meta-data information without loading the pixels.
https://simpleitk.readthedocs.io/en/latest/Examples/DicomImagePrintTags/Documentation.html
So change your load_series function something like this:
def load_series_spacing(path):
reader = sitk.ImageSeriesReader()
dicom_names = reader.GetGDCMSeriesFileNames(path)
reader.SetFileNames(dicom_names)
reader.ReadImageInformation();
return reader.GetSpacing()
And then, of course, adjust the comparisons in the main routine accordingly, since we're returning spacing, not the actual images.
Hi Dave, Thanks for your inputs, But when i run your function, i get thisAttributeError: 'ImageSeriesReader' object has no attribute 'ReadImageInformation'
any ideas on this ?
â Ryan
Aug 20 at 8:51
Oops, my bad. The method ReadImageInformation is in the class ImageFileReader, not ImageSeriesReader. So you can get the header info for each individual slice. Then GetSpacing would return the X-Y pixel spacing. If you want the Z spacing, you'll have to do some math from the Origins of neighboring slices.
â Dave Chen
Aug 20 at 14:33
add a comment |Â
2 Answers
2
active
oldest
votes
2 Answers
2
active
oldest
votes
active
oldest
votes
active
oldest
votes
up vote
4
down vote
accepted
The simplest improvement that you can do right now is to avoid recomputing the same reference image over and over for each case
of an item
: just store load_series(item).GetSpacing()
before looping over each case
.
You can also use writer.writerows
and feed it a list or a generator instead of writer.writerow
. This should optimize disk writes a bit, even though reading images should be the task that take up the most resources here.
Proposed improvements:
import csv
import SimpleITK as sitk
def load_series(path):
reader = sitk.ImageSeriesReader()
dicom_names = reader.GetGDCMSeriesFileNames(path)
reader.SetFileNames(dicom_names)
return reader.Execute()
def generate_equal_spacing(matches, progress_bar=None):
items = matches.keys()
if progress_bar is not None:
items = progress_bar(items)
for item in items:
reference_spacing = load_series(item).GetSpacing()
for case in matches[item]:
if load_series(case).GetSpacing() == reference_spacing:
yield (item, case)
break
def main(matches, output_filename='BenignTest.csv'):
with open(output_filename, 'w') as f:
writer = csv.writer(f)
writer.writerows(generate_equal_spacing(matches, ProgressBar()))
if __name__ == '__main__':
main(
'/mnt/sdd1/DSB2017/stage1/0030a160d58723ff36d73f41b170ec21': [
'/mnt/sde1/Cancer/128443/01-02-1999-LSS-59120/2-0OPAGELSPLUSD3602.512060.00.11.5-98506',
'/mnt/sde1/Cancer/213485/01-02-1999-ACRIN-13247/3-0OPAGELSPLUSLUNG3502.51204026.71.5-85097',
'/mnt/sde1/Cancer/206342/01-02-1999-ACRIN-68321/3-0OPAGELSPLUSLUNG3702.51205033.31.5-72233',
'/mnt/sde1/Cancer/200209/01-02-2000-CRIN-10216/3-1OPAGELSPLUSLUNG4002.51204026.71.5-42354',
],
...
)
2
In addition:functools.lru_cache
may increase performance further if a lot of the files are the same.
â Peilonrayz
Aug 14 at 8:51
add a comment |Â
up vote
4
down vote
accepted
The simplest improvement that you can do right now is to avoid recomputing the same reference image over and over for each case
of an item
: just store load_series(item).GetSpacing()
before looping over each case
.
You can also use writer.writerows
and feed it a list or a generator instead of writer.writerow
. This should optimize disk writes a bit, even though reading images should be the task that take up the most resources here.
Proposed improvements:
import csv
import SimpleITK as sitk
def load_series(path):
reader = sitk.ImageSeriesReader()
dicom_names = reader.GetGDCMSeriesFileNames(path)
reader.SetFileNames(dicom_names)
return reader.Execute()
def generate_equal_spacing(matches, progress_bar=None):
items = matches.keys()
if progress_bar is not None:
items = progress_bar(items)
for item in items:
reference_spacing = load_series(item).GetSpacing()
for case in matches[item]:
if load_series(case).GetSpacing() == reference_spacing:
yield (item, case)
break
def main(matches, output_filename='BenignTest.csv'):
with open(output_filename, 'w') as f:
writer = csv.writer(f)
writer.writerows(generate_equal_spacing(matches, ProgressBar()))
if __name__ == '__main__':
main(
'/mnt/sdd1/DSB2017/stage1/0030a160d58723ff36d73f41b170ec21': [
'/mnt/sde1/Cancer/128443/01-02-1999-LSS-59120/2-0OPAGELSPLUSD3602.512060.00.11.5-98506',
'/mnt/sde1/Cancer/213485/01-02-1999-ACRIN-13247/3-0OPAGELSPLUSLUNG3502.51204026.71.5-85097',
'/mnt/sde1/Cancer/206342/01-02-1999-ACRIN-68321/3-0OPAGELSPLUSLUNG3702.51205033.31.5-72233',
'/mnt/sde1/Cancer/200209/01-02-2000-CRIN-10216/3-1OPAGELSPLUSLUNG4002.51204026.71.5-42354',
],
...
)
2
In addition:functools.lru_cache
may increase performance further if a lot of the files are the same.
â Peilonrayz
Aug 14 at 8:51
add a comment |Â
up vote
4
down vote
accepted
up vote
4
down vote
accepted
The simplest improvement that you can do right now is to avoid recomputing the same reference image over and over for each case
of an item
: just store load_series(item).GetSpacing()
before looping over each case
.
You can also use writer.writerows
and feed it a list or a generator instead of writer.writerow
. This should optimize disk writes a bit, even though reading images should be the task that take up the most resources here.
Proposed improvements:
import csv
import SimpleITK as sitk
def load_series(path):
reader = sitk.ImageSeriesReader()
dicom_names = reader.GetGDCMSeriesFileNames(path)
reader.SetFileNames(dicom_names)
return reader.Execute()
def generate_equal_spacing(matches, progress_bar=None):
items = matches.keys()
if progress_bar is not None:
items = progress_bar(items)
for item in items:
reference_spacing = load_series(item).GetSpacing()
for case in matches[item]:
if load_series(case).GetSpacing() == reference_spacing:
yield (item, case)
break
def main(matches, output_filename='BenignTest.csv'):
with open(output_filename, 'w') as f:
writer = csv.writer(f)
writer.writerows(generate_equal_spacing(matches, ProgressBar()))
if __name__ == '__main__':
main(
'/mnt/sdd1/DSB2017/stage1/0030a160d58723ff36d73f41b170ec21': [
'/mnt/sde1/Cancer/128443/01-02-1999-LSS-59120/2-0OPAGELSPLUSD3602.512060.00.11.5-98506',
'/mnt/sde1/Cancer/213485/01-02-1999-ACRIN-13247/3-0OPAGELSPLUSLUNG3502.51204026.71.5-85097',
'/mnt/sde1/Cancer/206342/01-02-1999-ACRIN-68321/3-0OPAGELSPLUSLUNG3702.51205033.31.5-72233',
'/mnt/sde1/Cancer/200209/01-02-2000-CRIN-10216/3-1OPAGELSPLUSLUNG4002.51204026.71.5-42354',
],
...
)
The simplest improvement that you can do right now is to avoid recomputing the same reference image over and over for each case
of an item
: just store load_series(item).GetSpacing()
before looping over each case
.
You can also use writer.writerows
and feed it a list or a generator instead of writer.writerow
. This should optimize disk writes a bit, even though reading images should be the task that take up the most resources here.
Proposed improvements:
import csv
import SimpleITK as sitk
def load_series(path):
reader = sitk.ImageSeriesReader()
dicom_names = reader.GetGDCMSeriesFileNames(path)
reader.SetFileNames(dicom_names)
return reader.Execute()
def generate_equal_spacing(matches, progress_bar=None):
items = matches.keys()
if progress_bar is not None:
items = progress_bar(items)
for item in items:
reference_spacing = load_series(item).GetSpacing()
for case in matches[item]:
if load_series(case).GetSpacing() == reference_spacing:
yield (item, case)
break
def main(matches, output_filename='BenignTest.csv'):
with open(output_filename, 'w') as f:
writer = csv.writer(f)
writer.writerows(generate_equal_spacing(matches, ProgressBar()))
if __name__ == '__main__':
main(
'/mnt/sdd1/DSB2017/stage1/0030a160d58723ff36d73f41b170ec21': [
'/mnt/sde1/Cancer/128443/01-02-1999-LSS-59120/2-0OPAGELSPLUSD3602.512060.00.11.5-98506',
'/mnt/sde1/Cancer/213485/01-02-1999-ACRIN-13247/3-0OPAGELSPLUSLUNG3502.51204026.71.5-85097',
'/mnt/sde1/Cancer/206342/01-02-1999-ACRIN-68321/3-0OPAGELSPLUSLUNG3702.51205033.31.5-72233',
'/mnt/sde1/Cancer/200209/01-02-2000-CRIN-10216/3-1OPAGELSPLUSLUNG4002.51204026.71.5-42354',
],
...
)
answered Aug 14 at 8:43
Mathias Ettinger
22k32876
22k32876
2
In addition:functools.lru_cache
may increase performance further if a lot of the files are the same.
â Peilonrayz
Aug 14 at 8:51
add a comment |Â
2
In addition:functools.lru_cache
may increase performance further if a lot of the files are the same.
â Peilonrayz
Aug 14 at 8:51
2
2
In addition:
functools.lru_cache
may increase performance further if a lot of the files are the same.â Peilonrayz
Aug 14 at 8:51
In addition:
functools.lru_cache
may increase performance further if a lot of the files are the same.â Peilonrayz
Aug 14 at 8:51
add a comment |Â
up vote
2
down vote
If you just want each image's spacing information, you don't actually need to read the images, just the header info.
Here is a SimpleITK example showing how to read an image's meta-data information without loading the pixels.
https://simpleitk.readthedocs.io/en/latest/Examples/DicomImagePrintTags/Documentation.html
So change your load_series function something like this:
def load_series_spacing(path):
reader = sitk.ImageSeriesReader()
dicom_names = reader.GetGDCMSeriesFileNames(path)
reader.SetFileNames(dicom_names)
reader.ReadImageInformation();
return reader.GetSpacing()
And then, of course, adjust the comparisons in the main routine accordingly, since we're returning spacing, not the actual images.
Hi Dave, Thanks for your inputs, But when i run your function, i get thisAttributeError: 'ImageSeriesReader' object has no attribute 'ReadImageInformation'
any ideas on this ?
â Ryan
Aug 20 at 8:51
Oops, my bad. The method ReadImageInformation is in the class ImageFileReader, not ImageSeriesReader. So you can get the header info for each individual slice. Then GetSpacing would return the X-Y pixel spacing. If you want the Z spacing, you'll have to do some math from the Origins of neighboring slices.
â Dave Chen
Aug 20 at 14:33
add a comment |Â
up vote
2
down vote
If you just want each image's spacing information, you don't actually need to read the images, just the header info.
Here is a SimpleITK example showing how to read an image's meta-data information without loading the pixels.
https://simpleitk.readthedocs.io/en/latest/Examples/DicomImagePrintTags/Documentation.html
So change your load_series function something like this:
def load_series_spacing(path):
reader = sitk.ImageSeriesReader()
dicom_names = reader.GetGDCMSeriesFileNames(path)
reader.SetFileNames(dicom_names)
reader.ReadImageInformation();
return reader.GetSpacing()
And then, of course, adjust the comparisons in the main routine accordingly, since we're returning spacing, not the actual images.
Hi Dave, Thanks for your inputs, But when i run your function, i get thisAttributeError: 'ImageSeriesReader' object has no attribute 'ReadImageInformation'
any ideas on this ?
â Ryan
Aug 20 at 8:51
Oops, my bad. The method ReadImageInformation is in the class ImageFileReader, not ImageSeriesReader. So you can get the header info for each individual slice. Then GetSpacing would return the X-Y pixel spacing. If you want the Z spacing, you'll have to do some math from the Origins of neighboring slices.
â Dave Chen
Aug 20 at 14:33
add a comment |Â
up vote
2
down vote
up vote
2
down vote
If you just want each image's spacing information, you don't actually need to read the images, just the header info.
Here is a SimpleITK example showing how to read an image's meta-data information without loading the pixels.
https://simpleitk.readthedocs.io/en/latest/Examples/DicomImagePrintTags/Documentation.html
So change your load_series function something like this:
def load_series_spacing(path):
reader = sitk.ImageSeriesReader()
dicom_names = reader.GetGDCMSeriesFileNames(path)
reader.SetFileNames(dicom_names)
reader.ReadImageInformation();
return reader.GetSpacing()
And then, of course, adjust the comparisons in the main routine accordingly, since we're returning spacing, not the actual images.
If you just want each image's spacing information, you don't actually need to read the images, just the header info.
Here is a SimpleITK example showing how to read an image's meta-data information without loading the pixels.
https://simpleitk.readthedocs.io/en/latest/Examples/DicomImagePrintTags/Documentation.html
So change your load_series function something like this:
def load_series_spacing(path):
reader = sitk.ImageSeriesReader()
dicom_names = reader.GetGDCMSeriesFileNames(path)
reader.SetFileNames(dicom_names)
reader.ReadImageInformation();
return reader.GetSpacing()
And then, of course, adjust the comparisons in the main routine accordingly, since we're returning spacing, not the actual images.
answered Aug 17 at 14:13
Dave Chen
214
214
Hi Dave, Thanks for your inputs, But when i run your function, i get thisAttributeError: 'ImageSeriesReader' object has no attribute 'ReadImageInformation'
any ideas on this ?
â Ryan
Aug 20 at 8:51
Oops, my bad. The method ReadImageInformation is in the class ImageFileReader, not ImageSeriesReader. So you can get the header info for each individual slice. Then GetSpacing would return the X-Y pixel spacing. If you want the Z spacing, you'll have to do some math from the Origins of neighboring slices.
â Dave Chen
Aug 20 at 14:33
add a comment |Â
Hi Dave, Thanks for your inputs, But when i run your function, i get thisAttributeError: 'ImageSeriesReader' object has no attribute 'ReadImageInformation'
any ideas on this ?
â Ryan
Aug 20 at 8:51
Oops, my bad. The method ReadImageInformation is in the class ImageFileReader, not ImageSeriesReader. So you can get the header info for each individual slice. Then GetSpacing would return the X-Y pixel spacing. If you want the Z spacing, you'll have to do some math from the Origins of neighboring slices.
â Dave Chen
Aug 20 at 14:33
Hi Dave, Thanks for your inputs, But when i run your function, i get this
AttributeError: 'ImageSeriesReader' object has no attribute 'ReadImageInformation'
any ideas on this ?â Ryan
Aug 20 at 8:51
Hi Dave, Thanks for your inputs, But when i run your function, i get this
AttributeError: 'ImageSeriesReader' object has no attribute 'ReadImageInformation'
any ideas on this ?â Ryan
Aug 20 at 8:51
Oops, my bad. The method ReadImageInformation is in the class ImageFileReader, not ImageSeriesReader. So you can get the header info for each individual slice. Then GetSpacing would return the X-Y pixel spacing. If you want the Z spacing, you'll have to do some math from the Origins of neighboring slices.
â Dave Chen
Aug 20 at 14:33
Oops, my bad. The method ReadImageInformation is in the class ImageFileReader, not ImageSeriesReader. So you can get the header info for each individual slice. Then GetSpacing would return the X-Y pixel spacing. If you want the Z spacing, you'll have to do some math from the Origins of neighboring slices.
â Dave Chen
Aug 20 at 14:33
add a comment |Â
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
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fcodereview.stackexchange.com%2fquestions%2f201646%2fcheck-for-pixel-spacing-between-two-folder-images%23new-answer', 'question_page');
);
Post as a guest
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
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
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
1
Cross-posted from Stack Overflow
â Mathias Ettinger
Aug 14 at 8:02