How I can repeatedly divide a binary image ?
显示 更早的评论
I want to divide a binary image into 4 equal parts first. Then each parts again to 4 parts and so on. I want to repeat this work upto certain no of times . How to do that?
回答(3 个)
darova
2019-4-13
Use mat2cell()
clc,clear
A = imread('fig3.png');
I = im2bw(A);
k = 128; % divide matrix into 128 parts
[m,n] = size(I);
rows_rest = mod(m,k);
cols_rest = mod(n,k);
nrows = (m-rows_rest)/k *ones(1,k);
ncols = (n-cols_rest)/k *ones(1,k);
nrows(1:rows_rest) = nrows(1:rows_rest) + 1;
ncols(1:cols_rest) = ncols(1:cols_rest) + 1;
C = mat2cell(I,nrows,ncols);
7 个评论
Zara Khan
2019-4-13
darova
2019-4-13
Why cant you rebuild that code with loops?
Zara Khan
2019-4-13
Image Analyst
2019-4-13
You CAN do this with loops if you want. You can maybe do it with other ways like reshape or permute or something -- I'd have to spend time to look into it.
Would you want all the chunks of this divided-up image to be stacked as slices in a 3D array - this is more efficient than a cell array?
Zara Khan
2019-4-13
Zara Khan
2019-4-14
darova
2019-4-14
The best way is to pay someone
Image Analyst
2019-4-14
Your image is not a power of 2.
Try this code:
clc; % Clear the command window.
clear all;
close all; % Close all figures (except those of imtool.)
workspace; % Make sure the workspace panel is showing.
format long g;
format compact;
fontSize = 16;
%===============================================================================
% Get the name of the image the user wants to use.
baseFileName = 'fig3.png';
folder = pwd;
fullFileName = fullfile(folder, baseFileName);
% Check if file exists.
if ~exist(fullFileName, 'file')
% The file doesn't exist -- didn't find it there in that folder.
% Check the entire search path (other folders) for the file by stripping off the folder.
fullFileNameOnSearchPath = baseFileName; % No path this time.
if ~exist(fullFileNameOnSearchPath, 'file')
% Still didn't find it. Alert user.
errorMessage = sprintf('Error: %s does not exist in the search path folders.', fullFileName);
uiwait(warndlg(errorMessage));
return;
end
end
%=======================================================================================
% Read in demo image.
grayImage = imread(fullFileName);
% Get the dimensions of the image.
[rows, columns, numberOfColorChannels] = size(grayImage)
if numberOfColorChannels > 1
grayImage = grayImage(:, :, 3);
end
% Make sure it's square
if rows ~= columns
grayImage = imresize(grayImage, [rows, rows]);
% Get the dimensions of the image.
[rows, columns, numberOfColorChannels] = size(grayImage)
end
% Display image.
subplot(2, 2, 1);
imshow(grayImage, []);
impixelinfo;
axis('on', 'image');
caption = sprintf('Original image: %d rows by %d columns', rows, columns);
title(caption, 'FontSize', fontSize, 'Interpreter', 'None');
hp = impixelinfo(); % Set up status line to see values when you mouse over the image.
% Set up figure properties:
% Enlarge figure to full screen.
set(gcf, 'Units', 'Normalized', 'OuterPosition', [0 0.05 1 0.95]);
% Get rid of tool bar and pulldown menus that are along top of figure.
% set(gcf, 'Toolbar', 'none', 'Menu', 'none');
% Give a name to the title bar.
set(gcf, 'Name', 'Demo by ImageAnalyst', 'NumberTitle', 'Off')
drawnow;
% Define the function that we will apply to each block.
% First in this demo we will take the median gray value in the block
% and create an equal size block where all pixels have the median value.
% Image will be the same size since we are using ones() and so for each block
% there will be a block of 8 by 8 output pixels.
nnzFunction = @(theBlockStructure) nnz(theBlockStructure.data(:));
% Now do a loop to divide by half each time and count the number of non-zeros.
counter = 1;
newRows = rows;
newCols = columns;
while newRows >= 1
% Round sizes.
newRows = floor(newRows);
newCols = floor(newCols);
% Resize the image.
grayImage = imresize(grayImage, [newRows, newCols], 'nearest');
% Get the dimensions of the image.
[rows, columns, numberOfColorChannels] = size(grayImage)
% Show the image
subplot(2, 2, 2);
imshow(grayImage);
axis('on', 'image');
caption = sprintf('%d rows by %d columns', newRows, newCols);
title(caption, 'FontSize', fontSize);
% Count the number of non-zero pixels.
whitePixelCount(counter) = nnz(grayImage);
% Display counts so far.
subplot(2, 2, 3:4);
plot(whitePixelCount, 'b.-', 'MarkerSize', 30);
grid on;
title('White Pixel Count', 'FontSize', fontSize);
xlabel('Image number', 'FontSize', fontSize);
ylabel('Count (Number of White Pixels)', 'FontSize', fontSize);
drawnow;
% Compute half the number of rows and columns.
% May be a fractional number if the rows and columns are not a power of 2.
newRows = (rows / 2);
newCols = (columns / 2);
% Show user the results.
promptMessage = sprintf('%d white pixels in this image.\nDo you want to Continue processing,\nor Quit processing?', whitePixelCount(counter));
titleBarCaption = 'Continue?';
buttonText = questdlg(promptMessage, titleBarCaption, 'Continue', 'Quit', 'Continue');
if contains(buttonText, 'Quit')
return;
end
% Increment index for whitePixelCount array.
counter = counter + 1;
end
% Show in command window.
whitePixelCount

4 个评论
Zara Khan
2019-4-16
Image Analyst
2019-4-18
Start with a small image of 16 by 16 pixels and explain step by step what you want as the output at each step.
Zara Khan
2019-4-19
Walter Roberson
2019-4-19
0 个投票
Code for repeatedly dividing was provided at https://www.mathworks.com/matlabcentral/answers/456856-how-can-i-loop-over-a-binary-image-to-get-4-equal-quadrants-always#answer_371003
7 个评论
Zara Khan
2019-4-19
Walter Roberson
2019-4-19
What does it mean to "set a label" ?
Image Analyst
2019-4-19
Do you know how to do recursive functions?
Walter Roberson
2019-4-19
function splitted = rsplit4(img, sd)
[r, c, p] = size(img);
if sd <= 0 || mod(r,2) || mod(c,2)
splitted = img;
else
splitted = {rsplit4(img(1:end/2,1:end/2, :), sd-1), rsplit4(img(1:end/2,end/2+1:end, :), sd-1);
rsplit4(img(end/2+1:end,1:end/2,:), sd-1), rsplit4(img(end/2+1:end,end/2+1:end,:)), sd-1};
end
end
Now you call rsplit4 passing in the image and the maximum number of subdivisions.
Zara Khan
2019-4-20
Zara Khan
2019-4-23
类别
在 帮助中心 和 File Exchange 中查找有关 HDL-Optimized Algorithm Design 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!