formation of image [closed] - colors

It's difficult to tell what is being asked here. This question is ambiguous, vague, incomplete, overly broad, or rhetorical and cannot be reasonably answered in its current form. For help clarifying this question so that it can be reopened, visit the help center.
Closed 10 years ago.
how to make an image(of 510*510) with red , green ,bue in upper row and cyan magenta and yellow in lower row in matlab with equal portion for all.

Your question is a little vague, but I think I know what you are asking for. The hue channel of an HSV image is usually thought of as ranging from 0 to 360 degrees, since it is a cylindrical-coordinate representation of points in an RGB color model. However, the values of the hue channel are likely ranging from 0 to 1 for your image, which is what you get as output from the function RGB2HSV, if that's what you used to get your HSV map.
So, if you want to shift your hues by 120 degrees, you would have to shift your range by 1/3. In other words, values ranging from 0 to 1/3 should be changed to range from 1/3 to 2/3, assuming a positive shift of 120 degrees. You can achieve this with the REM function like so:
H = rem(H + 1/3, 1);
For a negative shift of 120 degrees, you can just apply an equivalent positive shift of 240 degrees, like so:
H = rem(H + 2/3, 1);

For a poor-man's version of #gnovice's answer, I suggest simply swapping the R,G, and B channels, as suggested by #JasonD
Say you have a n-by-m-by-3 RGB image stored in an array img. Then, you shift the channels as follows
shiftedImg = img(:,:,[2 3 1]);
or
shiftedImg = img(:,:,[3 1 2]);

Related

lever 5 times that you will get your 3rd Green Light on the 5th pull of the lever

Assume P(Red Light) = .40 and P(Green Light) = .60.
This is not answerable as stated; at least, not without assuming independence and without a clearer statement of what the probability is out of (the reference class: is it out of all ways in which the five pulls could turn out, or only the ones in which there are three green?)
If we're willing to assume indendence and that we're talking about any combination of 5 pulls, then the desired outcome is the probability that:
There are 3 green lights of 5 AND
The fifth is green.
This is the same as
There are 2 green lights in the first 4 AND
The fifth is green.
The probability of getting 2 green lights of 4 can be calculated using the binomial probability distribution and is
choose(4,2) * .4^2 * .6^2
The probability of the fifth being green is .6. So the whole probability is
choose(4,2) * .4^2 * .6^2 * .6 = choose(4,2) * .4^2 * .6^3

Weighted Trendline in Excel

This is an extension to the question asked in the forums a few years ago:
Excel produces scatter diagrams for sets of pair values. It also gives the option of producing a best fit trendline and formula for the trendline. It also produces bubble diagrams which take into consideration a weight provided with each value. However, the weight has no influence on the trendline or formula. Here is an example set of values, with their mappings and weights.
Value Map Weight
0 1 10
1 2 10
2 5 10
3 5 20
4 6 20
5 1 1
I have used the formula that brettDJ offered:
=INDEX(LINEST(B2:B7*C2:C7^0.5,IF({1,0},1,A2:A7)*C2:C7^0.5,TRUE,TRUE),3,1)
However, I could not understand why we used the ^0.5 here to sqrt the weights.
The original question is here

Expand a set of numbers in excel [closed]

