Unable to perform assignment because the size of the left side is 465-by-680 and the size of the right side is 482-by-680.

4 ビュー (過去 30 日間)
john karli
john karli 2021 年 11 月 23 日
コメント済み: yanqi liu 2021 年 11 月 24 日
I am trying to get the specefic row and colum where row or column is less the 255. Then a want to save them in a variable, becasue the row is not the same in both 2 images so it gives me assignment arror. How do i solve it
clc
clear all
for k = 100:101
img_i = imread(['D:\data-11\sir task\New folder (2)\qi\snr30i4ASK' num2str(k) '.png']);
% img_i = imread(img_i);
img_i = rgb2gray(img_i);
row_i = find(any(img_i<255,2));
first_rowi = row_i(1);
last_rowi = row_i(end);
col_i = find(any(img_i<255,1));
first_coli = col_i(1);
last_coli = col_i(end);
new_imgi = img_i(first_rowi:last_rowi, first_coli:last_coli);
% For Q image
img_q = imread(['D:\data-11\sir task\New folder (2)\q\snr30q4ASK' num2str(k) '.png']);
% img_q = imread(img_q);
img_q = rgb2gray(img_q);
row_q = find(any(img_q<255,2));
first_rowq = row_q(1);
last_rowq = row_q(end);
col_q = find(any(img_q<255,1));
first_colq = col_q(1);
last_colq = col_q(end);
new_imgq = img_q(first_rowq:last_rowq, first_colq:last_colq);
final_img(:,:,1) = new_imgi;
final_img(:,:,2) = new_imgq;
p = 'D:\data-11\sir task\New folder (2)\f'
cd(p)
save(['snr304ASKiq' num2str(k) '.mat'], 'p');
cd ..
close
end
I have also uploaded the png

採用された回答

yanqi liu
yanqi liu 2021 年 11 月 24 日
sir,may be use the matrix data modify,such as
maxr = max([size(new_imgi,1) size(new_imgq,1)]);
if size(new_imgi,1) < maxr
new_imgi(maxr-size(new_imgi,1):maxr,:) = 255;
end
if size(new_imgq,1) < maxr
new_imgq(maxr-size(new_imgq,1):maxr,:) = 255;
end
the code is
clc; clear all; close all;
ims1 = {'https://ww2.mathworks.cn/matlabcentral/answers/uploaded_files/810454/snr30i4ASK100.png','https://ww2.mathworks.cn/matlabcentral/answers/uploaded_files/810459/snr30i4ASK101.png'};
ims2 = {'https://ww2.mathworks.cn/matlabcentral/answers/uploaded_files/810444/snr30q4ASK100.png','https://ww2.mathworks.cn/matlabcentral/answers/uploaded_files/810449/snr30q4ASK101.png'};
for k = 1:2
final_img=[];
img_i = imread(ims1{k});
% img_i = imread(img_i);
img_i = rgb2gray(img_i);
row_i = find(any(img_i<255,2));
first_rowi = row_i(1);
last_rowi = row_i(end);
col_i = find(any(img_i<255,1));
first_coli = col_i(1);
last_coli = col_i(end);
new_imgi = img_i(first_rowi:last_rowi, first_coli:last_coli);
% For Q image
img_q = imread(ims2{k});
% img_q = imread(img_q);
img_q = rgb2gray(img_q);
row_q = find(any(img_q<255,2));
first_rowq = row_q(1);
last_rowq = row_q(end);
col_q = find(any(img_q<255,1));
first_colq = col_q(1);
last_colq = col_q(end);
new_imgq = img_q(first_rowq:last_rowq, first_colq:last_colq);
maxr = max([size(new_imgi,1) size(new_imgq,1)]);
if size(new_imgi,1) < maxr
new_imgi(maxr-size(new_imgi,1):maxr,:) = 255;
end
if size(new_imgq,1) < maxr
new_imgq(maxr-size(new_imgq,1):maxr,:) = 255;
end
final_img(:,:,1) = new_imgi;
final_img(:,:,2) = new_imgq;
% p = 'D:\data-11\sir task\New folder (2)\f'
% cd(p)
% save(['snr304ASKiq' num2str(k) '.mat'], 'p');
% cd ..
% close
end
  2 件のコメント
yanqi liu
yanqi liu 2021 年 11 月 24 日
yes,sir,if the max row is 524,may be just set
maxr = max([524, size(new_imgi,1) size(new_imgq,1)]);
if size(new_imgi,1) < maxr
new_imgi(maxr-size(new_imgi,1):maxr,:) = 255;
end
if size(new_imgq,1) < maxr
new_imgq(maxr-size(new_imgq,1):maxr,:) = 255;
end

サインインしてコメントする。

その他の回答 (1 件)

Walter Roberson
Walter Roberson 2021 年 11 月 23 日
img_i = imread(['D:\data-11\sir task\New folder (2)\qi\snr30i4ASK' num2str(k) '.png']);
[...]
new_imgi = img_i(first_rowi:last_rowi, first_coli:last_coli);
new_imgi is sized based on information exclusively from the first image.
img_q = imread(['D:\data-11\sir task\New folder (2)\q\snr30q4ASK' num2str(k) '.png']);
[...]
new_imgq = img_q(first_rowq:last_rowq, first_colq:last_colq);
new_imgq is sized based on information exclusively from the second image.
final_img(:,:,1) = new_imgi;
final_img(:,:,2) = new_imgq;
but there you expect the two to be the same size.
  2 件のコメント
Walter Roberson
Walter Roberson 2021 年 11 月 24 日
This is probably not what you want to do.
Suppose you have matrix A that is white (255) for the first 5 columns, then has 5 columns of data, then has 5 columns of white -- 15 columns total, of which columns 6, 7, 8, 9, 10 are "interesting".
Now suppose you have matrix B that is white (255) for the first 3 columns, then has 3 columns of "interesting" data, and then has 9 columns of white -- 15 columns total, of which columns 4, 5, 6 are "interesting".
You do your extracting, and you come out with a matrix with 5 columns for A. You do your extracting, and you come out with a matrix with 3 columns for B. Now before you wanted to pad them to a common size, so you would leave the subset of A alone, and you would pad the subset of B with two columns of white, and then put the two together. Or now you want to pad them to the original size, so you would take the subset of A and add 10 columns of white, and you would take the subset of B and add 12 columns of white, and put those together.
But do these make sense to do?? I don't think so! Your original column 6 of A is now aligned with your original column 4 of B
I would suggest that you either want to trim off the leading and trailing rows that are white in both arrays... or else that you just want to put the arrays together unchanged. Your array A that has 5 columns of leading white... if you were to extract the non-white columns and then pad with white on both sides to align it with B... you would get exactly the same A as you already had. (Unless, that is, you pad with something different than 255.)

サインインしてコメントする。

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by