Assignment has more non-singleton rhs dimensions than non-singleton subscripts, please help
古いコメントを表示
I am writing a program that finds dark disks in an image then crops that image for a grouping of images.
After everyone's help i got the code to work up to actually saving an image.. heres the code so far
clear all; close all; clc;
%script for running several images through finddisk
path = 'C:\Users\darkloki3\Desktop\Research in Squires Lab\images for multidiskfind\cool frames';
destination= 'C:\Users\darkloki3\Desktop\Research in Squires Lab\images for multidiskfind\cool frames\cropped cool frames';
frames = dir(path);
%creating an array with the names of the image files in the folder
for n= 1:length(frames)
filenumber = int2str(n);%integer to string
while length(filenumber)<5
filenumber=cat(2,'0',filenumber);
end
newfilename(n,:)=[path,filesep,filenumber,'.png'];
end
threshold = 45;
if exist(destination) ~= 7
mkdir(destination)
end
frames;
nu=1;
for i=1:895
finddisk(newfilename(i,:),'png',threshold);
% disk = ans;
% %crop image around disk and save as a new image
imwrite(ans,['C:\Users\darkloki3\Desktop\hopefully cropped',filesep,num2str(nu)],'jpeg')
nu=nu+1;
end
for n= 1:length(frames)
filenumber2 = int2str(n);%integer to string
while length(filenumber2)<5
filenumber2=cat(2,'0',filenumber2);
end
newfilename2(n,:)=[path,filesep,filenumber2,'.png'];
end
for j=1:895
finddiskcenter(newfilename2(j,:),'png',threshold);
matrix=imread(newfilename2(j,:),'png');
x=floor(ans(1,2));
y=floor(ans(1,1));
w=1;
newmatrix=zeros(200);
for i = (y-200):570
z=1;
for j = (x-200):760
newmatrix(w,z) = matrix(i,j);
z=z+1;
end
w=w+1;
end
imwrite(newmatrix,['C:\Users\darkloki3\Desktop\hopefully cropped',filesep,num2str(j)],'png')
end
3 件のコメント
jeremy wright
2012 年 8 月 19 日
編集済み: Walter Roberson
2012 年 8 月 20 日
jeremy wright
2012 年 8 月 19 日
Walter Roberson
2012 年 8 月 20 日
num2str(nu) in the imwrite()
採用された回答
その他の回答 (2 件)
Hello
In your code
newfilename=char(filename);
is an array of characters, that you then try to assign strings to:
newfilename(n,1)=[path,filesep,filenumber,'.png'];
That's a no-no. I figure that is what's producing the error. If you want to preallocate an array of 10 filenames:
nameArray = cell(10,1);
that you can then populate, e.g.:
nameArray{1} = 'yourString';
and access:
iWantMyStringBack = nameArray{1};
Cheers!
4 件のコメント
jeremy wright
2012 年 8 月 19 日
José-Luis
2012 年 8 月 19 日
Hi Jeremy.
I modified the code above. I just used repmat to create a cell array. I give another alternative in the modified code. Be careful to store and extract using the curly braces in order to get and store the string.
Cheers!
jeremy wright
2012 年 8 月 19 日
編集済み: jeremy wright
2012 年 8 月 19 日
jeremy wright
2012 年 8 月 19 日
編集済み: jeremy wright
2012 年 8 月 19 日
Jan
2012 年 8 月 19 日
- Do not shadow the important function path by a local variable.
- SPRINTF is smarter for adding leading zeros.
- Use a cell string instead of a CHAR matrix:
folder = 'C:\Users\darkloki3\Desktop\Research in Squires Lab\images for multidiskfind\cool frames';
newfilename = cell(1, length(frames));
for n = 1:length(frames)
filenumber = sprintf('%05d', n);
newfilename{n} = [folder, filesep, filenumber, '.png'];
end
3 件のコメント
jeremy wright
2012 年 8 月 20 日
Star Strider
2012 年 8 月 20 日
It's one of a number of format specifiers used in fprintf, sprintf, and other I/O functions. Specifically, '%05d' inserts leading zeros in a 5-digit field to return to filenumber a string to use in newfilename. For instance, if:
n = 1
filenumber = '00001'
or if:
n = 32767
filenumber = '32767'
The reason for zero-padding is to be sure all the filenames have the same length (number of characters). That makes them much easier to sort, find, and read later.
jeremy wright
2012 年 8 月 20 日
カテゴリ
ヘルプ センター および File Exchange で Images についてさらに検索
製品
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!