Closed. This question is off-topic. It is not currently accepting answers.
Want to improve this question? Update the question so it's on-topic for Stack Overflow.
Closed 10 years ago.
Improve this question
I have an excel spreadsheet with
x y
0 -1.5
100 1.6
200 0
300 -6.8
400 -19.8
500 -39.9
I want to find the values where x = 600 through 1500. I have tried making a graph and using the trend line and getting Polynomial 2, and it returns
y = -2.8857x2 + 12.686x - 11.7
R² = 0.999
So i plug this into my calculation using
=-2.8857*A110*A110+12686*A110-11.7
where A110 is the value 600, but it answers
6572736.3
I'm no math major, but in a trend of -6.8,-19.8,-39.9, the next number is not 6572736.3
Can someone please tell me how to figure out the equation so I can complete the series of numbers?
I concur with #mkingston (see output below**).
I'd add two points:
1) I find it is always a good idea to plot the original data and the regression equation before doing anything with the equation. In this case, plotting #mkingston's result gives:
... which shows that #mkingston's fitted results (shown by the lines) are, in fact, a good fit to the original data.
2) Extrapolation is always hazardous. If you already have a very good reason to believe that the underlying function is a quadratic of the form that we've fitted here, then the fit results below indicate the uncertainty in the parameters and hence can be used to estimate the uncertainty in the prediction (which may be quite substantial once you extrapolate to x = 1500). If, on the other hand, the quadratic equation that we've fitted is just a convenient shape that fits the data range that is available to us, then there are many alternative functions that could fit the available data roughly as well as this quadratic does, but would predict wildly different values for the range x = 600 to 1500. In this latter case, I'd descrbe any prediction at x = 600 as very uncertain and any prediction beyond that point as highly speculative, at best.
**The output I get from the Data | Data Analysis | Regression function of Excel 2007 is (after I've edited to change "X Variable" to "X" and "X Variable 2" to "X^2" for clarity):
SUMMARY OUTPUT
Regression Statistics
Multiple R 0.999516468
R Square 0.99903317
Adjusted R Square 0.998388617
Standard Error 0.647338875
Observations 6
ANOVA
df SS MS F Significance F
Regression 2 1299.01619 649.5080952 1549.9625 3.00625E-05
Residual 3 1.257142857 0.419047619
Total 5 1300.273333
Coefficients Standard Error t Stat P-value Lower 95% Upper 95% Lower 95.0% Upper 95.0%
Intercep -1.9 0.586700679 -3.238448611 0.047907326 -3.767143409 -0.032856591 -3.767143409 -0.032856591
X 0.069142857 0.005518676 12.52888554 0.00109613 0.051579968 0.086705 746 0.051579968 0.086705746
X^2 -0.000288571 1.05946E-05 -27.23767444 0.000108607 -0.000322288 -0.000254855 -0.000322288 -0.000254855

How to calculate growth with a positive and negative number?

I am trying to calculate percentage growth in excel with a positive and negative number.
This Year's value: 2434
Last Year's value: -2
formula I'm using is:
(This_Year - Last_Year) / Last_Year
=(2434 - -2) / -2
The problem is I get a negative result. Can an approximate growth number be calculated and if so how?
You could try shifting the number space upward so they both become positive.
To calculate a gain between any two positive or negative numbers, you're going to have to keep one foot in the magnitude-growth world and the other foot in the volume-growth world. You can lean to one side or the other depending on how you want the result gains to appear, and there are consequences to each choice.
Strategy
Create a shift equation that generates a positive number relative to the old and new numbers.
Add the custom shift to the old and new numbers to get new_shifted and old_shifted.
Take the (new_shifted - old_shifted) / old_shifted) calculation to get the gain.
For example:
old -> new
-50 -> 30 //Calculate a shift like (2*(50 + 30)) = 160
shifted_old -> shifted_new
110 -> 190
= (new-old)/old
= (190-110)/110 = 72.73%
How to choose a shift function
If your shift function shifts the numbers too far upward, like for example adding 10000 to each number, you always get a tiny growth/decline. But if the shift is just big enough to get both numbers into positive territory, you'll get wild swings in the growth/decline on edge cases. You'll need to dial in the shift function so it makes sense for your particular application. There is no totally correct solution to this problem, you must take the bitter with the sweet.
Add this to your excel to see how the numbers and gains move about:
shift function
old new abs_old abs_new 2*abs(old)+abs(new) shiftedold shiftednew gain
-50 30 50 30 160 110 190 72.73%
-50 40 50 40 180 130 220 69.23%
10 20 10 20 60 70 80 14.29%
10 30 10 30 80 90 110 22.22%
1 10 1 10 22 23 32 39.13%
1 20 1 20 42 43 62 44.19%
-10 10 10 10 40 30 50 66.67%
-10 20 10 20 60 50 80 60.00%
1 100 1 100 202 203 302 48.77%
1 1000 1 1000 2002 2003 3002 49.88%
The gain percentage is affected by the magnitude of the numbers. The numbers above are a bad example and result from a primitive shift function.
You have to ask yourself which critter has the most productive gain:
Evaluate the growth of critters A, B, C, and D:
A used to consume 0.01 units of energy and now consumes 10 units.
B used to consume 500 units and now consumes 700 units.
C used to consume -50 units (Producing units!) and now consumes 30 units.
D used to consume -0.01 units (Producing) and now consumes -30 units (producing).
In some ways arguments can be made that each critter is the biggest grower in their own way. Some people say B is best grower, others will say D is a bigger gain. You have to decide for yourself which is better.
The question becomes, can we map this intuitive feel of what we label as growth into a continuous function that tells us what humans tend to regard as "awesome growth" vs "mediocre growth".
Growth a mysterious thing
You then have to take into account that Critter B may have had a far more difficult time than critter D. Critter D may have far more prospects for it in the future than the others. It had an advantage! How do you measure the opportunity, difficulty, velocity and acceleration of growth? To be able to predict the future, you need to have an intuitive feel for what constitutes a "major home run" and a "lame advance in productivity".
The first and second derivatives of a function will give you the "velocity of growth" and "acceleration of growth". Learn about those in calculus, they are super important.
Which is growing more? A critter that is accelerating its growth minute by minute, or a critter that is decelerating its growth? What about high and low velocity and high/low rate of change? What about the notion of exhausting opportunities for growth. Cost benefit analysis and ability/inability to capitalize on opportunity. What about adversarial systems (where your success comes from another person's failure) and zero sum games?
There is exponential growth, liner growth. And unsustainable growth. Cost benefit analysis and fitting a curve to the data. The world is far queerer than we can suppose. Plotting a perfect line to the data does not tell you which data point comes next because of the black swan effect. I suggest all humans listen to this lecture on growth, the University of Colorado At Boulder gave a fantastic talk on growth, what it is, what it isn't, and how humans completely misunderstand it. http://www.youtube.com/watch?v=u5iFESMAU58
Fit a line to the temperature of heated water, once you think you've fit a curve, a black swan happens, and the water boils. This effect happens all throughout our universe, and your primitive function (new-old)/old is not going to help you.
Here is Java code that accomplishes most of the above notions in a neat package that suits my needs:
Critter growth - (a critter can be "radio waves", "beetles", "oil temprature", "stock options", anything).
public double evaluate_critter_growth_return_a_gain_percentage(
double old_value, double new_value) throws Exception{
double abs_old = Math.abs(old_value);
double abs_new = Math.abs(new_value);
//This is your shift function, fool around with it and see how
//It changes. Have a full battery of unit tests though before you fiddle.
double biggest_absolute_value = (Math.max(abs_old, abs_new)+1)*2;
if (new_value <= 0 || old_value <= 0){
new_value = new_value + (biggest_absolute_value+1);
old_value = old_value + (biggest_absolute_value+1);
}
if (old_value == 0 || new_value == 0){
old_value+=1;
new_value+=1;
}
if (old_value <= 0)
throw new Exception("This should never happen.");
if (new_value <= 0)
throw new Exception("This should never happen.");
return (new_value - old_value) / old_value;
}
Result
It behaves kind-of sort-of like humans have an instinctual feel for critter growth. When our bank account goes from -9000 to -3000, we say that is better growth than when the account goes from 1000 to 2000.
1->2 (1.0) should be bigger than 1->1 (0.0)
1->2 (1.0) should be smaller than 1->4 (3.0)
0->1 (0.2) should be smaller than 1->3 (2.0)
-5-> -3 (0.25) should be smaller than -5->-1 (0.5)
-5->1 (0.75) should be smaller than -5->5 (1.25)
100->200 (1.0) should be the same as 10->20 (1.0)
-10->1 (0.84) should be smaller than -20->1 (0.91)
-10->10 (1.53) should be smaller than -20->20 (1.73)
-200->200 should not be in outer space (say more than 500%):(1.97)
handle edge case 1-> -4: (-0.41)
1-> -4: (-0.42) should be bigger than 1-> -9:(-0.45)
Simplest solution is the following:
=(NEW/OLD-1)*SIGN(OLD)
The SIGN() function will result in -1 if the value is negative and 1 if the value is positive. So multiplying by that will conditionally invert the result if the previous value is negative.
Percentage growth is not a meaningful measure when the base is less than 0 and the current figure is greater than 0:
Yr 1 Yr 2 % Change (abs val base)
-1 10 %1100
-10 10 %200
The above calc reveals the weakness in this measure- if the base year is negative and current is positive, result is N/A
It is true that this calculation does not make sense in a strict mathematical perspective, however if we are checking financial data it is still a useful metric. The formula could be the following:
if(lastyear>0,(thisyear/lastyear-1),((thisyear+abs(lastyear)/abs(lastyear))
let's verify the formula empirically with simple numbers:
thisyear=50 lastyear=25 growth=100% makes sense
thisyear=25 lastyear=50 growth=-50% makes sense
thisyear=-25 lastyear=25 growth=-200% makes sense
thisyear=50 lastyear=-25 growth=300% makes sense
thisyear=-50 lastyear=-25 growth=-100% makes sense
thisyear=-25 lastyear=-50 growth=50% makes sense
again, it might not be mathematically correct, but if you need meaningful numbers (maybe to plug them in graphs or other formulas) it's a good alternative to N/A, especially when using N/A could screw all subsequent calculations.
You should be getting a negative result - you are dividing by a negative number. If last year was negative, then you had negative growth. You can avoid this anomaly by dividing by Abs(Last Year)
Let me draw the scenario.
From: -303 To 183, what is the percentage change?
-303, -100% 0 183, 60.396% 303, 100%
|_________________ ||||||||||||||||||||||||________|
(183 - -303) / |-303| * 100 = 160.396%
Total Percent Change is approximately 160%
Note: No matter how negative the value is, it is treated as -100%.
The best way to solve this issue is using the formula to calculate a slope:
(y1-y2/x1-x2)
*define x1 as the first moment, so value will be "C4=1"
define x2 as the first moment, so value will be "C5=2"
In order to get the correct percentage growth we can follow this order:
=(((B4-B5)/(C4-C5))/ABS(B4))*100
Perfectly Works!
Simplest method is the one I would use.
=(ThisYear - LastYear)/(ABS(LastYear))
However it only works in certain situations. With certain values the results will be inverted.
It really does not make sense to shift both into the positive, if you want a growth value that is comparable with the normal growth as result of both positive numbers. If I want to see the growth of 2 positive numbers, I don't want the shifting.
It makes however sense to invert the growth for 2 negative numbers. -1 to -2 is mathematically a growth of 100%, but that feels as something positive, and in fact, the result is a decline.
So, I have following function, allowing to invert the growth for 2 negative numbers:
setGrowth(Quantity q1, Quantity q2, boolean fromPositiveBase) {
if (q1.getValue().equals(q2.getValue()))
setValue(0.0F);
else if (q1.getValue() <= 0 ^ q2.getValue() <= 0) // growth makes no sense
setNaN();
else if (q1.getValue() < 0 && q2.getValue() < 0) // both negative, option to invert
setValue((q2.getValue() - q1.getValue()) / ((fromPositiveBase? -1: 1) * q1.getValue()));
else // both positive
setValue((q2.getValue() - q1.getValue()) / q1.getValue());
}
These questions are answering the question of "how should I?" without considering the question "should I?" A change in the value of a variable that takes positive and negative values is fairly meaning less, statistically speaking. The suggestion to "shift" might work well for some variables (e.g. temperature which can be shifted to a kelvin scale or something to take care of the problem) but very poorly for others, where negativity has a precise implication for direction. For example net income or losses. Operating at a loss (negative income) has a precise meaning in this context, and moving from -50 to 30 is not in any way the same for this context as moving from 110 to 190, as a previous post suggests. These percentage changes should most likely be reported as "NA".
Just change the divider to an absolute number.i.e.
A B C D
1 25,000 50,000 75,000 200%
2 (25,000) 50,000 25,000 200%
The formula in D2 is: =(C2-A2)/ABS(A2) compare with the all positive row the result is the same (when the absolute base number is the same). Without the ABS in the formula the result will be -200%.
Franco
Use this code:
=IFERROR((This Year/Last Year)-1,IF(AND(D2=0,E2=0),0,1))
The first part of this code iferror gets rid of the N/A issues when there is a negative or a 0 value. It does this by looking at the values in e2 and d2 and makes sure they are not both 0. If they are both 0 then it will place a 0%. If only one of the cells are a 0 then it will place 100% or -100% depending on where the 0 value falls. The second part of this code (e2/d2)-1 is the same code as (this year - lastyear)/Last year
Please click here for example picture
I was fumbling for answers today, and think this would work...
=IF(C5=0, B5/1, IF(C5<0, (B5+ABS(C5)/1), IF(C5>0, (B5/C5)-1)))
C5 = Last Year, B5 = This Year
We have 3 IF statements in the cell.
IF Last Year is 0, then This Year divided by 1
IF Last Year is less than 0, then This Year + ABSolute value of Last Year divided by 1
IF Last Year is greater than 0, then This Year divided by Last Year minus 1
Use this formula:
=100% + (Year 2/Year 1)
The logic is that you recover 100% of the negative in year 1 (hence the initial 100%) plus any excess will be a ratio against year 1.
Short one:
=IF(D2>C2, ABS((D2-C2)/C2), -1*ABS((D2-C2)/C2))
or confusing one (my first attempt):
=IF(D2>C2, IF(C2>0, (D2-C2)/C2, (D2-C2)/ABS(C2)), IF(OR(D2>0,C2>0), (D2-C2)/C2, IF(AND(D2<0, C2<0), (D2-C2)/ABS(C2), 0)))
D2 is this year, C2 is last year.
Formula should be this one:
=(thisYear+IF(LastYear<0,ABS(LastYear),0))/ABS(LastYear)-100%
The IF value if < 0 is added to your Thisyear value to generate the real difference.
If > 0, the LastYear value is 0
Seems to work in different scenarios checked
This article offers a detailed explanation for why the (b - a)/ABS(a) formula makes sense. It is counter-intuitive at first, but once you play with the underlying arithmetic, it starts to make sense. As you get used to it eventually, it changes the way you look at percentages.
Aim is to get increase rate.
Idea is following:
At first calculate value of absolute increase.
Then value of absolute increase add to both, this and last year values. And then calculate increase rate, based on the new values.
For example:
LastYear | ThisYear | AbsoluteIncrease | LastYear01 | ThisYear01 | Rate
-10 | 20 | 30 = (10+20) | 20=(-10+30)| 50=(20+30) | 2.5=50/20
-20 | 20 | 40 = (20+20) | 20=(-20+40)| 60=(20+40) | 3=60/2
=(This Year - Last Year) / (ABS(Last Year))
This only works reliably if this year and last year are always positive numbers.
For example last_year=-50 this_year = -1. You get -100% growth when in fact the numbers have improved a great deal.

How is transparency actually implemented ?

Given two images A,B I want a third image C which is as if B had transparency of t=0.5 and placed on top of A.
How is C calculated in reality and how n affects it ? I am not interested in any program or pseudo code I just want to know the basic rationale.
One way I think is C is nothing but alternating pixels of A and B. What are the other ways ?
The color and optionally transparency of each pixel of A and B is combined according to the weight.
If the transparency is 0.75, then typically 25% of the color values from B and 75% of the color values from A (the underlying image) would be used.
Basically, the red, green, blue, and optionally the alpha channels are each calculated like this, and then recombined to form one resulting pixel.
Example:
A = [1 0 0] <-- red
B = [0 1 0] <-- blue
a = 0.75 (which means B is more transparent than it is opaque)
C = [
0.75 = 1 * 0.75 + 0 * 0.25 (red component)
0.25 = 0 * 0.75 + 1 * 0.25 (green component)
0.00 = 0 * 0.75 + 0 * 0.25 (blue component)
] // A B
If the images have alpha channels on their own, the calculation becomes more complex.
I am not sure if by "reality" you mean source code that hacks such effect, or how it works in nature.
In code
You can overlay images transparently by a simple linear interpolation of both input images:
Color lerp (Color lhs, Color rhs, real f) {
return (1-f)*lhs + f*rhs;
}
Image overlay_transparent (Image a, Image b, real f) {
assert (a.width == b.width);
assert (a.height == b.height);
Image output;
for_each (y : 0 .. a.height)
for_each (x : 0 .. a.width)
output(x,y) = lerp(a(x,y), b(x,y), f);
return output;
}
You could then do a 50% overlay by calling overlay_transparent (a,b, 0.5).
In reality
Transparent materials reflect a fraction of the incoming light, some fraction is absorbed,
and another fraction is transmitted through the material.
A perfect mirror reflects all of the incoming light specularly, each particles outgoing vector
solely depends on its incoming vector.
A perfectly diffuse material reflects all of the incoming light, but for each incoming vector
there are infinitely many possible outoing vectors within the hemisphere over the hit-point.
A perfectly absorbing material is black like The Void itself.
A perfectly transmitting material that does not perturb particles on their way through the material
would be invisible.
All of these perfect materials are not found in nature so far, and most real world materials are a mix of them.
Note that this is a science in itself; for deeper knowledge, you could begin studying Realistic Image Synthesis
and Path Tracing, as well as the concept of BRDF/BSDF/... .
For each pixel, the value of each component in C (Red, Green Blue) is the average of the values for the components of A and B.
If the transparency is not 50% a weighted average is used.
If you use alternating pixels the result will not be smooth. If A is all black and B is all wight alternating pixels would give a striped pattern while average RGB values on each pixel gives an even 50% gray surface.

Resources